標題: 剛看到的一個程序,有些地方不明白,請大蝦指點迷津 [打印本頁]

作者: harley_lau    時間: 2010-10-31 22:34
標題: 剛看到的一個程序,有些地方不明白,請大蝦指點迷津
 

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%的亮度,而不是滅,此程序該如何修改?請高手指點迷津,小弟感激不盡。!


作者: harley_lau    時間: 2010-11-10 14:52

沒人回貼,自己給自己頂一個吧


作者: 白開水    時間: 2010-11-11 10:12

其實你是要一個LED一直亮著且保持著20%的亮度!再程序中讓它一直開著好了啊!亮度問題其實通過硬件實現(xiàn)的!


作者: 白開水    時間: 2010-11-11 10:17

#include "AT89X51.H" 

void main(void)   

 {P2_0=0;

   } 

就這樣應該就好了!

亮度是改變電阻的大小實現(xiàn)的!






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1