一. 简介
一般在我们使用的开发板中,都需要对按键进行软件消抖的,消抖后的按键,才能满足一般的需求,所以对其进行消抖处理是非常有必要的
二. 实现过程
要实现怎样的消抖过程,可以根据需求来,例如
1.按下消抖,算一次 2.先按下消抖,然后松开,算一次 3.先按下消抖,然后根据持续的时间,来计算次数
这里主要说一下第二点的实现过程
先来看看状态转移图,开始的时候,就空闲态,然后按下后,就进入delay状态,如果此间松开的话,就有回到空闲态,以此达到一个消抖的效果,delay状态过后,就进入一个等待按键松开的状态up,当按键松开时,便进入到按键按下了down,随后又会进入到空闲态
2.状态机的书写
always@(*) begin case(state) S_IDLE: if(key_dedge == 1'b1) next_state <= S_DELAY; else next_state <= S_IDLE; S_DELAY: if(delay_cnt >= DELY_TIME && key_d0 == 1'b0) next_state <= S_UP; else if(key_d0 == 1'b1) next_state <= S_IDLE; else next_state <= S_DELAY; S_UP: if(key_uedge == 1'b1) next_state <= S_DOWN; else next_state <= S_UP; S_DOWN: next_state <= S_IDLE; default: next_state <= S_IDLE; endcase
欢迎关注公众号,了解有关的更多知识,回复按键消抖,获取完整代码(单个文件可以直接添加到工程里面使用)
公众号:FPGA之旅