FPGA-状态机实现按键消抖

状态图

首先看这样一个按键消抖的时序图:

粗略画了一下按键时抖动(20ms)的情况,最初为高电平,按键按下变成低电平有一个抖动的过程,同样由低到高有抖动,按键消抖就是在时序图上反应滤除抖动的结果。

可以将其分成几个状态,并分别用独热码表示:

1,5,7:4'b0001,IDLE保持高电平;

2,6 :4'b0010,按下/由高电平作为开始的抖动;

3 :4'b0100,保持低电平;

4 :4'b1000,释放时出现的抖动.

由此可画出状态图:

开始为空闲状态IDLE(高电平),当按键按下,经过滤除抖动进入低电平状态DOWN(形容从高到低的一个趋势,即2,6状态,并不是指低电平),然后保持低电平状态HOLD,最后释放按键滤除抖动进入UP状态(由低到高的趋势,即4状态)。另外,由于7状态是直接经过抖动滤除后变成的高电平(未经过低电平保持状态),所以在经过DOWN状态时需要进行判断,判断其是否会有低电平的保持态,若检测到低电平则进入HOLD状态,若未检测到低电平而是上升沿pos,则回到高电平状态IDLE。

状态机自带两个信号,分别是state_c,state_n,即现态和次态。

时序图

画出时序图

分别进行上升沿和下降沿检测:

上升沿检测:r0为高电平,r1为低电平时,检测测到上升沿

下降沿检测:r0为低电平,r1为高电平时,检测到下降沿

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值