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

合集下载

按键消抖电路

按键消抖电路

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

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

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

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

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

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

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

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

按键消抖

按键消抖

一、按键消抖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单片机应用中经常被使用。

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

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

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

其原理主要基于以下两点: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独立按键消抖,原因、方法统统都有

简单的说,进入了电子,不管是学纯模拟,还是学单片机,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 -。

  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 点电压缓缓下降。此一变化,经史密特反相 修整后,可得一标准负脉波输出,如波
相关文档
最新文档