根據原理圖,當按鍵沒有按下的時候,微控制器引腳btn1通過10k的電阻接vcc,為高電平;當按鍵按下的時候,btn1通過10k的電阻接地,為低電平,此時這個10k的電阻起限流作用,一般程式限流電阻。那麼理想情況下,按鍵沒有按下的時候為高電平1
,按下為低電平0
,但是實際情況下,由於機械的抖動,實際情況產生的波形如下圖所示:
訊號由於機械的抖動,導致在1
和0
之間多次跳變,一般抖動時間為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 狀態分為 空 若檢測到下降沿則跳到按下狀態 按下...