一、按鍵消抖原理
抖動時間的長短由按鍵的機械特性決定,一般為 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 狀態分為 空 若檢測到下降沿則跳到按下狀態 按下...