FPGA的按键消抖和按键复用

来源:互联网 发布:苹果系统设计软件 编辑:程序博客网 时间:2024/04/29 23:54

    机械按键在按下和弹起时会出现短时间抖动,抖动时间一般持续为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.在延迟按键下降沿将短按或长按清除,这样信号只有一个时钟周期有效      

   二、时序仿真

原创粉丝点击