0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

按键弹跳消除模块的程序设计与应用

电子设计 来源:郭婷 作者:电子设计 2019-01-07 08:45 次阅读

按键在数字电路设计中经常用到。按键的弹跳现象是数字系统设计中存在的客观问题。按键是机械触点,当接触点断开或闭合时会产生抖动。为使每一次按键只做一次响应,就必须去除抖动。本文对按键的抖动信号进行了分析,并通过计数器的方式完成了消除抖动电路模块的设计。把该模块应用到按键控制LCD显示的系统中,并在Memec代理的Virtex-4 MB系统实验板上实现了该系统。消抖电路的效果良好,按键控制LCD显示结果正常。

按键开关是电子设备人机交互的主要器件之一。按键大多是机械式开关结构,由于机械式开关的核心部件为弹性金属簧片,因而在开关切换的瞬间会在接触点出现来回弹跳的现象。对于灵敏度比较高的电路,这种弹跳现象引起的信号抖动会造成误动作而影响到系统的正确性。因此,我们需要设计按键弹跳消除电路来去除抖动。。

1.弹跳消除电路的原理和功能

按键开关的典型连线分为低电平有效和高电平有效,本文的是低电平有效。

机械开关的抖动存在三种情况:按下时有抖动,松开时也有抖动;按下时有抖动,松开时无抖动;按下时无抖动,松开时有抖动。机械开关的抖动波形、抖动次数、抖动时间都是随机的,并不是每次都会产生抖动。

不同开关的最长抖动时间也不同。抖动时间的长短和机械开关特性有关,一般为5ms到10ms。但是,某些开关的抖动时间长达20ms,甚至更长。所以,在具体设计中要具体分析,根据实际情况来调整设计。

弹跳现象以及弹跳消除如图1 所示,虽然只是按下按键一次后放掉,结果在按键信号稳定先后竟出现了多个段脉冲,如果将这样的信号直接送到计数器之类的时序电路,结果将可能发生计数超过一次以上的误动作,从而误以为键盘按了多次。因此,必须加上弹跳消除电路,除去短脉冲,避免误操作的发生。

按键弹跳消除模块的程序设计与应用

2.按键弹跳消除模块的实现

为了使按键弹跳消除模块的更加简洁,并且移植性好,在此用计数器的方式实现消除按键抖动的功能。

2.1 计数器模值的计算

计数器模值的确定是按键弹跳消除效果的关键问题,如果值过大,即采样时间过长,就会漏掉正确的信号;如果值过小,采样时间过短,则会将毛刺误认为是输入信号。

计数器的模值n根据抖动信号的脉冲宽度和采样信号clk的周期大小决定。根据一般人按键的速度小于10Hz(每秒小于10次),所以按键时间大于100ms,按占空比50%计算,按下的时间大于50ms。按这种约定,我们认为按下的时间小于50ms的为抖动信号,按下的时间大于50ms的是按键信号。即n=50ms/采样脉冲信号周期,这样就可以把按下的时间小于50ms的抖动信号滤掉。

在此,根据实验板提供的系统时钟来确定实际需要的模值。实验板提供的系统时钟为100mHz,通过分频后得到25mHz的时钟,50ms*25mHz得到count的模值为21’h1312D0。采用这个模值得到的消抖时间大约为50ms,符合要求。

2.2 程序设计

设计一个高脉冲计数器count1和一个低脉冲计数器conut0。引入一个采样脉冲信号clk,对输入信号button_in进行采样,并对clk进行计数。若button_in为高电平,count1做加法计数,直到count1各位全为1,停止计数,归零,使消抖后的输出信号button_out输出1。若button_in为低电平,count0做加法计数,直到count0各位全为1,停止计数归零,并使消抖后的输出信号button_out输出0。

部分程序如下:

module filter(clk,

reset,

button_in,

button_out);

input clk;

input reset;

input button_in;

output button_out;

wire buttong_out1;

reg [20:0] count0;

reg [20:0] count1;

reg button_out1_reg;

……

assign button_out=button_out1_reg;

//对输入进行采样,计数

always@(posedge clk or negedge reset)

begin

if(!reset) count1《=21‘h000000;

else if(button_out1==1’b1) count1《=count1+1;//对高电平计数

else count1《=21‘h000000;

end

always@(posedge clk or negedge reset)

begin

if(!reset) count0《=21’h000000;

else if(button_out1==1‘b0) count0《=count0+1;//对低电平计数

else count0《=21’h000000;

end

//输出

always@(posedge clk or negedge reset

begin

if(!reset) button_out1_reg《=1’b1;

else if(count0==21‘h1312D0) //判断低电平信号是否符合输出条件

button_out1_reg《=1’b0; //如果符合条件,则输出低电平

else if(count1==21‘h1312D0) //判断低电平信号是否符合输出条件

button_out1_reg《=1’b1; //如果符合条件,则输出高电平

else button_out1_reg《=button_out1_reg;

end

endmodule

按键弹跳消除模块的程序设计与应用

3 按键弹跳消除模块的实际应用

利用Memec virtex-4 开发板,通过开发板上的按钮输入8位的01控制代码,用开发板上的开关输入状态控制位,从而控制板上的1602 C型字符型液晶模块的显示模式和内容。

LCD控制信号生成模块:根据按钮输入,产生控制显示模块的8位控制信号。对按钮送入该模块的1位(0/1)信号进行保存并进行转换,使每8次输入形成一个8位的信号。如果输入不满8位或需重新输入,则取消上次结果;如果确定输入结果正确,则将8位信号保存并输出。

LCD显示控制模块:完成1602 C型字符型液晶模块的初始化,并根据控制信号完成状态转换。

按键弹跳消除模块的程序设计与应用

总系统设计如图4:

按键弹跳消除模块的程序设计与应用

结束语

本文进行性模块化设计,实现了弹跳消除电路模块、LCD控制信号生成模块和LCD显示控制模块组成的系统的具体功能,在Memec实验板上运行效果良好。并且在用FPGA进行电路调试的时候,可以将该系统嵌入其它电路中,增加需要的测试点和观察点,通过按钮控制显示,可以动态的对电路进行测试,找出问题,使调试更加直观,从而提高的FPGA的内部信号的可观察性,提高验证效率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21648

    浏览量

    601436
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4407

    浏览量

    166975
  • 数字系统
    +关注

    关注

    0

    文章

    140

    浏览量

    20819
收藏 人收藏

    评论

    相关推荐

    verilog写cpld的程序如何消除按键的抖动?

    verilog写cpld的程序如何消除按键的抖动?
    发表于 04-02 09:22

    按键弹跳消除模块的原理及应用

    按键在数字电路设计中经常用到。按键弹跳现象是数字系统设计中存在的客观问题。按键是机械触点,当接触点断开或闭合时会产生抖动。为使每一次按键
    发表于 07-31 09:18 3024次阅读
    <b class='flag-5'>按键</b><b class='flag-5'>弹跳</b><b class='flag-5'>消除</b><b class='flag-5'>模块</b>的原理及应用

    弹跳消除模块程序下载

    I.弹跳消除模块程序如下: --content definition of component debounce library ieee; use ieee.std_logic_1
    发表于 02-23 15:53 34次下载

    基于PDA和无线模块的SMS程序设计

    本内容提供了基于PDA和无线模块的SMS程序设计,欢迎大家下载学习
    发表于 06-27 15:54 21次下载
    基于PDA和无线<b class='flag-5'>模块</b>的SMS<b class='flag-5'>程序设计</b>

    基于51单片机的超声波模块测距程序设计系统

    基于51单片机的超声波模块测距程序设计系统
    发表于 02-18 17:08 40次下载

    模块程序设计

    模块程序设计思想,单片机c语言的模块化设计,方便移植,将程序封装备用。
    发表于 03-22 15:29 9次下载

    模块程序设计

    模块程序设计,利用c语言的移植性好特点,更好的利用c语言。
    发表于 03-23 09:25 0次下载

    按键累加

    C语言程序设计的一个按键 累加功能,通过此程序可识相按键控制数码管数字累加。
    发表于 05-09 14:16 3次下载

    介绍关于按键与数码管的程序的设计

    按键与数码管的程序设计
    的头像 发表于 07-10 03:46 3500次阅读
    介绍关于<b class='flag-5'>按键</b>与数码管的<b class='flag-5'>程序</b>的设计

    C程序设计的详细中文资料免费下载

    本文档的主要内容详细介绍的是C程序设计的详细中文资料免费下载内容包括了: 程序设计和C语言,算法---程序的灵魂,最简单的C程序设计,选择结构程序设
    发表于 08-01 08:00 0次下载

    C语言程序设计教程之模块设计课件资料免费下载

    本文档的主要内容详细介绍的是C语言程序设计教程之模块设计课件资料免费下载主要内容包括了:1 模块的实现——函数,2 模块间的参数传递,3 模块
    发表于 01-08 14:19 70次下载
    C语言<b class='flag-5'>程序设计</b>教程之<b class='flag-5'>模块</b>设计课件资料免费下载

    JAVA程序设计教程之JSP程序设计实验

    本文档的主要内容详细介绍的是JAVA程序设计教程之JSP程序设计实验。
    发表于 11-05 15:34 6次下载
    JAVA<b class='flag-5'>程序设计</b>教程之JSP<b class='flag-5'>程序设计</b>实验

    单片机C程序设计的六个实例详细讲解

    本文档的主要内容详细介绍的是单片机C程序设计的5个实例详细讲解包括了:按键程序编写的基础,模块化编程初识,按键
    发表于 11-18 08:00 1次下载
    单片机C<b class='flag-5'>程序设计</b>的六个实例详细讲解

    多功能按键嵌入式程序设计资料下载

    电子发烧友网为你提供多功能按键嵌入式程序设计资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-23 08:40 8次下载
    多功能<b class='flag-5'>按键</b>嵌入式<b class='flag-5'>程序设计</b>资料下载

    嵌入式软件开发之模块程序设计(三)

    模块程序设计是指在进行程序设计时将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一
    发表于 11-03 21:06 10次下载
    嵌入式软件开发之<b class='flag-5'>模块</b>化<b class='flag-5'>程序设计</b>(三)