原创 三十而立学FPGA之按键消抖

2022-7-20 06:09 1224 1 1 分类: FPGA/CPLD 文集: FPGA
1.简介

按键为何消抖,原因是当按键按下和松开时,由于弹片回弹抖动,而导致按键对应管脚误判为多次按下和松开。

从以下动图对比可以看出:

2.原理

如图,我们认为的按键波形是理想的,然而其实正真的实际波形是每次按下和弹起都是由回弹的,如图实际波形其实也是理想化的,为了方便理解。

既然有回弹,那么怎么避免呢?一般采用方式为延时法。C语言最直接直接一个delay就完事了,简单粗暴。在FPGA里,使用延时+判断的方式,既延时完后再次判断是否已经稳定。

3.源代码
3.1状态机转移图

3.2实现
3.2.1延时模块
//计数延迟5ms always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) delay_cnt <= 20'd0; else if(cnt_start == 1'b1) delay_cnt <= delay_cnt + 20'd1; else delay_cnt <= 20'd0; end always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) cnt_finish <= 1'b0; else if(delay_cnt == 20'd499999) cnt_finish <= 1'b1; else cnt_finish <= 1'b0; end

//FSM for the key always@(posedge clk or negedge rst_n) begin if(rst_n == 1'b0) begin state <= IDLE; cnt_start <= 1'b0; key_o_r <= 1'b1; end else case(state) IDLE :begin if(key_neg == 1'b1) begin cnt_start <= 1'b1; state <= FILTER0; end else state <= IDLE; end FILTER0 :begin if(cnt_finish == 1'b1) begin cnt_start <= 1'b0; key_o_r <= 1'b0; state <= DOWN; end else if(key_pos == 1'b1) begin state <= IDLE; cnt_start <= 1'b0; end else begin state <= FILTER0; end end DOWN :begin if(key_pos == 1'b1) begin state <= FILTER1; cnt_start <= 1'b1; end else begin state <= DOWN; end end FILTER1 :begin if(cnt_finish == 1'b1) begin cnt_start <= 1'b0; state <= IDLE; key_o_r <= 1'b1; end else if(key_neg == 1'b1) begin state <= DOWN; cnt_start <= 1'b0; end else begin state <= FILTER1; end end default :begin state <= IDLE; key_o_r <= 1'b1; cnt_start <= 1'b0; end endcase end

作者: 雏羽, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1862109.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

给作者打赏,鼓励TA抓紧创作!

赞赏支持
点赞 1
赞赏1

文章评论8条评论)

登录后参与讨论

追忆流年寻梦少年 2022-7-20 12:59

雏羽: 没示波器,打算设计个示波器,以后展示波形
期待ing。。。。
赞!

雏羽 2022-7-20 12:54

追忆流年寻梦少年: 是的,消抖效果很好!
对于硬件接触的抖动,想看看其波形、频率等,工程师的好奇心啊哈哈
没示波器,打算设计个示波器,以后展示波形

追忆流年寻梦少年 2022-7-20 12:44

雏羽: 现象很明显了
是的,消抖效果很好!
对于硬件接触的抖动,想看看其波形、频率等,工程师的好奇心啊哈哈

雏羽 2022-7-20 10:59

追忆流年寻梦少年: 可以用示波器抓波形比对一下啊,现在的消抖效果明显啊。
现象很明显了

追忆流年寻梦少年 2022-7-20 10:30

可以用示波器抓波形比对一下啊,现在的消抖效果明显啊。

雏羽 2022-7-20 09:31

nufuvcgx: 哦 看到了
之前开启了私有视频,现在公开了

nufuvcgx 2022-7-20 09:14

哦 看到了

nufuvcgx 2022-7-20 09:13

视频看不到啊
相关推荐阅读
雏羽 2022-07-02 23:12
《Verilog HDL与FPGA数字系统设计》+简评
    内容概括 本书是一本实践性很强的书,从最基础的数字逻辑基础,到最后的片上系统学习。从verilog的基础语法到静态时序分析。本书涵盖了大量的源码,对于一个初学者而...
雏羽 2022-06-12 16:47
三十而立学FPGA之数码管
简介 数码管,一种把多个发光二极管通过简单阵列的方式组合而成的显示器件。多个二极管阴极连在一起,通过控制阳极的高低电平来控制数码管相应LED亮灭的叫做共阴,反之共阳。每个发光二极管称之为数码管的段,...
雏羽 2022-05-20 07:14
三十而立学FPGA之UART
UART介绍 简介 通用异步收发器(Universal Asynchronous Receiver/Transmitter),既UART 时序   根据时序图可以了解到: ...
雏羽 2021-09-17 16:40
FPGA基础、高级功能与工业电子应用》+略读感受
当得知我能得到这本书的时候,还是很兴奋的。然后就是等京东的快递,可惜的是京东小哥弄了个乌龙,书放在我公司了一直说没带,一直持续了三天,在我拿其他快递的时候,无意中看见了另一个包裹,拆开后是惊喜也是好笑...
雏羽 2019-10-28 10:45
Allegro做中文丝印竟如此简单
​所需软件AutoCAD(或者其他CAD软件)AbleSoftwareR2V(链接:https://pan.baidu.com/s/16RYYCFzm_S9OGWeBuV1dKg提取码:tt63 )A...
我要评论
8
1
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /1 下一条