跳至正文

Verilog功能模块 —— 按键消抖

标签:
keyEliminateJitter


一. 什么是按键消抖

按键消抖_百度百科 (baidu.com)

按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图所示,为了不产生这种现象而作的措施就是按键消抖。

从按键对应的数字电平来看,按键的抖动过程如下图所示。在抖动期间,按键的输入电平是不稳定的,消抖的目的就是去除抖动的影响,得到能表征按键过程的稳定的按键输入电平。


二. 按键消抖的方案

2.1 硬件消抖

通常的做法是在按键两端并联一个贴片电容,利用电容两端电压不能突变的特性来消除抖动。

2.2 软件消抖

利用按键按下的特点来消抖:

1.按键按下和弹起都会抖动,抖动的持续时间和按键类型和质量有关,一般为5~10ms

2.按键按下后保持稳定电平的时间一般不小于120ms


三. Verilog实现按键消抖

3.1 模块框图

keyEliminateJitter

3.2 参数列表

参数名 说明
CLK_FREQ_MHZ 模块时钟频率,默认100,注意修改
KEY_INIT_STATUS 按键在FPGA上电时的初始状态,可选”up”(默认)或”down”
INTI_MS 初始检测未按下电平, 需要持续多少MS才视为检测成功, 默认50ms, 通常无需修改
KEEP_MS 检测到按键按下/抬起需要持续多少MS才视为有效, 默认40ms, 通常无需修改

3.3 接口信号列表

接口名 说明
key_in 按键输入
clk 模块工作时钟
key_down 按键按下指示, 1表示按下
key_down_one_time 1表示按键按下一次, 1只会持续一个时钟周期
key_up 按键抬起指示, 1表示抬起
key_up_one_time 1表示按键抬起一次, 1只会持续一个时钟周期

四. 源码与工程分享

Gitee:Verilog功能模块–按键消抖: 按键消抖 (gitee.com)

Github:zhengzhideakang/Verilog–Key: Verilog按键消抖 (github.com)

Git难以管理非文本文件,故Vivado工程通过网盘分享。

verilog-function-module–key 按键消抖 Vivado 2021.2工程 20240922.7z

欢迎大家关注我的公众号:徐晓康的博客,回复以下代码获取。

2352

建议复制过去不会码错字!


如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。

如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
目录