欢迎来到天天文库
浏览记录
ID:14088861
大小:59.50 KB
页数:4页
时间:2018-07-26
《利用定时器2模拟pwm控制led亮度变化》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include"delay.h"#include"com.h"#include"key.h"#include"beep.h"sfr T2MOD=0xC9; //定时器2#define WM_COUST 20 //PWM细分数volatileunsignedcharPWM_H; //PWM占空比调节volatileunsignedcharPWM_CNT=0; //PWM自增值/**************************************************************** 定时器2中断程序************************
2、***************************************/voidTimer2(void)interrupt5using1{ if(PWM_CNT=PWM_COUST) //PWM计数清零 { WM_CNT=0; } else { WM_CNT++; //自增值加1 } }/****************************************************************
3、 定时器2初始化***************************************************************/#defineMSB_reload_value0xDB //msbreloadvalueexemple高位重载值:延时10ms#defineLSB_reload_value0xF0 //lsbreloadvalueexemple低位重载值voidTimer2Init(void){ //T2OE=0;定时器2输出不允许 T2MOD=0x01; //DCEN=1;可以设置为向上/下计数:此程序中为向上达到0xff时溢出 T2CON=0; //TF2
4、EXF2RCLKTCLKEXEN2TR2C_T2CP_RL2 //EXF2=0; resetflag定时器2外部标志位清除 //TCLK=0;RCLK=0; disablebaudrategenerator不用于波特率发生器 //EXEN2=0;ignoreeventsonT2EX视T2EX(P1.1)端信号无效 //C_T2=0;timermode定时模式 //CP_RL2=0; reloadmode重载模式 TH2 =MSB_reload_value;//Initmsb_value填入初始化值 TL2 =LSB_reload_value;//Initlsb_value RCAP
5、2H=MSB_reload_value;//reloadmsb_value重载值 RCAP2L=LSB_reload_value;//reloadlsb_value ET2=1; //enabletimer2interrupt允许T2中断}/******************************************************** 系统初始化********************************************************/voidInitSys(void){ DelayMs(100); //等待系统稳定 0=0xFF;
6、 //初始化IO 1=0xFF; 2=0xFF; 3=0xFF; InitSerial(); //串口初始化 Timer2Init(); //定时器2初始化 EA =1; //开总中断 WM_H =5; //初始占空比5 PWM_CNT=0; //初始化PWM自增值}/******************************************************** 主函数********************************************************/ voidmain(void){ unsignedcharucKe
7、y; InitSys(); //初始化 TR2=1; //启动定时器2 while(1) { ucKey=KeyScan(); //读取键盘值 if(ucKey!=ValNull) //如果不为空 { if(ucKey==ValKey16) //如果等于key16 { if(PWM_H<=PWM_COUST) //如果PWM_H在PWM范围内 { PWM_H++; /
此文档下载收益归作者所有