欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

51單片機脈沖寬度調制(PWM)控制LED燈亮度

作者:佚名   來源:本站原創   點擊數:  更新時間:2009年06月28日   【字體:

   /*介紹一個51系列單片機采用脈沖寬度調制(PWM)方式控制LED燈亮度的一個程序,大家都知道,51單片機本身是沒有pwm接口的,這個程序是通過軟件模擬pwm.在一定的頻率的方波中,調整高電平和低電平的占空比,即可實現LED燈亮度控制。程序出自:單片機網http://www.raoushi.com,如有問題可在論壇提出,程序中使用定時器0產生2.5ms周期脈沖,使用占空比控制變量scale控制占空比,在低電平期間使LED燈亮,在高電平期間使LED燈滅,改變scale就改變了高電平與低電平的時間,因此也就控制了LED燈的亮度。*/
#include "AT89X51.H"  //模擬PWM輸出控制燈的10個亮度級
unsigned int scale;   //占空比控制變量
void main(void)       // 主程序
{ unsigned int 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)   //無限循環,實際應用中,這里是做主要工作
{ 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就可以改變占空比。*/

關閉窗口