51單片機脈沖寬度調(diào)制(PWM)控制LED燈亮度
程序如下:
#include "AT89X51.H" //模擬PWM輸出控制燈的10個亮度級
unsigned int scale; //占空比控制變量
void main(void) // 主程序
{ unsigned int n; //延時循環(huán)變量
TMOD=0x02; //定時器0,工作模式2(0000,0010),8位定時模式
TH0=0x06; //寫入預置初值6到定時器0,使250微秒溢出一次(12MHz)
TL0=0x06; //寫入預置值
TR0=1; //啟動定時器
ET0=1; //允許定時器0中斷
EA=1; //允許總中斷
while(1) //無限循環(huán),實際應用中,這里是做主要工作
{ for(n=0;n<50000;n++); //每過一段時間,就自動加一個檔次的亮度
scale++; //占空比控制變量scale加1
if(scale==10) scale=0; //如果scale=10,使scale為0
} }
timer0() interrupt 1 //定時器0中斷服務程序
{ static unsigned int tt ; //tt用來保存當前時間在一秒中的比例位置
tt++; //每250微秒增加1
if(tt==10) //2.5毫秒的時鐘周期
{ tt=0; //使tt=0,開始新的PWM周期
P2_0=0; //使LED燈亮
}
if(scale==tt) //按照當前占空比切換輸出為高電平
P2_0=1; //使LED燈滅
}
/*程序中從tt=0開始到scale為低電平,從scale開始到tt=10為高電平,由于scale是變量,所以改變scale就可以改變占空比。*/
我直接將該程序?qū)懭雴纹瑱C里面,單片機上指示燈的從亮→閃爍→滅,如此不斷循環(huán),如果我想讓單片機上的指示燈到最后一直保持在20%的亮度,而不是滅,此程序該如何修改?請高手指點迷津,小弟感激不盡。!
沒人回貼,自己給自己頂一個吧
其實你是要一個LED一直亮著且保持著20%的亮度!再程序中讓它一直開著好了啊!亮度問題其實通過硬件實現(xiàn)的!
#include "AT89X51.H"
void main(void)
{P2_0=0;
}
就這樣應該就好了!
亮度是改變電阻的大小實現(xiàn)的!
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |