代碼如下:
程序分析:
去抖
去抖可分位硬件去抖和軟件去抖,顧名思義硬件去抖就是通過(guò)硬件來(lái)達(dá)到去抖的目的,一般是用施密特觸發(fā)器來(lái)實(shí)現(xiàn),需要消耗硬件資源,在一些成本限制的時(shí)候,往往采用軟件去抖。
軟件去抖原理:一般按鍵的抖動(dòng)頻率是幾十khz(故狀態(tài)轉(zhuǎn)移間隔為ms級(jí),程序中我們采用20ms)整體思路是跳過(guò)這一段抖動(dòng),我們?cè)O(shè)計(jì)的去抖狀態(tài)機(jī)如下:
假如按鍵按下時(shí)為低電平,idle為初始狀態(tài),當(dāng)檢測(cè)到有按鍵按下時(shí)即key_pre==0,進(jìn)入delay1狀態(tài)(注意:狀態(tài)從idle到delay1需要20ms,相等于跳過(guò)抖動(dòng)),若此時(shí)key_pre仍為0,則我們認(rèn)為是按鍵按下,則進(jìn)入下一狀態(tài),否則回到idle認(rèn)為時(shí)抖動(dòng),到此為按下去抖。在press狀態(tài)下,若檢測(cè)到按鍵抬起即key_pre==1,則進(jìn)入delay2狀態(tài),否則仍在press狀態(tài)(防止有長(zhǎng)時(shí)間按下),在delay2狀態(tài),若key_pre仍為1,則認(rèn)為按鍵以抬起,則進(jìn)入下一狀態(tài)taiqi,至此完成抬起去抖,可以產(chǎn)生去抖后的信號(hào)。
程序關(guān)鍵點(diǎn):
第一:delay信號(hào)的產(chǎn)生
delay信號(hào)的高電平時(shí)間,只是一個(gè)主時(shí)鐘的寬度,所以當(dāng)delay==1時(shí),狀態(tài)轉(zhuǎn)移alw塊只會(huì)觸發(fā)一次,而不是多次。
第二:去抖后信號(hào)key_out的產(chǎn)生(輸出高電平表示按下)。
程序中我們采用
assign key_out=(state==taiqi && delay==1)?1'b1:1'b0;
有人認(rèn)為當(dāng)狀態(tài)到taiqi是直接就可輸出,為什么還要有delay==1這個(gè)條件呢?我們先看一下這兩種仿真結(jié)果:
加上delay==1
??
從圖中我們可以明顯看出,未加delay==1,key_out為1有很寬的脈寬,在以clk_50M為敏感信號(hào)是,會(huì)造成多次觸發(fā),而加上delay==1,key_out的寬度只為一個(gè)clk_50M主時(shí)鐘寬度,達(dá)到去抖效果。
-
FPGA
+關(guān)注
關(guān)注
1643文章
21954瀏覽量
613943
發(fā)布評(píng)論請(qǐng)先 登錄
fpga教程之——按鍵消抖
【FPGA設(shè)計(jì)實(shí)例】用FPGA實(shí)現(xiàn)開(kāi)關(guān)按鍵去抖
FPGA完整教程基礎(chǔ)版和高級(jí)版(免費(fèi))
【黑金原創(chuàng)教程連載】FPGA那些事兒-驅(qū)動(dòng)篇I,每周更新
fpga按鍵去抖
深入剖析FPGA去抖
FPGA學(xué)習(xí)與開(kāi)發(fā)板的那些事
STM32單片機(jī)按鍵消抖和FPGA按鍵消抖的相關(guān)資料分享
基于FPGA的按鍵消抖電路設(shè)計(jì)
你一定想知道FPGA的那些事...
使用FPGA進(jìn)行消抖的典型例子

評(píng)論