单片机的按键消抖与几种按键电路

合集下载

按键消抖电路

按键消抖电路

按键消抖电路
按键消抖电路是一种对按键信号进行抑制的电路,通常应用于用户在使用按键时会出现的抖动问题。

它通常由一个或多个容性元件、一个或多个晶体管和一些电阻元件组成。

该电路的原理是将按键的输入信号滤波,以避免按键受到的抖动影响。

按键消抖电路的工作原理是:当用户按下按键时,按键输入信号会先被一个容性元件所滤波,然后再被一个晶体管所放大,之后再通过电阻元件所分配,最后再输出到相应的系统。

由于容性元件的存在,按键抖动的幅度会受到抑制,而按键的输出信号也会随之减弱,这样就能够有效地抑制按键抖动,从而避免在用户使用按键时出现不必要的麻烦。

按键消抖电路常用于一些重要的电子设备,例如汽车电子控制器、智能家居控制系统等,用于抑制按键抖动使得用户能够更加顺畅地操作设备,从而提高设备的可靠性和安全性。

此外,按键消抖电路还可以用于提升按键的灵敏度,从而使得用户能够更加轻松的操作设备。

总的来说,按键消抖电路是一种非常有用的电路,它可以有效地抑制按键抖动,提高设备的可靠性和安全性,从而使用户能够更加顺畅地操作设备。

按键消抖

按键消抖

一、按键消抖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 按键消抖电路的设计按键消抖一般采用硬件和软件消抖两种方法。

硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。

单片机按键电容消抖电路

单片机按键电容消抖电路

单片机按键电容消抖电路1.引言1.1 概述概述部分的内容:在许多电子设备中,按键电路常常被使用来实现用户与设备之间的交互。

然而,由于按键的物理特性,如机械弹性和触点接触的不稳定性,会导致按键的震荡现象,即按键在按下或释放时会产生多次跳变。

这种跳变会导致单片机误读按键的信号,可能引发系统错误操作或不稳定的现象。

因此,为了保证按键信号的可靠性和稳定性,需要对按键进行消抖处理。

本篇文章将详细介绍单片机按键电容消抖电路的设计和实现原理。

通过在按键电路中引入电容元件,可以达到消抖的效果。

电容元件具有快速充放电的特性,可以有效地过滤掉按键震荡带来的干扰信号,确保单片机正确读取按键状态。

文章将首先介绍单片机按键的工作原理,包括按键的接口电路和输入电平变化的检测方式。

接着,将深入探讨按键消抖的必要性,分析不进行消抖处理所带来的潜在问题。

在这之后,将详细介绍按键电容消抖电路的设计原理,包括电容的连接方式和参数的选择。

最后,将给出经过实际测试的电路实现结果和相关性能指标的评估。

通过本文的阅读,读者将能够了解单片机按键的基本原理和消抖处理的必要性,掌握按键电容消抖电路的设计和实现方法,以及了解该电路的性能表现。

这对于开发单片机应用的工程师和爱好者来说,具有一定的指导意义和实践价值。

文章结构部分的内容是对整篇文章的组织和布局进行描述。

它向读者展示了文章的章节和主题,并指导读者理解和阅读文章的内容。

在本文中,文章结构如下:1. 引言1.1 概述1.2 文章结构1.3 目的2. 正文2.1 单片机按键原理2.2 按键消抖的必要性3. 结论3.1 按键电容消抖电路的设计原理3.2 电路实现与测试结果文章的结构分为引言、正文和结论三个主要部分。

在引言部分,概述简要介绍了单片机按键电容消抖电路的背景和重要性;文章结构部分指出了本文的章节组成和布局,为读者提供了阅读指南;目的阐明了文章的目标和意图。

正文部分主要包括单片机按键原理和按键消抖的必要性。

单片机定时器在按键消抖和键音输出中的应用

单片机定时器在按键消抖和键音输出中的应用

228 •电子技术与软件工程 Electronic Technology & Software Engineering单片机技术• SCM Technology【关键词】单片机 定时器 扫描 溢出键盘输入和键音输出是单片机系统中人机对话的常见部分。

一般情况下,按键按下时易产生抖动干扰,进而使系统误动作,程序员处理此问题时通常会在检测到有键被按下时,加入一个延时,延时过后再检测同一按键是否仍处于被按状态?若是,就判定此键确实被按下,接着就开始执行此键的功能;若不是,就判定为干扰,并忽略延时前的检测结果。

通常情况下,两次检测之间所加入的延时需要约100mS 才能达到比较理想的消抖效果,而CPU 是依用户程序从头到尾扫描执行程序代码,如果在长达100mS 的时间里,CPU 仅仅单片机定时器在按键消抖和键音输出中的应用文/徐连喜完成一次延时的功能,那么此时段内其它任务都将被搁置,这对于那些实时控制要求较高的场所(例如数码管动态扫描显示)是绝对不允许的。

基于实时控制所遇到的另外一个问题就是键音输出问题,当CPU 判定某个键被按下时,通过某个IO 端口输出键音,用户就会有更加贴切的人机对话体验,要让人清晰地听到清脆的键音,声音的频率一般控制在1KHz 左右,而且时间不能太短,约100mS 较适宜,依照前述的用户程序的运行规则,此时若用常规的IO 端口取反、延时、再取反来输出键音,显然不能满足用户程序的实时控制要求。

为此,本文详述了新的思路,巧妙地利用2个定时器分别去控制按键消抖和键音输出,经实物验证,CPU 不仅能轻松处理按键消抖和键音输出,同时还能完成数码管的动态扫描及各个IO 端口的实时控制,取得了理想的控制效果。

1 单片机应用系统硬件框图如图1所示。

2 键盘输入硬件电路如图2所示。

键盘硬件电路,采用4X4矩阵键盘,用8个I/O 口就能得到16个键值,可实现0~9共<<下转229页图1:单片机应用系统硬件框图图2:键盘输入硬件电路图3:键音输出硬件电路图4:矩阵键盘扫描子程序图5:按键消抖(T0中断)子程序 图6:键音(T1中断)子程序SCM Technology •单片机技术Electronic Technology & Software Engineering 电子技术与软件工程• 229【关键词】单片机 智能电子设备 内涵 实践应用1 单片机的内涵20世纪90年代,单片机技术就已经得到了发展,目前该技术的应用臻于成熟,被广泛地应用到人们生产和生活的各个领域之中,并单片机在智能电子设备中的应用文/李菁川且收到了良好的成效。

单片机按键处理方式(一)——典型的按键处理方式

单片机按键处理方式(一)——典型的按键处理方式

单⽚机按键处理⽅式(⼀)——典型的按键处理⽅式前⾔ 按键处理是学习单⽚机的必修课之⼀。

⼀次按键的过程,并⾮是⼀个理想的有⼀定宽度的电平脉冲,⽽是在按下、弹起过程中存在抖动,只有在中间阶段电平信号是稳定的。

⼀次典型的按键过程是酱紫的: 在抖动过程中,电平信号⾼低反复变化,如果你的按键检测是检测下降沿或上升沿或者是⽤外部中断检测按键,都可能在抖动时重复检测到多次按键。

这就是在未消抖的按⼀次键显⽰值加1的程序中,出现按⼀次键显⽰值+2、+3甚⾄加更多的原因。

对于按键消抖,常⽤的有硬件消抖和软件消抖。

本⽂是我个⼈对按键处理的⼀些常见⽅法的总结,由于我本⼈不太懂硬件,所以这⾥只讨论独⽴按键的软件消抖实现。

⽔平有限,如有错误请不吝指正。

硬件环境 本⽂代码均在单⽚机STC90C516RD+、晶振12.0MHz硬件环境下试验通过。

带消抖的简单的按键处理 最简单的消抖处理就是在⾸次检测到电平变化后加⼀个延时,等待抖动停⽌后再次检测电平信号。

这也是⼤多数单⽚机教程讲述的消抖⽅式。

但在实际应⽤中基本不⽤这种⽅式,原因后⾯讲,先看代码://⽅法⼀:带消抖的简单的按键处理#include <reg52.h>#define GPIO_KEY P1 //8个独⽴按键IO⼝#define GPIO_LED P0 //8个LED灯,⽤于显⽰键值unsigned char ScanKey();void DelayXms(unsigned char x);void main(){unsigned char key;GPIO_LED = 0x00; //初始化LEDwhile (1){key = ScanKey(); //读取键值// if (0xff != key) //若有键按下,则更新LED的状态GPIO_LED = ~key; //点亮LED}}unsigned char ScanKey(){unsigned char keyValue = 0xff; //赋初值,0xff表⽰没有键按下GPIO_KEY = 0xff; //给按键IO⼝置位if (0xff != GPIO_KEY) //检查按键IO⼝的电平,如有键按下则不为0xff{DelayXms(15); //延时15ms,滤掉抖动。

单片机按键消抖方式详解

单片机按键消抖方式详解
unsigned char code LedChar[] = { //数码管显示字符转换表 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E };
void delay(); void main(){
程序如下: #include <reg52.h>
sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; sbit KEY1 = P2^4; sbit KEY2 = P2^5; sbit KEY3 = P2^6; sbit KEY4 = P2^7;
KeySta = 1; } else{
//其它情况则说明按键状态尚未稳定,则不对 KeySta 变量值进行更新 } } 这个算法是我们在实际工程中经常使用按键所总结的一个比较好的方法,介绍给大家,
今后都可以用这种方法消抖了。当然,按键消抖也还有其它的方法,程序实现更是多种多样,
大家也可以再多考虑下其它的算法,拓展下思路。
那么消抖操作所需要的延时该怎么处理呢?
举个例子:我们启用一个定时中断,每 2ms 进一次中断,扫描一次按键状态并且存储 起来,连续扫描 8 次后,看看这连续 8 次的按键状态是否是一致的。8 次按键的时间大 概是 16ms,这 16ms 内如果按键状态一直保持一致,那就可以确定现在按键处于稳定的 阶段,而非处于抖动的阶段,如图 8-12。
keybuf = (keybuf<<1) | KEY4; //连续 8 次扫描值都为 0,即 16ms 内都只检测到按下状态时,可认为按键已按下 if (keybuf == 0x00){

单片机按键设计的四个方案详解

单片机按键设计的四个方案详解

单片机按键设计的四个方案详解在单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件、软件设计方面的技巧。

一般的在按键的设计上,一般有四种方案:一是GPIO口直接检测单个按键,如图1.1所示;二是按键较多则使用矩阵键盘,如图1.2所示;三是将按键接到外部中断引脚上,利用按键按下产生的边沿信号进行按键检测,如图1.3所示;四是利用单片机的ADC,在不同的按键按下后,能够使得ADC接口上的电压不同,根据电压的不同,则可以识别按键,如图1.4所示。

在以上四种设计上,各有优点和不足。

第一种是最简单和最基础的,对于单片机初学者很容易理解和使用,但是缺点是,需要在主循环中不断检测按键是否按下,并且需要做消抖处理。

若主循环中某个函数任务占用时间较长,则按键会有不同程度的“失灵”。

第二种,优点是能够在有限的GPIO情况下,扩展尽可能多的按键。

但缺点同上,需要不停检测按键是否按下。

第三种方式是效率最高,不需要循环检测按键是否按下,但是缺点是,需要单片机有足够的外部中断接口以供使用;第四种的优点是,只需要单片机的一个ADC接口,一根线,就能对多个按键进行识别,缺点是按键一旦内部接触不良,则可能按键串位,且按键产生的抖动,会造成一定的识别错误。

在以上的三种常见按键设计的基础上,现在分享我学习和工作中总结的按键方案。

改进一:在原方案一的基础上,加上与门电路,使得任何一个按键按下,都能产生中断,然后在中断里面识别是哪个按键被按下。

因此不需要循环扫描,大大提高了效率。

方案如图1.5所示。

只需要每个按键对应地增加一个二极管,利用二极管的线与特性,可以实现按下任何按键,都能产生中断信号,但是按键之间互不影响。

二极管选用普通整流二极管即可,本人亲测可行。

51单片机按键消抖程序原理

51单片机按键消抖程序原理

51单片机按键消抖程序原理一、引言按键消抖是嵌入式系统编程中常见的问题之一,尤其是在使用51单片机时。

51单片机是一款常用的微控制器,广泛应用于各种嵌入式系统中。

按键作为常见的输入设备,在51单片机应用中经常被使用。

由于按键的机械特性,当按键按下或释放时,会产生机械抖动,给系统带来误操作。

因此,了解并编写按键消抖程序对于保证系统的正常运行至关重要。

二、消抖原理按键消抖,简单来说,就是通过一定的算法,消除按键产生的机械抖动,从而准确识别按键的状态。

其原理主要基于以下两点:1.机械抖动的特点:按键的机械抖动主要表现为按键触点之间的快速开关,产生一系列微小的电信号。

这些信号通常包含真实的按键输入信号和噪声信号。

2.消抖算法:通过分析这些信号,识别出真实的按键输入信号,并忽略噪声信号,从而达到消除机械抖动的目的。

常用的消抖算法有阈值比较法、防抖延时法、防抖滤波法等。

三、消抖程序实现下面以51单片机为例,介绍一种简单的阈值比较法消抖程序实现:```cvoidkey_debounce(intkey_pin){//定义按键引脚intdebounce_time=50;//消抖时间,单位毫秒intthreshold=5;//阈值,可以根据实际情况调整intkey_state=0;//按键状态,初始化为0(未按下)intlast_key_state=0;//上一次的按键状态while(1){//读取按键状态key_state=digitalRead(key_pin);last_key_state=key_state;//判断按键是否按下if(key_state==LOW){//按键按下,开始消抖if(millis()-last_key_state>=debounce_time){//经过一定时间,确定按键状态if(key_state==digitalRead(key_pin)){//检测到真实的按键输入信号//这里可以进行相应的操作,例如点亮LED灯等}else{//检测到噪声信号或其他干扰,忽略}}else{//消抖时间不足,忽略当前状态}}else{//按键释放,忽略当前状态}}}```上述程序中,通过设置一个阈值和消抖时间,来判断按键状态是否发生变化。

详解MCU独立按键消抖,原因、方法统统都有

详解MCU独立按键消抖,原因、方法统统都有

简单的说,进入了电子,不管是学纯模拟,还是学单片机,DSP、ARM等处理器,或者是我们的FPGA,一般没有不用到按键的地方。

按键:人机交互控制,主要用于对系统的控制,信号的释放等。

因此在这里,FPGA上应用的按键消抖动,也不得不讲!一、为什么要消抖动在按键被按下的短暂一瞬间,由于硬件上的抖动,往往会产生几毫秒的抖动,在这时候若采集信号,势必导致误操作,甚至系统崩溃;同样,在释放按键的那一刻,硬件上会相应的产生抖动,会产生同样的后果。

因此,在模拟或者数字电路中,我们要避免在最不稳定的时候采集信号,进行操作。

对此一般产用消抖动的原理。

一般可分为以下几种:(1)延时(2)N次低电平计数(3)低通滤波在数字电路中,一般产用(1)(2)种方法。

后文中将详细介绍。

二、各种消抖动1. 模拟电路按键消抖动对于模拟电路中,一般消抖动用的是电容消抖动或者施密特触发等电路,再次不做具体介绍。

2. 单片机中按键消抖动对于单片机中的按键消抖动,本节Bingo根据自己当年写过的单片机其中的一个代码来讲解,代码如下所示:针对以上代码,消抖动的顺序如下所示:(1)检测到信号(2)延时5ms,消抖动(3)继续检测信号,确认是否被按下a) 是,则开始等待释放b) 否,则返回0,退出(4)延时5ms,消抖动(5)确认,返回按下信号,退出当然在单片机中也可以循环计数来确认是否被按下。

Bingo认为如此,太耗MCU 资源,因此再次不做讲述。

3. FPGA中的按键消抖动对于FPGA中的消抖动,很多教科书上都没有讲述。

但Bingo觉得这个很有必要。

对于信号稳定性以及准确性分析,按键信号必须有一个稳定的脉冲,不然对系统稳定性有很大的干扰。

单片机消除按键抖动的方法

单片机消除按键抖动的方法

单片机消除按键抖动的方法
单片机中,当按键被按下时,可能会出现按键抖动的现象,即按下按键后,按键会不断地重复触发,导致程序的不稳定性等问题。

为了消除按键抖动,可以采取以下方法:
1. 软件消抖法:在程序中通过延时、多次采样等方法,对按键
进行去抖处理。

但这种方法需要占用一定的CPU资源,容易影响程序的稳定性和响应速度。

2. 硬件消抖法:通过外部电路对按键进行去抖处理,如添加 RC 滤波器、加电容等组合电路,可稳定按键的电平信号,避免按键的震动和干扰。

3. 系统延时法:在按键按下后,延时一段时间再读取按键的状态,可消除按键的抖动。

但这种方法需要根据实际情况设置合适的延时时间,否则会影响系统的响应速度。

4. 确认法:在按键按下后,通过程序对按键的状态进行多次确认,只有当确认多次读取的状态一致时,才认为按键的状态是有效的。

这种方法需要设置合适的确认次数和时间,才能达到较好的去抖效果。

总之,消除按键抖动是单片机程序开发中的一个重要问题,需要根据实际情况选择合适的去抖方案,保证程序的稳定性和可靠性。

- 1 -。

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

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

关于单片机按键的抖动与消抖关于单片机按键的抖动与消抖在单片机的程序中,如果涉及到按键,一般都会看到几行注释着消抖的代码。

比如下面这一段:if((KeyV|0xc3)==0xff){//无键按下return 0; } mDelay(10);//延时,去键抖KeyV=P3; if((KeyV|0xc3)==0xff){//无键按下return 0; } 关于其作用与目的,有如下解释:按键在按下时会产生电平的变化,通常是由高电平变为低电平,而且这一过程也不是瞬间完成的,按键按下之后,电平会有一段不稳定变化的时间。

一般情况下,我们的程序读取这个电平变化并做相关的动作。

但由于机械按键的局限性,当系统受到外力而产生抖动或其它动作时,也可能使系统内部产生电平变化(通常这种变化持续的时间非常短),这种现象称之为按键的抖动。

这种抖动显然不是我们期望出现的,一旦程序中没有针对它进行特殊处理,这种隐患很可能导致系统执行我们不希望出现的动作。

进而可能酿成一场悲剧。

避免按键抖动的操作就称之为消抖。

目前,单片机的消抖主要分为软件消抖和硬件消抖。

其中,软件消抖增加软件资源,但不增加硬件成本;硬件消抖反之。

现在普遍采用的是软件消抖的方式。

软件消抖具体的操作思路是:当监听到按键被按下时,不立刻执行相关的操作,而进行一定时间的延时(通常是50ms),之后再次检测按键是否被按下,如果此时按键仍然被按下,则判定按键确实被按下了(因为不论是异常情况导致的抖动还是正常情况下按键被按下产生的电平变化都会在这一段时间内过去,紧接着的电平将会是稳定的),然后进行按键被按下之后所需要的操作,否则判定按键未被按下,继续监听按键状态。

实际上,以上所说的软件消抖的方法在真正的软件中应用的不多,只是在练习的时候使用。

真正的应用上,会在可能产生抖动的那一段时间内等间隔多次监听按键状态(电流状态),等到数次(可以是连续5 次)电流平稳了才确定按键被按下。

按键被放开时采取同样操。

按键消抖

按键消抖

end
else
cnt <= 0; end
always @(posedge clk or negedge nrst) begin
if(nrst == 0)
key_out <= 0;
else if(cnt == TIME_20MS - 1)
key_out <= key_in; endendmodule
方案3
// key down, bounce 19ms
repeat(951) @(negedge clk) key_in = ~key_in;
// last 60ms
repeat(3000) @(negedge clk);
cnt <= 0;
//
end always @(posedge clk or negedge nrst) begin
if(nrst == 0)
key_cnt
<= 0;
else if(key_cnt == 0 && key_in != key_out)
key_cnt <= 1;
else
if(cnt == TIME_20MS - 1)
// clock .key_out(key_out) );
initial begin
clk = 1;
forever #(T/2) clk
= ~clk; end
// reset initial begin
nrst = 1;
@(negedge clk) nrst = 0;
@(negedge clk) nrst
按键消抖
按键去抖:由上图可以看出理想波形与实际波形之间是有区别的,实际波形在按下和释放的瞬间都有抖动的现象,抖动 时间的长短和按键的机械特性有关,一般为5~10ms。通常我们手动按键然后释放,这个动作中稳定闭合的时间超过了 20ms。因此单片机在检测键盘是否按下时都要加上去抖动操作,有专用的去抖动电路,也有专门的去抖动芯片,但通常 我们采用软件延时的方法就可以解决抖动问题。

单片机按键去抖原理

单片机按键去抖原理

单片机按键去抖原理在单片机中,主要有硬件和软件两种方式来实现按键去抖。

硬件去抖的原理是通过电路来实现,常用的电路有RC滤波电路、Schmitt触发器电路和稳压二极管电路。

RC滤波电路是通过在按键信号线路上串联一个电阻和一个电容,来对信号进行滤波。

当按键按下时,电容会从低电平快速充电到高电平,此时电压上升的速度较快。

而当按键释放时,电容会通过电阻缓慢放电,使得电压下降的速度较慢。

通过RC滤波电路,可以将快速变化的按键信号转换为缓慢变化的信号,从而避免了信号抖动。

Schmitt触发器电路是通过将按键信号输入到一个Schmitt触发器中,利用触发器的滞后特性来实现去抖。

Schmitt触发器有两个阈值,即上阈值和下阈值,当输入信号高于上阈值时,输出保持高电平;当输入信号低于下阈值时,输出保持低电平。

只有输入信号在上下阈值之间切换时,输出才会发生变化。

通过使用Schmitt触发器电路,可以使得按键信号在较窄的范围内才触发,从而避免了信号抖动。

稳压二极管电路是通过将按键信号通过一个稳压二极管分流到地上来实现去抖。

稳压二极管具有一定的电流限制特性,可以通过限制按键信号的上升速度,从而达到去抖效果。

当按键按下时,相应的稳压二极管会导通,将信号分流到地上,达到去抖的效果。

除了硬件去抖外,软件去抖也是一种常见的实现方式。

软件去抖的原理是通过在程序中控制按键信号的采样和判断,从而实现去抖。

常用的软件去抖方法有延时法、状态变化法和计数法。

延时法是在按键检测的程序中加入一定的延时,在延时后再次检测按键状态,如果状态保持不变,则判断为有效按键操作。

状态变化法是通过判断按键信号的上升沿和下降沿来确定按键状态的变化,当检测到状态变化时,判断为有效按键操作。

计数法是通过在程序中设置一个计数器来统计按键状态的次数,在一定的计数范围内连续采样到相同的按键状态时,判断为有效按键操作。

软件去抖相比硬件去抖的优点在于不需要额外的硬件电路,通过编写程序即可实现去抖功能。

单片机常用按键电路

单片机常用按键电路

单片机常用按键电路单片机组成的小系统中,有的需要人机交互功能,按键是最常见的输入方式。

最常见的按键电路大致有,一对一的直接连接和动态扫描的矩阵式连接两种。

左右两个电路作用一样,区别是左边CPU的输入端常态为高电位,按下按键时为低电位;右边的常态为低电位,按下按键是高电位。

这样的电路简单直接,一个按键独占一个端口,在按键数量较少端口数量富裕时可以直接使用。

很多场合需要的按键数比较多,要尽量少地占用端口就必须使用矩阵式的按键链接。

如下图:图中将按键按行列矩阵的方式排列,其中的每一行公用一根行线,每一列公用一根列线。

以此图为例,16个按键,按一对一方式连接的话需要16个端口,而按这样的矩阵方式链接只需要8个端口,图中的Px,Py为CPU的IO端口,在本例中可以使用不同的端口也可以使用同一个8位端口。

上拉电阻不是必须,单片机IO 口内部有上拉电路时此处就可省略。

这个电路的工作原理是采用程序扫描的方式检测某个按键状态。

比如将Px口的4位全置为低电平,这时如果没有任何按键按下的话,从Py口读回的4位应全为高,而如果有某一键按下,则对应按下键的那一列的位读回值将为低。

这样就能知道按下键所在的列;接着确定按键所处行,把Py口的输入值作为输出,Px全部置高并读取输入,就能得到按键所在行位置,于是就确定了所按按键的行列位置。

扫描可以有两种实现的方法,一种是全行全列扫描,一种是逐行全列扫描。

上面的例子其实就是全行全列扫描方式,其特点是,一个流程就能知道是否有按键按下,并能确定按下按检测行列值,检测步骤简单迅速。

但作为行列接口的Px,Py 必须是双向的,亦即同时具有输入输出功能,单片机的端口基本都能满足。

换种检测方式,就是先给定行,再检测列。

比如行端口Px每次输出不是全部,而是只有一位输出为低,也就是预先给定了行,那么对应行有按键按下时,Py读回的值就代表按键所在列。

Px口按位逐一输出低,每次读回Py值,这样的处理方式,更贴近扫描的含义。

单片机按键消抖技术及其扩展应用

单片机按键消抖技术及其扩展应用

单片机按键消抖技术及其扩展应用杨伟【摘要】由于机械触点的弹性作用,按键开关存在一个抖动的特性,如果不作处理这个抖动会给系统带来一些不稳定的因素,甚至是错误的结果,为了不产生这种现象就必须采取相应的消抖措施。

本文就消抖技术作相关介绍,并举一实例作为消抖技术扩展应用的说明。

%Due to the flexibility of the role of mechanical contact,button switch are the characteristics of a jitter,if not treated the jitter will bring some unstable factors system,even wrong results,in order not to cause this phenomenon must take corresponding jitter elimination measures.In this paper,the elimination of shaking technology for the relevant introduction,both as an example of an example of the application of the technology to eliminate chattering.【期刊名称】《电子测试》【年(卷),期】2016(000)003【总页数】2页(P96-97)【关键词】按键抖动;消抖;单片机;扩展应用【作者】杨伟【作者单位】浙江诸暨技师学院 312000【正文语种】中文在使用单片机搭建有人机交互的系统时需要用到键盘,通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号切换。

系统对键盘的输入(逻辑0或1)进行准确采样,避免错误输入是非常有必要的。

理想的键盘输入特性如图1所示:按键没有按下时,输入为逻辑1,一旦按下则输入立刻变为逻辑0,松开时输入则立刻变为逻辑1。

按按键_硬件_去抖_电路

按按键_硬件_去抖_电路

参考: 《单片机原理及接口技术》(李朝青)按键电路:常用的非编码键盘,每个键都是一个常开开关电路。

计数器输入脉冲最好不要直接接普通的按键开关,因为记数器的记数速度非常快,按键、触点等接触时会有多次接通和断开的现象。

我们感觉不到,可是记数器却都记录了下来。

例如,虽然只按了1下,记数器可能记了3下。

因此,使用按键的记数电路都会增加单稳态电路避免记数错误。

按键消抖:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号小型如下图。

由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

因而在闭合及断开的瞬间均伴随有一连串的抖动,如下图。

抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。

这是一个很重要的时间参数,在很多场合都要用到。

按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。

键抖动会引起一次按键被误读多次。

为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。

在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。

按键的抖动,可用硬件或软件两种方法。

在键数较少时可用硬件方法消除键抖动。

下图所示的RS触发器为常用的硬件去抖。

图中两个“与非”门构成一个RS触发器。

当按键未按下时,输出为1;当键按下时,输出为0。

此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为0,不会产生抖动的波形。

也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。

这一点通过分析RS触发器的工作过程很容易得到验证。

利用电容的放电延时,采用并联电容法,也可以实现硬件消抖:如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生5ms~10ms 的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用其他的各类触发器,锁存器亦可达到消抖效果。 二、 软件消抖 : 通过软件延时 10ms 达到消除抖动的效果,不加文字赘述。 三、 按键电路 : 独立按键
矩阵按键 译码按键 AD 模拟按键 锁定按键
单片机的按键消抖与几种按键电路
一、 硬件消抖 : 按键防抖电路控制电路 所示利用 RC 积分电路来达成杂波的滤除与波形修整的电路(如图 1 )。 在 S1 ON 的瞬间由于接触弹跳的关系,会使 A 点电压呈现高速的断 续现象,再 S1 OFF 时亦然,详(如图 2 所示),然而由于电容两端电压需由 电压经电阻慢慢充电才会上升,使得 B 点电位缓步上升情形:S1 OFF 时亦 然,电容电压经 R 放电,使 B 点电压缓缓下降。此一变化,经史密特反相 修整后,可得一标准负脉波输出,如波
相关文档
最新文档