本文介紹通過單片機(jī)實(shí)現(xiàn)按鍵控制一個LED燈,教大家學(xué)習(xí)按鍵控制原理,。 下圖為按鍵連接原理,,(PB0-PB3為單片機(jī)IO口),每個按鍵輸出端采用上拉電阻,,目的是當(dāng)按鍵斷開時,,使單片機(jī)輸入端口(PB0-PB3)處于高電平狀態(tài),只有當(dāng)按鍵按下時才處于低電平,。(此文用AVR單片機(jī)舉例) 按鍵的基本原理是設(shè)置單片機(jī)IO口(PB0-PB3)為輸入狀態(tài),,如DDRB = 0XF0(方向寄存器,'1'為輸出,,'0'為輸入); 單片機(jī)一直檢測按鍵端口(PB0-PB3)的狀態(tài),,當(dāng)端口為低電平時(即按鍵按下),實(shí)行相應(yīng)的動作(比如控制LED燈),。 原理就是這么回事,,但是正真實(shí)現(xiàn)時,按鍵會有抖動,,要進(jìn)行按鍵去抖,,下圖為按鍵按下時的抖動圖。 按鍵實(shí)行一個動作過程是需要一定時間的,,一般為100mS-1S左右,,而一個單片機(jī)執(zhí)行一個機(jī)器周期的時間很短,時鐘為10MH的周期為0.1μs,,這樣按鍵每一次動作程序就會多次檢測按鍵,,出現(xiàn)誤判(一次按下,多次動作),。 按鍵觸點(diǎn)在閉合或者斷開的瞬間會出現(xiàn)抖動,,抖動時間一般小于10ms。 (1) 可以使用硬件電路消抖,,硬件消抖可以在按鍵與單片機(jī)IO口之間加入RS觸發(fā)器,,原理如下圖所示。 (2)軟件去抖 按鍵抖動的時間間隔也就10ms以內(nèi),,可以通過軟件進(jìn)行延時判斷,,過濾掉抖動的時間,達(dá)到消除抖動的目的,。 例:按鍵消抖程序: Keys () { if(!key) //第1步:判斷是否有按鍵按下,,key=0表示按鍵按下 { delayms(20); //第2步:延時20ms,用于軟件消抖,避開抖動時間 if(!key) //第3步:再次檢測該按鍵是否按下 { … //按鍵按下的處理程序 } } While(!key); //第4步:判斷按鍵動作是否結(jié)束(key=1表示按鍵已釋放) } 例:按鍵控制LED燈原理 |
|