此程序是一個用51單片機(jī)來調(diào)直流電機(jī)轉(zhuǎn)速的程序。當(dāng)然也可以用來調(diào)整led燈的亮度,用定時器2來實(shí)現(xiàn).
#include <reg52.h> //包括一個52標(biāo)準(zhǔn)內(nèi)核的頭文件 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit PWM = P3^3; //要控制的風(fēng)扇 sbit K= P3^7; //按鍵控制轉(zhuǎn)速 uchar scale;//用于保存占空比的輸出0的時間份額,總共10份 //延時程序 void delay10ms(void) { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } // 主程序 void main(void) { RCAP2H =0xF3; //賦T2的預(yù)置值,溢出1次是1/1200秒鐘 RCAP2L =0x98; scale=10; TR2=1; //啟動定時器 ET2=1; //打開定時器2中斷 EA=1; //打開總中斷 while(1) //程序循環(huán) { while(K==0) { scale++; while(K==0) ; if(scale==11) scale=0; } } } //1/1200秒定時器2中斷 timer2() interrupt 5 { static uchar tt=0; //tt用來保存當(dāng)前時間在一秒中的比例位置 TF2=0; tt++; if(tt==10) //每1/120秒整開始輸出低電平 { tt=0; if(scale!=0) //這里加這一句是為了消除滅燈狀態(tài)產(chǎn)生的鬼影 PWM=0; } if(scale==tt) //按照當(dāng)前占空比切換輸出高電平 PWM=1; }