FPGA的按键消抖和按键复用

    机械按键在按下和弹起时会出现短时间抖动,抖动时间一般持续为15ms。

   在按键吃紧的设计中,往往会进行按键的复用。常用的方法是根据键按下时间的长与短进行判断。因此按键复用经常是利用按键消抖后的下降沿(如果键按下是高电位的话)。

  假设按键为key_in。

   一、按键消抖的步骤:

   1.设定两个采样寄存器key_in_Sam(1 downto 0)对按键key_in进行监控采样

   2.判断key_in_Sam的值是否一致,不一致意味着可能有键的动作,将事件寄存到in_event_latch(1 downto 0)的低位,之后向高位移位以阻塞后续15ms内的抖动,同时启动15ms延时计数器,15ms之后清除in_event_latch寄存器,为下一次消抖做准备

   3.15ms延时完毕,对key_in进行采样保存到key_in_latch(1 downto 0)的低位,此值是消抖后的键值,而前一次采样的消抖键值向高位移位

   4.设定两个采样寄存器in_latch_Sam(1 downto 0),in_latch_Sam低位寄存刚消抖后的键值key_in_latch(0),之后向高位移动,根据in_latch_Sam的组合就可以判断出按键是上升沿还是下降沿

   5.如果是按键上升沿,则启动0.3S延时计数器(根据实际情况设定)

   6.按键释放后,电路重复执行1-4步骤

   7.0.3S延时计数器到达0.15S时,短按指示short_press_latch置1,到达0.3S时,长按指示long_press_latch置1

   8.如果是按键下降沿,则根据short_press_latch和long_press_latch的值,输出应该是短按还是长按,同时将short_press_latch和long_press_latch清除

   9.在延迟按键下降沿将短按或长按清除,这样信号只有一个时钟周期有效      

   二、时序仿真

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值