当前位置:文档之家› 按键去抖动程序

按键去抖动程序

按键去抖动程序
按键去抖动程序

按键去抖动

一、实验目的

1、学习基于VHDL 描述状态机的方法;

2、学习 VHDL 语言的规范化编程,学习按键去抖动的原理方法。

二、实验平台

微机一台(Windows XP 系统、安装QuartusⅡ等相关软件)、CPLD 学习板一块、5V 电源线一个、下载线一条。

三、设计要求

机械式轻触按键是常用的一种外围器件,由于机械原因导致的抖动会使得按键输入出现毛

刺。设计一个按键去抖动电路,并用按键作为时钟,结合计数器观察去抖动前后的效果有什么不同。

四设计方案

思路提示:按键去抖动通常采用延时判断的方法,去除按键过程中出现的毛刺。其实现过程是:当查询到按键按下时,延时一段时间再去判断按键是否仍然被按下,若是则此次按键有

效,否则看作是干扰。这可以利用状态机来实现,

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity qudou is

port(

clk, en: in std_logic;

sp: out integer range 0 to 7);

end qudou ;

architecture behave of qudou is

type state is (S0,s1,s2);

signal z: std_logic;

signal q: integer range 0 to 2; signal a: integer range 0 to 7; signal s: state;

begin

p1:process(clk)

begin

if(clk'event and clk = '1') then

if en='1' then

if q=2 then

q<=q;

else q<=q+1;

end if;

else q<=0;

end if;

if q=2 then

z<='1';

else z<='0';

end if;

case s is

when s0=>

if (z = '0') then

s<=s0;a<=a;

else

s<=s1;a<=a+1;

end if;

when s1=>

if (z='0') then

s<=s0;a<=a;

else

s<=s2;a<=a;

end if;

when s2=>

if (z='0') then

s<=s0;a<=a;

else

s<=s2;a<=a;

end if;

end case;

sp<=a;

end if;

end process p1;

end behave;

五.实验结果:

按键去抖说明

由于机械触点的弹性振动,按键在按下时不会马上稳定地接通而在弹起时也不能一下子完全地断开,因而在按键闭合和断开的瞬间均会出现一连串的抖动,这称为按键的抖动干扰,其产生的波形如图5.3.1 所示,当按键按下时会产生前沿抖动,当按键弹起时会产生后沿抖动。这是所有机械触点式按键在状态输出时的共性问题,抖动的时间长短取决于按键的机械特性与操作状态,一般为10~100ms,此为键处理设计时要考虑的一个重要参数。 按键的抖动会造成按一次键产生的开关状态被CPU 误读几次。为了使CPU 能正确地读取按键状态,必须在按键闭合或断开时,消除产生的前沿或后沿抖动,去抖动的方法有硬件方法和软件方法两种。 1. 硬件方法 硬件方法是设计一个滤波延时电路或单稳态电路等硬件电路来避开按键的抖动时间。 图5.3.2 是由R2 和C 组成的滤波延时消抖电路,设置在按键S 与CPU 数据线Di 之间。按键S 未按下时,电容两端电压为0,即与非门输入V i 为0,输出V o 为1。当S 按下时,由于C 两端电压不能突变,充电电压V i 在充电时间内未达到与非门的开启电压,门的输出V o将不会改变,直到充电电压V i 大于门的开启电压时,与非门的输出V o 才变为0,这段充电延迟时间取决于R1、R2 和C 值的大小,电路设计时只要使之大于或等于100ms 即可避开按键抖动的影响。同理,按键S 断开时,即使出现抖动,由于C 的放电延迟过程,也会消除按键抖动的影响 图5.3.2 中,V1 是未施加滤波电路含有前沿抖动、后沿抖动的波形,V2 是施加滤波电路后

消除抖动的波形。 2. 软件方法 软件方法是指编制一段时间大于100ms 的延时程序,在第一次检测到有键按下时, 执行这段延时子程序使键的前沿抖动消失后再检测该键状态,如果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的影响。同理,在检测到按键释放后,也同样要延迟一段时间,以消除后沿抖动,然后转入对该按键的处理。

按键消抖与时间按键

按键消抖与时间按键 这篇文章写给正在学51单片机的或者刚入门51单片机准备进阶的的朋友,我们来着重讨论一下按键消抖和时间按键这两项。 我们常用的按键大多都是机械的,机械开关就会出现机械振动,这个由物理学或者实验可以推出来,抖动会在单片机上面出现重复扫描次数,次数多少与单片机的时钟晶振有关,时钟晶振越高单片机执行速度越快,重复次数就越多 整个按键数百ms 按下瞬间,抖动时间大概10ms 弹起瞬间,抖动大概10ms 按键一次出现的电平变化 (上面的时间都是老师说的和书上现成的,没有实际测试,而且不同的按键应该也会有差异,作为学习研究确实不应该,找个时间锅锅会测出这个时间供大家参考,嘿嘿) 由图我们可以看出,按下去瞬间会出现抖动,弹起来也会出现抖动,明显是个阻尼振动,按键扫描程序是按顺序执行的; 首先提出三个问题大家思考一下 1.为什么要消除抖动 2.如何消抖 3.是不是按键都要消抖,不是的话,哪些需要消抖,哪些不需要消抖 4.消抖的时间是不是必须10ms 5.按键消抖的方式是不是一定像书上的那样,如何消抖更节省CPU,且更简单 按键如果不消除抖动,那么单片机检测到的低电平的次数就不止一次,那我们按键一次,单片机会检测到多次,比如我们把按某个按键设置按一次成某个变量加1,结果按一次就加了很多次,这样我们就不能精确的通过按键来调整我们想要的参数,所以我们消除抖动的目的就是要实现按一次按键让单片机读出一次按键操作 消抖分硬件和软件消抖, 硬件消抖有《模拟电子技术》上提到用三态门实现,当然还有周立功那个7920(管理数码管和按键的芯片),当然还有很多硬件电路以及一些按键有自带消抖电路,但是如果要做产

按键开关消抖程序

按键开关消抖程序 实践中,单片机端口在连接开关器件时都要考虑消抖的问题,或在硬件上 增加延迟,或是增加软件延迟查询的功能模块。这里,我们考虑这样一个检测 电路:单片机连接一个开关和两个LED。程序是这样的,如果开关的消抖正确, 就点亮LED1,否则就闪亮LED2。按下开关,点亮LED1,释放开关,LED1 即熄灭。我们加入20 毫秒的消抖延迟时间。当检测到开关为低电平时,单片 机在延迟20 毫秒后再次检测开关的状态。如果此时开关状态为高,则LED2 就闪亮,如为低则点亮LED1。源代码: led1bitP2.0led2bitP2.1switch1bitP1.0ORG 0000hsetb switch1//initialize switch 1 as inputsetb led1//Turn OFF LED1setb led2//Turn OFF LED2 wait:jb switch1,wait// Wait till switch1 has been pressedcall debounce_delayjb switch1,c1_wait//switch low even after debouncing period//switch has been succesfully debouncedclr led1//Turn ON LED1jnb switch1,$//wait till switch has been releasedsetb led1//Turn OFF LED1ajmp wait c1_wait://Switch PIN high after debounce period so error in debouncingcpl led2ajmp wait debounce_delay://Subroutine for generating 20ms delaymov r7,#245l1_debounce_delay:mov r6,#40djnz r6,$djnz r7,l1_debounce_delayret END tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

第六课按键的硬件消抖

51单片机进阶篇 ---按键的硬件消抖 本文作者:Cepark 更新时间:2010/07/20 作者博客:https://www.doczj.com/doc/1d11231130.html,

按键的硬件消抖 在上一节课中,我们介绍了使用软件延时的方法来进行消抖从而进行按键的检测,软件延时的优点是硬件电路简单,但是程序相对来讲会复杂,而且一般的延时函数是使用计数延时,这会增加CPU的负担。硬件消抖电路可以简化程序的编写,但是需要额外的器件支持。两种方法各有利弊,在不同的情况下根据不同的情况来选择使用哪一种消抖方法,这一节课我们主要介绍一下常见的硬件消抖电路。 1、RS触发器构成的消抖电路的主要原理 用R-S触发器形成消抖电路时单片机外围电路设计中的常用手段,它可以减少单片机软件对按键动作的延时和计算。要使用R-S触发器形成的消抖电路,首先用了解R-S触发器的基本工作原理图和工作特点。 R-S触发器的基本构成如图所示,它是由两个与非门交叉耦合而成,S和R是信号的输 Q既表示触发器的状态,又是触发器的输出端。 入端,低电平有效,Q和 在启动过程中,S端一旦下降到开门电平,Q端电平就会上升,反馈到门B的输入端, Q端的电平下降,反馈到门A的输入端,进一步促使门A截止,促使B由截止转向导通, Q的电平进一步下降,这样的过程,是Q端电平进一步上升,Q端电平上升的结果又会使 的门A很快截止、门B很快导通,触发器在极短的时间内完成由截止到导通的转换。通过R 段的复位时也有类似的正反馈过程发生,从而完成按键开关的消抖功能。 典型的硬件消抖方法是在单片机和检测管脚之间加入由74LS02或者其他的门电路组成的R-S触发器消抖电路。如下所示。

按键消抖

一、按键消抖 1.1 计数器型消抖电路(一) 计数器型消抖电路(一)是设置一个模值为(N+1)的控制计数器,clk在上升沿时,如果按键开关key_in='1',计数器加1,key_in='0' 时,计数器清零。当计数器值为2时,key_out 输出才为1,其他值为0时。计数器值为N时处于保持状态。因此按键key_in持续时间大于N个clk时钟周期时,计数器输出一个单脉冲,否则没有脉冲输出。如果按键开关抖动产生的毛刺宽度小于N个时钟周期,因而毛刺作用不可能使计数器有输出,防抖动目的得以实现。clk的时钟周期与N的值可以根据按键抖动时间由设计者自行设定。 主要程序结构如下: 图1是N为3的波形仿真图,当按键持续时间大于3个时钟周期,计数器输出一个单脉冲,其宽度为1个时钟周期,小于3个时钟周期的窄脉冲用作模拟抖动干扰,从图1可以看出,抖动不能干扰正常的单脉冲输出。 1 按键抖动产生原因分析 绝大多数按键都是机械式开关结构,由于机械式开关的核心部件为弹性金属簧片,因而在开关切换的瞬间会在接触点出现来回弹跳的现象。虽然只是进行了一次按键,结果在按键信号稳定的前后出现了多个脉冲,如图1所示。如果将这样的信号直接送给微处理器扫描采集的话,将可能把按键稳定前后出现的脉冲信号当作按键信号,这就出现人为的一次按键但微处理器以为多次按键现象。为了确保按键识别的准确

性,在按键信号抖动的情况下不能进入状态输入,为此就必须对按键进行消抖处理,消除抖动时不稳定、随机的电压信号。机械式按键的抖动次数、抖动时间、抖动波形都是随机的。不同类型的按键其最长抖动时间也有差别,抖动时间的长短和按键的机械特性有关,一般为5~10 ms,但是,有些按键的抖动时间可达到20 ms,甚至更长。所以,在具体设计中要具体分析,根据实际情况来调整设计。 2 按键消抖电路的设计 按键消抖一般采用硬件和软件消抖两种方法。硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。在微机系统中一般都采用软件延时的消抖方法。在用可编程逻辑器件FPGA/CPLD设计数字系统中,也可以用VHDL语言设计相应的时序和逻辑电路,对按键信号进行处理,同样可以达到消抖目的。本文利用Altera公司的可编程逻辑器件CPLD和QuartusⅡ,设计性能可靠的按键消抖电路。 2.1 按键消抖电路设计原理 按键消抖的关键是提取稳定的低电平(或高电平)状态,滤除按键稳定前后的抖动脉冲。在用基于VHDL 语言的时序逻辑电路设计按键消抖电路时,可以用一个时钟脉冲信号对按键状态进行取样,当第一次采样到低电平时,启动延时电路,延时结束后,再对按键信号进行连续三次取样,如果三次取样都为低电平,则可以认为按键已经处在稳定状态,这时输出一个低电平的按键确认信号,如果连续三次的取样中,至少有一次是高电平,则认为按键仍处在抖动状态,此时不进行按键确认,按键输出信号为高电平。 2.2 按键消抖电路设计 该控制电路采用VHDL语言的有限状态机的设计方法来描述和实现,其状态转换图如图2所示。

单片机与4x4键盘去抖松手检测程序

单片机与4x4键盘去抖松手检测程序 刚写的一个4*4 键盘,去抖 松手检测程序。项目中要用4*4 键盘,扫描的程序有。但是去抖,和松手检测的程序没有,那么为了提高效率,可靠性,以及更加合理化。到网上找了一些关于”状态机“的资料,按照它的思路写了一个,写了半天,写好一个,经过特发帖纪录一下。 //对按键扫描的值进行处理去抖松手检测 uint8_t key_scan(void) { static uint8_t key_state = 0; static uint8_t key_num_flag1=0; uint8_t temp_key_num=0; uint8_t return_key_num=0; temp_key_num=KeyMap();//读取4*4 键盘返回的按键值不要去抖 switch(key_state)//检测状态

case key_state_0: if(temp_key_num!=0) //如果按键返回不是0 说明有按键按下 { key_num_flag1=temp_key_num; //记录下第一次按键按下的值 key_state=key_state_1; //进入下一个状态去抖 } break; case key_state_1: if(temp_key_num!=0) //如果按键返回不是0 说明按键是按下的 { if(key_num_flag1==temp_key_num)//判断是否和上次记录按键值一样。 {

return_key_num=temp_key_num; // 按键仍按下,赋值给返回按键值 key_state = key_state_2; // 状态转换到键释放态 } else { key_state=key_state_0; //回到初始状态 } } else ///没有按键按下 {

使用硬件方式对按键进行消抖处理

按键电路:常用的非编码键盘,每个键都是一个常开开关电路。 按键消抖: 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。 按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖

动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。 <1> 硬件消抖:在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖。 图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B 点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。 <2> 软件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。按键消抖

一种软件去除键抖动的方法

一种软件去除键抖动的方法 一种软件去除键抖动的方法 摘要:单片机控制系统中大多使用控制键来实现控制功能。消除按键瞬间的抖动是设计者必须要考虑的问题。本文介绍一种很实用的软件去抖动方法,它借助于单片机内的定时中断资源,只要运算一下逻辑表达就完成了去抖动。这个方法效率高,不耗机时且易实现。文中使用的逻辑表达式由简单卡诺图和真值表推出,使该方法的机理容易理解。文中还提供用C51单片机编程语言编写的实用例程。关键词:单片机键处理控制系统去抖动键盘概述在单片机控制系统中,通过按键实现控制功能是很常见的。对按键处理的重要环节是去抖动,包括去除按下和抬起瞬间的抖动。去抖动的方法有很多种,如使用R-S触发器的硬件方法、运用不同算法的各种软件方法等。硬件方法会增加成本和体积,对于按键较多的矩阵式键盘,会用硬件方法;软件方法用的比较普遍,但有一种加固定延时的去抖动法效率最低,它以无谓地耗费机时来实现去抖动。此处介绍的是一种软件方法。简单说来是一种运算法,配合定时中断读取按键,通过运算逻辑表达式:Keradyn=KtempKinput+Kreadyn-1(Ktemp⊙Kinput)(1) Ktemp=Kinput(2) 可以获得消除抖动的按键消息。这种方法效率高,不需耗时的循环等待,而且算法简单、使用方便。一、基本原理由于按键的按下与抬起都会有10~20ms的抖动毛刺存在,因此,为了获取稳定的按键信息,须要避开这段抖动期。设置3个变量Kready、Ktemp和Kinput,并设置定时中断周期为20ms。在定时中断服务程序中读取按键,并把读取的数据存于变量Kinput中。变量Kready中是所需要的稳定的按键信息;Ktemp是中间变量,它的值是上一次的Kinput。根据当前按键的状态,考虑到Kready中是20ms抖动后的有效键信息,则Kready、Ktemp和Kinput之间,在不同时刻的状态关系如表1所列。表 1 时刻KreadyKtempKinput1000200130104001511161117110810191101000011000 时刻1为没有键按下的初始状态;时刻2的Kinput为1,但时刻3的Kinput又变为0,说明时刻2的Kinput为1并不是有键按下,可能只是干扰,所以Kreqdy为0;时刻4同时刻2的情况类似,但是时刻4和时刻5时Kinput都为1,说明有按键按下,在时刻5时Kready为1;虽然时刻7时Kinput为0,但时刻5、6、

Verilog写的按键消抖程序

前几天看了特权同学用Verilog写的按键消抖程序,感觉很经典。在这里将程序贴出来分享一下。 module lcd_button2(clk,rst,seg,wei,sw1,sw2,sw3,sw4);//按键按下,数码管依次显示0-9 input clk; input rst; input sw1,sw2,sw3,sw4; output [3:0] wei; output[7:0] seg; reg [7:0] seg; reg [3:0] wei; integer num; initial begin num = 0; end reg[3:0] key_rst; always @(posedge clk or negedge rst) if(!rst) key_rst <= 4'b1111; else key_rst <= {sw4,sw3,sw2,sw1}; reg[3:0] key_rst_r; always @(posedge clk or negedge rst) if(!rst) key_rst_r <= 4'b111; else key_rst_r <= key_rst; wire[3:0] key_an = key_rst_r & (~key_rst); reg[19:0] cnt; always @(posedge clk or negedge rst) if(!rst) cnt <= 0; else if(key_an) cnt <= 0; else cnt <= cnt+1'b1; reg [3:0] low_sw; always @(posedge clk or negedge rst)

第13讲51单片机按键电路

标题:键盘接口电路 教学目标与要求: 1.键盘去抖动和连接、控制方式 2.独立式按键及其接口电路 3.矩阵式键盘及其接口电路 授课时数:2 教学重点:.矩阵式键盘及其接口电路 教学内容及过程: 一、键盘接口概述 1、按键开关去抖动问题 机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图9-11所示,抖动时间的长短与开关的机械特性有关,一般为5 10 ms 在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路。图9-12是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。 软件上采取的措施是:在检测到有按键按下时,执行一个10 ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态。同理,在检测到该键释放后,也应采用相同的步 骤进行确认,从而可消除抖动的影响。

2.编制键盘程序 一个完善的键盘控制程序应具备以下功能: (1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。 (2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。 (3) 准确输出按键值(或键号),以满足跳转指令要求。 二、独立式按键 单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。 1. 独立式按键结构 独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图7.4所示。 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。 2.矩阵式键盘 I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路。特点: ①占用I/O端线较少; ②软件结构教复杂。 适用于按键较多的场合。 3.键盘扫描控制方式 ⑴程序控制扫描方式 键处理程序固定在主程序的某个程序段。 特点:对CPU工作影响小,但应考虑键盘处理程序的运行间隔周期不能太长,否则会影响对键输入响应的及时性。 ⑵定时控制扫描方式 利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。 特点:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。 ⑶中断控制方式 中断控制方式是利用外部中断源,响应键输入信号。 特点:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。 三、独立式按键及其接口电路 1、按键直接与I/O口连接

按键去抖动程序

按键去抖动 一、实验目的 1、学习基于VHDL 描述状态机的方法; 2、学习 VHDL 语言的规范化编程,学习按键去抖动的原理方法。 二、实验平台 微机一台(Windows XP 系统、安装QuartusⅡ等相关软件)、CPLD 学习板一块、5V 电源线一个、下载线一条。 三、设计要求 机械式轻触按键是常用的一种外围器件,由于机械原因导致的抖动会使得按键输入出现毛 刺。设计一个按键去抖动电路,并用按键作为时钟,结合计数器观察去抖动前后的效果有什么不同。 四设计方案 思路提示:按键去抖动通常采用延时判断的方法,去除按键过程中出现的毛刺。其实现过程是:当查询到按键按下时,延时一段时间再去判断按键是否仍然被按下,若是则此次按键有 效,否则看作是干扰。这可以利用状态机来实现, library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity qudou is port( clk, en: in std_logic; sp: out integer range 0 to 7); end qudou ; architecture behave of qudou is type state is (S0,s1,s2);

signal z: std_logic; signal q: integer range 0 to 2; signal a: integer range 0 to 7; signal s: state; begin p1:process(clk) begin if(clk'event and clk = '1') then if en='1' then if q=2 then q<=q; else q<=q+1; end if; else q<=0; end if; if q=2 then z<='1'; else z<='0'; end if; case s is when s0=> if (z = '0') then s<=s0;a<=a; else s<=s1;a<=a+1; end if; when s1=> if (z='0') then s<=s0;a<=a; else s<=s2;a<=a; end if; when s2=> if (z='0') then s<=s0;a<=a; else s<=s2;a<=a; end if; end case; sp<=a; end if; end process p1; end behave;

实验05按键消抖

实验五按键消抖 一. 实验目的 1. 掌握QuartusII的硬件描述语言设计方法 2. 了解同步计数器的原理及应用 3. 设计一个带使能输入、进位输出及同步清零的增1四位N (N<16)进制同步计数器 二. 准备知识 在按键使用的过程中,常常遇到按键抖动的问题,开关在闭合(断开)的瞬间,不能一接触就一直保持导通(断开),因为开关的机械特性,重要经历接触-断开-再接触-再断开,最终稳定在接触位置,这就是开关的抖动,即虽然只是按下按键一次然后放掉,结果在按键信号稳定前后,竟出现了一些不该存在的噪声,这样就会引起电路的误动作。在很多应用按键的场合,要求具有消抖措施。按键抖动与开关的机械特性有关,其抖动期一般为5-10ms。 键按下 键稳定 前沿抖动后沿抖动 图5.1 按键电平抖动示意图 按键的消除抖动分为硬件消除抖动和软件消除抖动。硬件消除抖动一般采用滤波的方法,通常在按键两端并联一个1~10u左右的电容,有时这样也不能完全消除按键的抖动。软件消除抖动的方法有多种,常用的是延时扫描和定时器扫描。延时扫描其原理为:检测到按键操作后延时一端时间(如10ms)后,再检测是否为仍然为同样的按键操作状态,如果相同,就认为是进行了按键操作,然后对该操作进行相应的处理。定时器扫描的原理是:每隔一端时间(几毫秒)扫描一次键盘,如果连续两次(或3次)的所获得的按键状态相同,就输出按键状态,然后再对这种按键状态进行处理,这里的扫描时间间隔和连续判断按键状态的次数是有关系的,一般总时间要大于按键的抖动期。如果总时间太长,则感觉按键迟钝,太短可能不能完全消除抖动,要根据实际的情况合适的选择。 在实际电路设计中,经常采用的是软硬件相结合对按键进行消除抖动的处理方法。 本实验采用的方法:实验箱按键的硬件电路是共阳极电路,按下按键时输出到FPGA管脚的电平为低电平,松开按键时为高电平。我们采用5ms的定时器扫描FPGA管脚电平,如果连续3次为低电平时,存储连续按键状态的次数CNT的值加1,直到该计数值等于10(或再大一些),就不再累加(防止长按该值溢出而重新计数),此时认为按键已稳定,输出按键操作标志;在该过程中,一旦FPGA管脚电平为低电平就对CNT复位清零并同时对按键操作标志位复位,即一个异步复位。 本实验采用的方法:实验箱按键的硬件电路是共阳极电路,按下按键时输出到FPGA管脚的电平为低电平,松开按键时为高电平。我们采用5ms的定时器扫描采样FPGA管脚电平,如果连续3次为低电平时,可以认为此时按键已稳定,输出一个低电平按键信号;继续采样的过程中如果不能满足连续3次采样为低,则认为键稳定状态结束,这时输出变为高电平(连线3次采用信号相“或”),

关于单片机按键的抖动与消抖

关于单片机按键的抖动与消抖 在单片机的程序中,如果涉及到按键,一般都会看到几行注释着消抖 的代码。比如下面这一段:if((KeyV|0xc3)==0xff){//无键按下return 0; } mDelay(10);//延时,去键抖KeyV=P3; if((KeyV|0xc3)==0xff){//无键按下return 0; } 关于其作用与目的,有如下解释:按键在按下时会产生电平的变化,通常是由高电平变为低电平,而且这一过程也不是瞬间完成的,按键按下之后, 电平会有一段不稳定变化的时间。一般情况下,我们的程序读取这个电平变化 并做相关的动作。但由于机械按键的局限性,当系统受到外力而产生抖动或其 它动作时,也可能使系统内部产生电平变化(通常这种变化持续的时间非常短),这种现象称之为按键的抖动。这种抖动显然不是我们期望出现的,一旦程序中没有针对它进行特殊处理,这种隐患很可能导致系统执行我们不希望出现 的动作。进而可能酿成一场悲剧。避免按键抖动的操作就称之为消抖。目前,单片机的消抖主要分为软件消抖和硬件消抖。其中,软件消抖增加软件资源,但不增加硬件成本;硬件消抖反之。现在普遍采用的是软件消抖的方式。软件消抖具体的操作思路是:当监听到按键被按下时,不立刻执行相关的操作,而进行一定时间的延时(通常是50ms),之后再次检测按键是否被按下,如果 此时按键仍然被按下,则判定按键确实被按下了(因为不论是异常情况导致的 抖动还是正常情况下按键被按下产生的电平变化都会在这一段时间内过去,紧 接着的电平将会是稳定的),然后进行按键被按下之后所需要的操作,否则判 定按键未被按下,继续监听按键状态。实际上,以上所说的软件消抖的方法在 真正的软件中应用的不多,只是在练习的时候使用。真正的应用上,会在可能 产生抖动的那一段时间内等间隔多次监听按键状态(电流状态),等到数次 (可以是连续5 次)电流平稳了才确定按键被按下。按键被放开时采取同样操

按键去抖设计

按键去抖设计 姓名: 学号: 专业: 班级: 指导教师: 2012年11月09日

目录 一、实验目的--------------------------------------------1 二、实验平台-----------------------------1 三、设计要求-----------------------------1 1、设计原理---------------------------------1 四、设计方案-----------------------------1 1、键盘分类-------------------------------1 2、设计方法-------------------------------2 3、去抖动电路模块--------------------------------3 五、去抖动电路VHDL程序------------------------5 六、实验结果--------------------------------------------6 1、Verilog结构图---------------------------6 2、时序仿真图-------------------------------6 3、功能仿真图-------------------------------7 七、心得体会------------------------------------8 八、参考文献------------------------------------9

实验题目:按键去抖设计 一、实验目的 1、学习基于VHDL 描述状态机的方法; 2、学习 VHDL 语言的规范化编程,学习按键去抖动的原理方法。 二、实验平台 微机一台(Windows XP 系统、安装QuartusⅡ等相关软件) 三、设计要求 1、设计原理: 机械式轻触按键是常用的一种外围器件,由于机械原因导致的抖动会使得按键输入出现毛刺。 滤除前沿和后延抖动毛刺,提取稳定的按键信息。 四设计方案 1、键盘分类 键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘。 在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。 按键在闭合和断开时,触点会存在抖动现象:

按键消抖

【012】按键消抖 点击数:919 发布日期:2006-6-23 19:29:00 【收藏】【评论】【打印】【编程爱好者论坛】【关闭】 参考: 《单片机原理及接口技术》(李朝青) 按键电路:常用的非编码键盘,每个键都是一个常开开关电路。 按键消抖: 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。 按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次

处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。 <1> 硬件消抖:在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖。 图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS触发器的工作过程很容易得到验证。 <2> 软件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms的延时,待后沿抖动消失后才能转入该键的处理程序。

如何设计按键消抖

在使用单片机搭建有人机交互的系统时需要用到键盘,因为单片机工作时间都是纳秒与毫秒级别,但是我们人体的反应时间最少要0.2秒,之间差距很大,现实过程中也会不小心碰到按键,正常的按下按键应该是持续数十秒的稳定。一、按键电路常用的非编码键盘,每个在使用单片机搭建有人机交互的系统时需要用到键盘,因为单片机工作时间都是纳秒与毫秒级别,但是我们人体的反应时间最少要0.2秒,之间差距很大,现实过程中也会不小心碰到按键,正常的按下按键应该是持续数十秒的稳定。 一、按键电路 常用的非编码键盘,每个键都是一个常开开关电路。 计数器输入脉冲最好不要直接接普通的按键开关,因为记数器的记数速度非常快,按键、触点等接触时会有多次接通和断开的现象。我们感觉不到,可是记数器却都记录了下来。例如,虽然只按了1下,记数器可能记了3下。因此,使用按键的记数电路都会增加单稳态电路避免记数错误。 二、按键消抖 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。

按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。按键的抖动,可用硬件或软件两种方法。 三、硬件消抖 在键数较少时可用硬件方法消除键抖动。下图所示的RS触发器为常用的硬件去抖。消抖电路如下 图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出

基于verilog按键消抖设计

基于verilog按键消抖设计 关于键盘的基础知识,我就以下面的一点资料带过,因为这个实在是再基础不过的东西了。然后我引两篇我自己的博文,都是关于按键消抖的,代码也正是同目录下project里的。这两篇博文都是ednchina的博客精华,并且在其blog 首页置顶多日,我想对大家会很有帮助的。 键盘的分类 键盘分编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘。 在单片机组成的各种系统中,用的最多的是非编码键盘。也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。 按键在闭合和断开时,触点会存在抖动现象: 从上面的图形我们知道,在按键按下或者是释放的时候都会出现一个不稳定的抖动时间的,那么如果不处理好这个抖动时间,我们就无法处理好按键编码,所以如何才能有效的消除按键抖动呢?让下面的两篇博文日志给你答案吧。

经典的verilog键盘扫描程序 拿到威百仕( VibesIC )的板子后就迫不及待的开始我的学习计划,从最基础的分频程序开始,但看到这个键盘扫描程序后,直呼经典,有相见恨晚的感觉,还想说一句:威百仕( VibesIC ),我很看好你!WHY?待我慢慢道来,这个程序的综合后是0error,0warning。想想自己编码的时候那个warning是满天飞,现在才明白HDL设计有那么讲究了,代码所设计的不仅仅是简单的逻辑以及时序的关系,更重要的是你要在代码中不仅要表现出每一个寄存器,甚至每一个走线。想想我写过的代码,只注意到了前者,从没有注意过后者,还洋洋自得以为自己也算是个高手了,现在想来,实在惭愧啊!学习学习在学习,这也重新激发了我对HDL设计的激情,威百仕给了我一个方向,那我可要开始努力喽! 废话说了一大堆,看程序吧:(本代码经过ise7.1i综合并下载到SP306板上验证通过) //当三个独立按键的某一个被按下后,相应的LED被点亮;再次按下后,LED 熄灭,按键控制LED亮灭 `timescale 1ns/1ns module keyscan( clk, rst_n, sw1_n, sw2_n, sw3_n, //output led_d3, led_d4, led_d5 );

单片机按键去抖动程序设计思路

单片机按键去抖动程序设计思路 徐丽红王佰营 https://www.doczj.com/doc/1d11231130.html, 在单片机应用系统设计中,人机界面部分的友好程度,很大一部分取决于键盘处理程序。在按键时按得快了没有反应,按慢了一连响应几次,总给人紧迫感或迟钝感,不能使人满意。 用以下思路设计的键处理程序取得了满意效果。 判断有没有键值: 1.若有键值: 判断是否为首次按下: A:若首次按下:判断是否与上次按下的键值相同 a.若相同再判断:是否已经按下了300ms? 1).若已经按下300ms则将此键做为连键处理。 2).若不是连键则判断:是否按下20ms? 1>.若确认按下20ms,得到有效键值等待弹起 2>. 若不是按下20ms直接结束处理(ret)。 b.若不相同则将标志清零结束处理(ret)。 B:若不是首次按下:将键值暂存起来,标志置位结束处理。2.若无键值: 判断是否有键值已被确认 A.若有键已被确认:判断按键是否首次抬起 a.若首次抬起:判断抬起延时时间(20ms)是否到达 1>.若延时到则将标志处理结束处理。

2>.若延时未到直接结束处理(ret)。 b.若非首次抬起:直接结束处理(ret)。 B.若没有键被确认:直接结束处理(ret)。 具体程序实现流程图如下:(所有延时均为非阻塞式延时) Lcll scan_key----为调用键扫描程序; 简单的按键处理程序见:简单、友好的按键处理程序设计 简单、友好的按键处理程序设计 王佰营徐丽红

https://www.doczj.com/doc/1d11231130.html, 在嵌入程序设计中,键处理程序在一定程度上决定着人机对话界面的友好程度。WINDOWS是公认的界面友好的典范,我们就借鉴WINDOWS的键处理的思想: 1.当击键时WINDOWS立即作出响应; 2.当按住键不放时,WINDOWS延迟一定时间来判断是否为连键;其间不 作响应; 3.当认为是连键时,会间隔一定时间重复作出响应; (可以打开记事本,敲个‘h’键试验:瞬时敲击,即可出现‘h’,再按着键不放,无‘h’出现,当延迟一定时间‘h’,就以较快速度出现;)在C8051F020和DSP编程中运用上述的思想所编的键处理程序非常简捷、高效和友好,以下为该程序的流程图:

按键去抖课程设计

. 目录 摘要 (1) 第一章EDA技术简介 (2) 第二章按键去抖设计要求 (4) 第三章按键去抖分析 (4) 第四章按键去抖设计方案 (5) 第五章按键去抖模块 (6) 5.1 去抖动电路模块 (6) 5.2 去抖动电路模块程序 (6) 5.3 按键扫描模块 (9) 5.4 按键扫描程序 (10) 第六章按键去抖的顶层原理图设计 (11) 6.1 顶层原理图的源文件 (11) 6.2顶层原理图的时序仿真图 (12) 第七章学习心得 (13) 课程设计评分表............................................................................................................... 错误!未定义书签。

摘要 为了解决FPGA/ CPLD 系统的按键抖动问题, 用VH DL 语言有限状态机的方法, 在S0 状态下检测到有按键操作则转入延时状态S1 ,延时结束后, 用状态S2 , S3 , S4 对按键进行连续三次取样,如果三次取样均为低电平, 则转入状态S5并输出按键确认信号,否则, 返回状态S0。电路经仿真分析, 并下载到, EPM7128ATC100 芯片进行了验证, 能够确保每次按键操作,产生一次按键确认, 有很好的按键消抖效果, 性能稳定。主要创新点是用VHDL语言有限状态机设计按键的消抖。 关键词:按键消抖; 电路仿真; VH DL;状态机

第一章EDA技术简介 随着电子技术和计算机技术的飞速发展,电子线路的设计工作也日益显得重要。经过人工设计、制作实验板、调试再修改的多次循环才定型的传统产品设计方法必然被计算机辅助设计所取代,因为这种费时费力又费资源的设计调试方法既增加了产品开发的成本,又受到实验工作场地及仪器设备的限制。 为了克服上述困难,加拿大Interactive Image Technologies公司推出的基于Windows 95/98/NT操作系统的EDA软件(Electronics Workbench“电子工作台”,EWB)。他可以将不同类型的电路组合成混合电路进行仿真。EWB 是用在计算机上作为电子线路设计模拟和仿真的新的软件包,是一个具有很

51单片机矩阵键盘带去抖释放检测汇编

ORG 0000H LJMP MAIN ORG 0100H MAIN: ACALL KEYSCAN ;调用子函数 MOV A,30H ;从30H单元取相应的数值 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P2,A ACALL DELAY20MS SJMP MAIN MOV P1,#0FH ;线反转法 MOV A,P1 ANL A,#0FH MOV B,A MOV P1,#0F0H MOV A,P1 ANL A,#0F0H ORL A,B MOV 30H,A CJNE A,#0FFH, MASKVIB ;有键按下转去抖动 RET MASKVIB: ACALL DELAY20MS MOV P1,#0FH ;再次检测 MOV A,P1 ANL A,#0FH MOV B,A MOV P1,#0F0H MOV A,P1 ANL A,#0F0H ORL A,B CJNE A,30H, QUITKEY;比较两次扫描键值 RELEASE: MOV P1,#0FFH ;释放检测 MOV A,P1 CJNE A,#0FFH, RELEASE ;等待释放 KEYPRO: MOV B,30H ;键值处理程序 MOV DPTR,#KEYV ALUE MOV R7,#0FFH KEY1: INC R7 MOV A,R7 MOVC A,@A+DPTR CJNE A,B,KEY2

MOV A, R7 MOV 30H,A;键码保存 SETB 20H ;键值有效标志位 RET KEY2: CJNE A,#00H,KEY1 ;扫描键值结束标志 QUITKEY: RET ;键扫描无效退出 DELAY20MS: ;延时20MS子程序,使用40,41,42单元 MOV 40H,#20 ; NEXT1: MOV 41H,#20 NEXT2: MOV 42H,#248 DJNZ 42H,$ DJNZ 41H,NEXT2 DJNZ 40H,NEXT1 RET KEYV ALUE: DB 77H,7BH,7DH,7EH ;键码表 DB 0B7H,0BBH,0BDH,0BEH DB 0D7H,0DBH,0DDH,0DEH DB 0E7H,0EBH,0EDH,0EEH DB 00H TABLE: DB 0C0H,0F9H,0A4H,0B0H ;共阳数码管编码表 DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H DB 0C6H,0A1H,86H,8EH END 矩阵键盘扫描子程序,使用P1口。扫描有效在20H位置1,键码保存在30H单元;30H单元总会有数值,每次调用应检测20H位标志是否为1; 子程序使用了R7、40H、41H、42H和20H位; 测试结果从P2输出。

相关主题
文本预览
相关文档 最新文档