按鍵消抖詳解

2021-10-05 08:32:17 字數 880 閱讀 5315

一、按鍵消抖原理

抖動時間的長短由按鍵的機械特性決定,一般為 5ms~10ms,鍵抖動會引起一次按鍵被誤讀多次。

解決辦法:判斷按鍵按下時,延時 10 ms 即可。

二、軟體實現按鍵消抖

(1)首先定義乙個記錄按鍵狀態的變數 release

(2)然後讀取按鍵值檢測按鍵狀態,當按鍵狀態改變,判斷可能有按鍵動作,進入延遲函式

(3)延遲一會後,再次讀取按鍵狀態,如果仍為按下狀態,說明確有按鍵動作

在主函式中輪詢檢測按鍵狀態:

1、這裡為什麼要定義乙個記錄按鍵狀態的變數 release 呢?

【答】:如果不定義按鍵狀態變數,在主函式中輪詢檢測按鍵狀態,當我們一直處於按下狀態,那麼它就會一直進入主函式的判斷語句中,導致結果錯誤!

2、為什麼按下狀態返回值一定要是 1,而不是 0 呢?

【答】:如果返回值為 0,在主函式中的判斷語句 if(keyvalue == 0)可進入一次,此時不斷輪詢檢測按鍵狀態,當我們一直處於按下狀態,雖然我們前面定義了記錄按鍵狀態的變數,但由於 return 0 的緣故仍然返回值是 0,所以仍繼續進入判斷語句中,導致結果錯誤!

ps:如果利用「中斷+定時器」處理更加方便,不用定義 release 變數,使用定時器完成延時任務,然後在中斷裡面檢測是否真的有中斷發生、是否按下按鍵,最後要注意清除相應的中斷標誌位。

FPGA Verilog按鍵消抖

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

FPGA 按鍵消抖

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

按鍵消抖 有感

假設按鍵一般在20ms之內可以穩定,但是極端情況,抖動時間在50ms wire nedge 下降沿。按鍵按下 wire pedge 上公升沿,按鍵按回 assign nedge key a key b assign pedge key a key b 狀態分為 空 若檢測到下降沿則跳到按下狀態 按下...