简捷的键盘扫描去抖方法
- 格式:pdf
- 大小:113.88 KB
- 文档页数:4


按键去抖动
一、实验目的
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
一种软件去除键抖动的方法
一种软件去除键抖动的方法
摘要:单片机控制系统中大多使用控制键来实现控制功能。消除按键瞬间的抖动是设计者必须要考虑的问题。本文介绍一种很实用的软件去抖动方法,它借助于单片机内的定时中断资源,只要运算一下逻辑表达就完成了去抖动。这个方法效率高,不耗机时且易实现。文中使用的逻辑表达式由简单卡诺图和真值表推出,使该方法的机理容易理解。文中还提供用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、
按键消抖
无论Nexys4开发板还是zedboard开发板,开发板上的按钮和拨动开关都是
机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键
开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及
断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消
抖。
在时序逻辑电路中,我们通常需要手动产生一个上升沿或者一个下降沿,如
将拨动开关拨上去(由0到1),这样就产生了一个上升沿;吧拨动开关从上面
拨下来(由1到0),这样就产生了一个下降沿。如果开关有机械抖动的话,那么
将开关从下拨到上或从上拨到下面,就会产生若干个上升沿或下降沿,如图1,
这样电路就会产生意想不到的情况。因此,如果将拨动开关当作时钟使用,必须
对其进行消抖。 抖动时间的长短由按键的机械特性决定,一般为20ms左右。
图1 按键抖动图
消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。按键的
消抖,可用硬件或软件两种方法。
硬件消抖 在键数较少时可用硬件方法消除键抖动。图2所示的RS触发器为常用的硬
件去抖电路。
图2 利用RS触发器消除按键抖动
图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为0;当
键按下时,输出为1。此时即使用按键的机械性能,使按键因弹性抖动而产生
瞬时断开(抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态不改
变,输出保持为0,不会产生抖动的波形。也就是说,即使B点的电压波形是
抖动的,但经双稳态电路之后,其输出为正规的矩形波。
软件消抖
如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程
序,20ms左右的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭
合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给20ms左右
的延时,待后沿抖动消失后才能转入该键的处理程序。 一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方
单片机按键消抖的方法,硬件软件都可以实现
不管设计一个什么作品,按键总是少不了的,对于按键你知道那些呢?
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
图1
抖动时间
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒,大家可以用示波器测试一下。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
下面是两种消抖方法:
一、 硬件消抖 :
按键防抖电路控制电路
所示利用RC 积分电路来达成杂波的滤除与波形修整的电路(如图1 )。
在S1 ON 的瞬间由于接触弹跳的关系,会使A 点电压呈现高速的断续现象,再S1 OFF时亦然,详(如图2所示),然而由于电容两端电压需由电压经电阻慢慢充电才会上升,使得B 点电位缓步上升情形:S1 OFF 时亦然,电容电压经R 放电,使B 点电压缓缓下降。此一变化,经史密特反相修整后,可得一标准负脉波输出,如波形图C 点所示。
用其他的各类触发器,锁存器亦可达到消抖效果。
二、 软件消抖 :