按键消抖 有感

假设按键一般在20ms之内可以稳定,但是极端情况,抖动时间在50ms;

wire nedge;//下降沿。按键按下
 wire pedge;//上升沿,按键按回
 assign nedge=!key_a&&key_b;
 assign pedge=key_a&&!key_b;

状态分为:空:若检测到下降沿则跳到按下状态;

                 按下:最重要的是如何判断此时已经达到稳定状态/此时是否还在抖动

                     我的思路,20ms内各触发器状态不变,等待计数器加满,因为未满时,不管存在抖动还是抖动已经消失,都让其20ms后进行其他动作,为了防止20ms后还有抖动,判断此时是否有上升沿,若有则重新计数,否则,现在稳定,进入下一个状态;但是这个思路有个BUG,如果20ms后的上升沿不是抖动产生而是按键按上的上升沿呢?就无法判断;所以第二种思路:

                  在20ms内,每来一个时钟上升沿都检查是否有上升沿,若有,说明抖动仍存在,重新计数,直到没有抖动,则为稳定;

这种判断的时间也不仅仅只是20ms,可能更长,但是,排除了稳定期之后的按上操作;

两种方式区别在于将时间还是上升沿作为判断抖动的关键条件,造成的结果也不同,所以一个条件下走不通时,需要考虑是否关键条件没有选对。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值