資源描述:
《利用定時(shí)器2模擬pwm控制led亮度變化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、#include"delay.h"#include"com.h"#include"key.h"#include"beep.h"sfr?T2MOD=0xC9;??//定時(shí)器2#define?WM_COUST?20????//PWM細(xì)分?jǐn)?shù)volatileunsignedcharPWM_H;???//PWM占空比調(diào)節(jié)volatileunsignedcharPWM_CNT=0;??//PWM自增值/****************************************************************??????定時(shí)器2中斷程序************************
2、***************************************/voidTimer2(void)interrupt5using1{?if(PWM_CNT=PWM_COUST)?//PWM計(jì)數(shù)清零?{??WM_CNT=0;?}?else?{??WM_CNT++;??//自增值加1?}?}/****************************************************************????
3、??定時(shí)器2初始化***************************************************************/#defineMSB_reload_value0xDB?//msbreloadvalueexemple高位重載值:延時(shí)10ms#defineLSB_reload_value0xF0?//lsbreloadvalueexemple低位重載值voidTimer2Init(void){?//T2OE=0;定時(shí)器2輸出不允許??T2MOD=0x01;?//DCEN=1;可以設(shè)置為向上/下計(jì)數(shù):此程序中為向上達(dá)到0xff時(shí)溢出?T2CON=0;??//TF2
4、EXF2RCLKTCLKEXEN2TR2C_T2CP_RL2?//EXF2=0;?resetflag定時(shí)器2外部標(biāo)志位清除?//TCLK=0;RCLK=0;?disablebaudrategenerator不用于波特率發(fā)生器?//EXEN2=0;ignoreeventsonT2EX視T2EX(P1.1)端信號(hào)無效?//C_T2=0;timermode定時(shí)模式?//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中斷}/********************************************************?????系統(tǒng)初始化********************************************************/voidInitSys(void){?DelayMs(100);??//等待系統(tǒng)穩(wěn)定??0=0xFF;??
6、?//初始化IO?1=0xFF;?2=0xFF;?3=0xFF;??InitSerial();??//串口初始化?Timer2Init();??//定時(shí)器2初始化?EA?=1;?????//開總中斷?WM_H?=5;??//初始占空比5?PWM_CNT=0;??//初始化PWM自增值}/********************************************************??????主函數(shù)********************************************************/?voidmain(void){?unsignedcharucKe
7、y;?InitSys();??//初始化?TR2=1;?//啟動(dòng)定時(shí)器2?while(1)?{??ucKey=KeyScan();??//讀取鍵盤值??if(ucKey!=ValNull)?//如果不為空??{???if(ucKey==ValKey16)?//如果等于key16???{????if(PWM_H<=PWM_COUST)?//如果PWM_H在PWM范圍內(nèi)????{?????PWM_H++;???/