按鍵為什麼要消抖?

2022-09-11 07:45:10 字數 834 閱讀 6252

根據原理圖,當按鍵沒有按下的時候,微控制器引腳btn1通過10k的電阻接vcc,為高電平;當按鍵按下的時候,btn1通過10k的電阻接地,為低電平,此時這個10k的電阻起限流作用,一般程式限流電阻。那麼理想情況下,按鍵沒有按下的時候為高電平1,按下為低電平0,但是實際情況下,由於機械的抖動,實際情況產生的波形如下圖所示:

訊號由於機械的抖動,導致在10之間多次跳變,一般抖動時間為5-10ms。微控制器的處理速度很快,如果不做處理,那麼會導致程式多次執行按鍵後的操作,從而導致邏輯錯誤。例如,要實現按下燈亮,再次按下燈滅,如果不消抖,就可能導致一次按下,多次處理,燈的開關狀態就有可能沒有變化。

乙個簡單的消抖辦法是檢測到按鍵按下,則等待10ms之後,再次檢測是否在按下狀態,如果是按下的狀態,那麼才確定是在按下狀態。偽**如下:

if (key == 0) 

}

#include #define led1   p1_0     //定義led1所在引腳

#define key1 p0_1 //定義btn1所在引腳

void delayms(int ms)

}void main(void)} }

}

上面這個方法比較常用,但是存在如下問題:

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 狀態分為 空 若檢測到下降沿則跳到按下狀態 按下...