呼吸燈最早見于蘋果的電腦,近年來,在各種手機上也頻頻出現(xiàn)。
呼吸燈是很簡單的東西,用一片555,搭成一個多諧振蕩器,再用RC電路濾成鋸齒波,再驅動LED就可以了。
LED在鋸齒波的控制下,逐漸的由亮到暗、再由暗到明的周期性變化,看起來就好像是在呼吸。
555電路,調整起來比較困難,不如使用單片機來制成呼吸燈,可控性較強。
用單片機來制作呼吸燈,電路很簡單,也不過就是在單片機的引腳上,連接一個LED和一個電阻而已。
只是呼吸燈需要用PWM波形來驅動,編程時,稍稍麻煩一點。
在上一篇博文中,做而論道已經介紹了使用按鍵來調整占空比的參數(shù),進而控制LED亮度的方法。
現(xiàn)在,不再用人工調整了,而是讓單片機周期性、自動的調整占空比參數(shù),這就可以使LED的亮度出現(xiàn)周期性的變化。
這種方法,做而論道在幾年前就用實際的硬件電路實現(xiàn)了。
近來,在網上看見有人提問,但是也沒有看到正面回答。再廣泛的查了查,一直也沒有看到有像樣的程序。
其實,呼吸燈,算不上什么難題,用PROTEUS仿真,也能弄出來,程序也是很簡單的,比流水燈,也多不上十余句。
先看看下面的電路與波形,在圖中,暫時把LED斷開了,在限流電阻的位置上,用一個大電容接地。
這時,電容、電阻,就構成了一個積分電路,它可以對單片機輸出的矩形波進行濾波。
看看圖中的波形,是不是濾成了一個近似的正弦波?
調整一下分辨率,這下看清了吧。
矩形波的占空比不變,濾波后的電壓就是恒定值,占空比增大,電壓就上升,反之就下降。
把LED接通后,LED中的電流,就是近似正弦函數(shù)的規(guī)律,LED亮度變化,就像是在呼吸。
調整一下電阻、電容的數(shù)值,LED外接的電源,也可以用6V試試,看看效果如何。
制作實際的電路,圖中的大電容可以省略,利用人眼視覺的暫留效應,就相當于進行了積分濾波,就能看到呼吸燈的現(xiàn)象。
制成硬件電路后,其效果要比軟件仿真要穩(wěn)定的多。
;=========================================
;驅動呼吸燈的程序,用匯編語言編程。全部程序如下:
;=========================================
N_T0DATA30H;T0的中斷次數(shù)
N_20msDATA31H
P_WTDATA32H;脈沖寬度Pulsewidth
HX_LEDBITP1.0;輸出接口
HX_DIRBIT20H.0;亮度遞增、遞減的狀態(tài)位
ORG0000H
JMPSTART
ORG000BH
JMPT0_INT
ORG0030H
START:
MOVTH0,#220;1250us@11.0592MHz,T0定時方式0
SETBTR0
MOVIE,#82H
MOVN_20ms,#10
MOVN_T0,#16
MOVP_WT,#1
SJMP$;此處可以寫任意的主程序
;-----------------------------------------
T0_INT:;1.25ms中斷一次
MOVTH0,#220;220:1250us@11.0592MHz
PUSHPSW
PUSHACC
;-----------------------下面輸出PWM波形---
DJNZN_T0,T0_1;中斷次數(shù)減一
MOVN_T0,#16;為0就重設,T=16*1.25ms=20ms
CLRHX_LED;每到20ms就輸出0
DECN_20ms
JMPT0_2
T0_1:
MOVA,N_T0;當前中斷次數(shù)1~16
DECA
CJNEA,P_WT,$+3;減去脈寬度值0~15
JNCT0_2;大于等于就不用變
SETBHX_LED;小于就輸出1
;-----------------------下面修改脈寬參數(shù)--
T0_2:
MOVA,N_20ms
JNZT0_END;不到0.2s不用修改
MOVN_20ms,#10;10*20ms=200ms
JNBHX_DIR,JIA;轉去遞增
;----------------------
DJNZP_WT,T0_END;P_WT減,非零退出
JMPTURN;為零就去改為遞增
;----------------------
JIA:
INCP_WT;P_WT加
MOVA,P_WT
CJNEA,#15,T0_END;不到15就退出
TURN:
CPLHX_DIR;到了0或15就改變方向
;---定時修改脈寬,只不過上面這十條指令而已。執(zhí)行起來,也不過就是十幾個微秒。
;---這十條就是呼吸燈所需要用的程序,是不是很簡單?
;----------------------
T0_END:;退出定時中斷
POPACC
POPPSW
RETI
;-----------------------------------------
END
;=========================================