按鍵消抖 有感

2021-09-30 20:45:34 字數 596 閱讀 9661

假設按鍵一般在20ms之內可以穩定,但是極端情況,抖動時間在50ms;

wire nedge;//下降沿。按鍵按下

wire pedge;//上公升沿,按鍵按回

assign nedge=!key_a&&key_b;

assign pedge=key_a&&!key_b;

狀態分為:空:若檢測到下降沿則跳到按下狀態;

按下:最重要的是如何判斷此時已經達到穩定狀態/此時是否還在抖動

我的思路,20ms內各觸發器狀態不變,等待計數器加滿,因為未滿時,不管存在抖動還是抖動已經消失,都讓其20ms後進行其他動作,為了防止20ms後還有抖動,判斷此時是否有上公升沿,若有則重新計數,否則,現在穩定,進入下乙個狀態;但是這個思路有個bug,如果20ms後的上公升沿不是抖動產生而是按鍵按上的上公升沿呢?就無法判斷;所以第二種思路:

在20ms內,每來乙個時鐘上公升沿都檢查是否有上公升沿,若有,說明抖動仍存在,重新計數,直到沒有抖動,則為穩定;

這種判斷的時間也不僅僅只是20ms,可能更長,但是,排除了穩定期之後的按上操作;

兩種方式區別在於將時間還是上公升沿作為判斷抖動的關鍵條件,造成的結果也不同,所以乙個條件下走不通時,需要考慮是否關鍵條件沒有選對。

FPGA Verilog按鍵消抖

硬體 鋯石a4開發板,altera ep4ce10f17c8 語言 verilog hdl 原理 機械式按鍵大概有20ms的抖動,所以檢測到按鍵變化後等20ms再判斷一次,如果鍵值相同才視為有效 頂級模組按鍵切換led顯示 module key led,key,clock,reset input c...

FPGA 按鍵消抖

今天簡單的說說按鍵消抖,原理特別好理解,其實就是延時,做一定時間的延時後取值一次,就能夠得到特定的消抖後的狀態了。為什麼要消抖?見圖 我們可以看到,但按鍵按下的那一刻,存在一段時間的抖動,同時在釋放按鍵的一段時間裡也是存在抖動的,這就可能導致狀態在識別的時候可能檢測為多次的按鍵,因為執行過程中普通的...

按鍵消抖詳解

一 按鍵消抖原理 抖動時間的長短由按鍵的機械特性決定,一般為 5ms 10ms,鍵抖動會引起一次按鍵被誤讀多次。解決辦法 判斷按鍵按下時,延時 10 ms 即可。二 軟體實現按鍵消抖 1 首先定義乙個記錄按鍵狀態的變數 release 2 然後讀取按鍵值檢測按鍵狀態,當按鍵狀態改變,判斷可能有按鍵動...