第9节 按键消抖应用实例——代码讲解、板上验证

        本节按键消抖的代码部分采用三段式状态机形式进行编码,对于初学者或者以前没有使用三段式状态机习惯的读者可以参考。按键消抖在很多存在按键交互的项目中也经常使用,读者可以跟着了解本节代码之后,进行移植到相应的项目中使用是非常方便的,也是熟悉状态机设计的一个很好的例子。

        一、代码讲解

        模块名称声明,端口定义如下表和下图所示:

端口名称功能备注
clk时钟输入
rst复位输入
key_in按键信号输入
key_state_out按键按下状态输出
display_flip按键按下显示输出display_flip = 1'b1 默认值为高电平

 状态机状态定义:空闲状态,按下滤波状态,稳定按下状态和释放滤波状态

第一段状态机赋值

第二段状态条件判断:

        在空闲状态获取到按键的低电平信号,进入按键按下滤波状态。在按键按下滤波状态中,如果存在按键的上升沿信号,重新跳转到空闲,认为存在按键抖动现象。如果不存在抖动,在按键按下滤波状态进行延时20ms后认为按键稳定,进入按键按下的稳定状态。在按键按下稳定状态判断是否存在按键输入高电平信号,如果存在进入按键释放消抖状态,在按键释放消抖状态判断是否存在下降沿的情况,如果存在这种情况返回到按键按下稳定状态。如果不存在延时20ms后认为是稳定释放了返回到空闲等待下一次按键按下检测。

第三段状态描述具体执行的动作:

        在按键按下滤波状态,存在按键输入上升沿的情况,计数器清零,累加到20ms的计数值也清零,其他情况计数值自加,在按键释放虑波状态也是同理。

        在按键释放之后我们记为一次按键按下并把状态型号输出。

          这里我们为了实验观看明显,将display_flip信号引出到LED上,按键按下并释放一次LED反转一次。

二、板上验证

        我们将按键消抖的实验功能全编译通过之后下载bit流文件到实验硬件当中去,发现按键按下一次,LED反转一次,重复操作现象正常。具体操作流程可以见附件视频部分,实验的工程代码可以通过下面的链接获取。

链接:https://pan.baidu.com/s/1uMiQLrut34ZS-MCzPQO1-w
提取码:3kdz

三、总结

        本节主要讲述按键消抖部分代码的控制原理,三段式状态机编写原理。代码讲解截取主要部分代码,详细的代码部分可以参考具体的工程,可以通过链接下载获取。由于工程的创建方法和引脚分配等细节在前几节已经讲述过了,这里就不重复赘述了,感兴趣的读者可以到本专题的前几讲进行了解。下一节我们主要讲述debug逻辑分析仪工具ChipWatcher的使用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wave&fpga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值