PWM --用按鍵控制 LED 的亮度
以前寫過(guò)一篇關(guān)于PWM的博文,已經(jīng)有一年了,鏈接如下:
http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74
文中使用了示波器來(lái)顯示不同占空比的波形。
其實(shí),利用LED也能通過(guò)亮度來(lái)表現(xiàn)出PWM參數(shù)的變化,用實(shí)物進(jìn)行測(cè)試,效果很好,但是用PROTEUS進(jìn)行仿真試驗(yàn),卻只是看到閃爍的厲害,基本上看不出亮度的變化。
近來(lái)發(fā)現(xiàn),加上一個(gè)大電容,就可以減弱LED的閃爍,亮度就能夠穩(wěn)定一些,這樣一來(lái),就可以用PROTEUS軟件直接觀察亮度的變化了。
電路見(jiàn)下圖。圖中的大電容(C6)的容量是4700uF,這個(gè)是可以隨便調(diào)整的,實(shí)際的電路就不需要它了。
圖中的占空比參數(shù)是10,LED(D1)的顯示為“半亮”狀態(tài)。
C語(yǔ)言的程序,在去年就發(fā)表出來(lái)了,可見(jiàn)上面的鏈接,現(xiàn)在略加改動(dòng)如下:
#include
unsignedchara,b;
sbitK1=P3^2;//定義兩個(gè)調(diào)整占空比的按鍵
sbitK2=P3^3;
//------------------------------------------
voiddelay(unsignedinti)
{
unsignedcharj;
while(i--)for(j=0;j<60;j++);
}
//------------------------------------------
voidmain()
{
TMOD=0x01;//T0定時(shí)方式1
TH0=(65536-500)/256;//500us@12MHz
TL0=(65536-500)%256;
TR0=1;
ET0=1;
EA=1;
a=0;
b=10;
while(1){
if(!K1){delay(20);if(!K1){b++;if(b>19)b=19;while(!K1);}}
if(!K2){delay(20);if(!K2){b--;if(b<1)b=1;while(!K2);}}
//以上兩行是檢查按鍵、延時(shí)消抖、修改占空比、等待按鍵釋放,b=1~19
P0=((b/10)<<4)+b%10;//顯示占空比等級(jí)
}
}
//------------------------------------------
voidtime0()interrupt1
{
TL0=(65536-493)%256;//補(bǔ)償中斷進(jìn)入時(shí)間
TH0=(65536-493)/256;//500us@12MHz
a--;//a=1~20
if(a==0){a=20;P2=0;}//周期=20*500us
if(a<=b)P2=255;//輸出到示波器
P1=~P2;//輸出到LED,低電平發(fā)光
}
//------------------------------------------
這個(gè)程序,PWM的周期比去年的短了一些;去年是應(yīng)網(wǎng)友的要求,設(shè)計(jì)成1s,有些偏長(zhǎng),不太實(shí)用。
這次也不用外部中斷來(lái)輸入按鍵了,改用查詢按鍵的方法。
當(dāng)使用按鍵進(jìn)行占空比調(diào)整的時(shí)候,LED可以顯示出來(lái)不同的亮度。幾幅截屏的畫面如下:
當(dāng)PWM參數(shù)稍小時(shí),亮度有些不足,這可以適當(dāng)減小一些限流電阻的阻值進(jìn)行彌補(bǔ)。
用來(lái)顯示PWM的LED,其中的電流是間斷的,所以,它的限流電阻可以比平常時(shí)小一些,100歐左右,是經(jīng)驗(yàn)數(shù)據(jù)。
制作實(shí)物電路的時(shí)候,大電容就不需要了,不用花錢去買了,呵呵