实验05按键消抖.doc

实验05按键消抖.doc

ID:55027723

大小:74.50 KB

页数:4页

时间:2020-04-26

实验05按键消抖.doc_第1页
实验05按键消抖.doc_第2页
实验05按键消抖.doc_第3页
实验05按键消抖.doc_第4页
资源描述:

《实验05按键消抖.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验五按键消抖一.实验目的1.掌握QuartusII的硬件描述语言设计方法2.了解同步计数器的原理及应用3.设计一个带使能输入、进位输出及同步清零的增1四位N(N<16)进制同步计数器二.准备知识在按键使用的过程中,常常遇到按键抖动的问题,开关在闭合(断开)的瞬间,不能一接触就一直保持导通(断开),因为开关的机械特性,重要经历接触-断开-再接触-再断开,最终稳定在接触位置,这就是开关的抖动,即虽然只是按下按键一次然后放掉,结果在按键信号稳定前后,竟出现了一些不该存在的噪声,这样就会引起电路的误动作。在很多应用按键的场合,要求具有消抖措施。按键抖动与开关的机械特性有关,其抖动期一般为5-10ms

2、。图5.1按键电平抖动示意图按键的消除抖动分为硬件消除抖动和软件消除抖动。硬件消除抖动一般采用滤波的方法,通常在按键两端并联一个1~10u左右的电容,有时这样也不能完全消除按键的抖动。软件消除抖动的方法有多种,常用的是延时扫描和定时器扫描。延时扫描其原理为:检测到按键操作后延时一端时间(如10ms)后,再检测是否为仍然为同样的按键操作状态,如果相同,就认为是进行了按键操作,然后对该操作进行相应的处理。定时器扫描的原理是:每隔一端时间(几毫秒)扫描一次键盘,如果连续两次(或3次)的所获得的按键状态相同,就输出按键状态,然后再对这种按键状态进行处理,这里的扫描时间间隔和连续判断按键状态的次数是有关

3、系的,一般总时间要大于按键的抖动期。如果总时间太长,则感觉按键迟钝,太短可能不能完全消除抖动,要根据实际的情况合适的选择。在实际电路设计中,经常采用的是软硬件相结合对按键进行消除抖动的处理方法。本实验采用的方法:实验箱按键的硬件电路是共阳极电路,按下按键时输出到FPGA管脚的电平为低电平,松开按键时为高电平。我们采用5ms的定时器扫描FPGA管脚电平,如果连续3次为低电平时,存储连续按键状态的次数CNT的值加1,直到该计数值等于10(或再大一些),就不再累加(防止长按该值溢出而重新计数),此时认为按键已稳定,输出按键操作标志;在该过程中,一旦FPGA管脚电平为低电平就对CNT复位清零并同时对按

4、键操作标志位复位,即一个异步复位。本实验采用的方法:实验箱按键的硬件电路是共阳极电路,按下按键时输出到FPGA管脚的电平为低电平,松开按键时为高电平。我们采用5ms的定时器扫描采样FPGA管脚电平,如果连续3次为低电平时,可以认为此时按键已稳定,输出一个低电平按键信号;继续采样的过程中如果不能满足连续3次采样为低,则认为键稳定状态结束,这时输出变为高电平(连线3次采用信号相3“或”),认为按键松开。其原理图如图5.2所示。时间间隔可以更小、采样次数更多效果可能会更好,但是增加了硬件的复杂度和资源利用。图5.2按键抖动硬件原理图本实验的思路为:用按键消抖与不消抖的信号,分别当作时钟信号触发16进

5、制计数器,计数结果用数码管静态显示,比较按键消抖与不消抖的区别。一.实验步骤1、新建工程antiwobble新建文件夹,并在该文件夹下新建工程。2、编写硬件描述语言文件将图3.2所示的电路用语言描述出来,并扩展多个通道(多路按键输入,多路消抖信号输出)。文件名为debounce,并封装生成模块符号文件。编写16进制计数器文件CNT16,并封装生成模块符号文件,或添加兆功能计数器模块实现16进制的计数器。编写译码电路文件DECODE7,并封装生成模块符号文件。添加计数器分频模块DIV200Hz,我们需要周期为5ms的时钟信号,故分频次数。最后生成顶层原理图文件antiwobble如图5.3所示。

6、3图5.3按键消抖顶层模块说明:48MHz的系统晶振时钟频率经模240,000的计数器,得到的进位cout,其频率为200Hz,也可以使用其计数值的最高位Q[17]作为消抖模块的时钟信号。二者的区别是占空比不同。消抖模块“debounce”使用了参数传递说明语句,以关键词GENERIC引导一个类属参量表,在表中提供总线宽度等静态信息。类属表说明用于设计实体和外部环境通信的参数和传递信息。GENERIC语句在所定义的环境中的地位与常数相似,但却能从环境(如外部实体)外部动态地接受赋值,其行为又类似于端口PORT。其使用本实验见参考程序。在类属表的“KEY_WIDTH”参数的“Value”栏设为1

7、,就是对一个按键进行消抖处理。这时其模块输入输出管脚key_in、key_out为1位的逻辑位信号而非总线信号,但其模块间连线可以是总线连线(粗线),也可以是节点连线(细线)。在debounce程序中,尽管设定了位宽KEY_WIDTH=8,但是在顶层文件中调用该模块时,可以重新更改其位宽设置,编译时以顶层文件的设置进行编译。尽管在debounce程序中设置的位宽在顶层文件中无效,但必须进行设置,否

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。