鍵盤去抖動原則和方法

常用的去抖動方法有兩種,即硬件方法和軟件方法,兩種方式的去抖效果相近,硬件去抖動的方法很多,主要用觸發器或單穩態電路構成消抖電路。另外,由於軟件去抖比較方便,不用增加額外的硬件開銷,所以一般場合都採用軟件去抖。單片機中常用軟件去抖動法,軟件法其實也很簡單,就是在單片機獲得端口為低電平的信息後,不是立即認定按鍵已被按下,而是延時10ms或更長一些時間後再次檢測該端口,如果仍為低,說明此鍵的確被按下了,這實際上是避開了按鍵按下時的抖動時間,而在檢測到按鍵釋放後端口為高電平時,再延時50ms,消除後沿的抖動,然後再對按鍵進行處理,不過一般情況下,通常不對按鍵釋放的後沿進行處理,實踐證明也能滿足日常的要求。如圖8-3所示為按鍵抖動現象和硬件去抖動電路。

鍵盤去抖動原則和方法

圖8-3 按鍵抖動現象和硬件去抖動電路

下面通過一個實驗來驗證一下,實驗程序如下:

ORG 0000H ;

AJMP START ;

ORG 0030H ;

START:MOV SP,5FH ;

MOV P1,#0FFH ;

MOV P3,#0FFH ;

L1:JNB P3.4,L2 ;按下按鍵開關取反一次P1.0 燈亮,再按一次燈滅

JNB P3.5,L3 ;按下按鍵開關取反一次P1.1 燈亮,再按一次燈滅

LJMP L1 ;

L2:CPL P1.0 ;

LJMP L1 ;

L3:CPL P1.1 ;

LJMP L1 ;

END

把這個程序下載到單片機會發現,當按下相應的按鍵時,並不是像想象中的按一下燈亮再按一下就燈滅,而是有時靈有時不靈,為什麼會這樣呢?原來當按了一次按鍵,可是單片機卻早已執行了好多次,如果執行的次數是奇數,那麼結果相符;如果執行的次數是偶數,結果相反。為了使CPU能正確地讀出端口的狀態,對每一次按鍵只作一次響應就必須考慮如何去除按鍵的抖動。

下面把前面的程序進行修改,實現按鍵的去抖動:

ORG 0000H;

AJMP START;

ORG 0030H;

START:MOV SP,#5FH;

MOV P1,#0FFH;

MOV P3,#0FFH;

L1:JB P3.4,L2;P3.4為1時不做處理,轉P3.5 否則說明有鍵按下

LCALL D10mS;調用延時程序去除抖動

JB P3.4,L1;P3.4為0,說明此鍵確實被按下了

CPL P1.0;取反P1.0

L3:JNB P3.4,L3;直到P3.4釋放後轉去判斷第二個鍵

L2:JB P3.5,L1;P3.5為1,返回繼續處理P3.4,否則說明有鍵按下

LCALL D10mS;調用延時程序去除抖動

JB P3.5,L2;P3.5為0,說明此鍵確實被按下了

CPL P1.1;取反P1.1

L4:JNB P3.5,L4;直到P3.5釋放為止

LJMP L1;返回

D10mS:MOV R7,#50;延時的時間一般為5~20ms

D1:MOV R6,#100;

D2:DJNZ R6,D2;

DJNZ R7,D1;

RET;

END

把這段程序寫入單片機查看結果,與預測相符,這就是獨立式按鍵去抖動的基本方法,不過這個程序在實際應用中並沒有多大的意義,因為如果按鍵數量比較多,程序就會變得很長,因為這裡採用了直接尋址的方式,如果把鍵值放入一個表格中,再通過查表程序來判斷到底是哪個按鍵被按下,然後處理相應的程序就會很簡單,讀者可嘗試實現。


分享到:


相關文章: