单片机按键消抖的方法,硬件软件都可以实现

合集下载

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

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

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

按键消除抖动的措施

按键消除抖动的措施

按键消除抖动的措施
按键消除抖动是指在使用电子设备中,当按下按键后可能会出
现的多次触发信号的问题。

为了解决这个问题,可以采取以下措施:
1. 软件滤波,在程序设计中,可以采用软件滤波的方法来消除
按键抖动。

软件滤波可以通过延时、状态机等方式来确保只有真正
的按键按下才会触发相应的操作,而忽略短暂的抖动信号。

2. 硬件滤波,在电路设计中,可以加入电容、电阻等元件来实
现硬件滤波,通过延长按键信号的上升沿或下降沿时间,从而消除
按键抖动带来的干扰。

3. 使用稳定的按键元件,选择质量好、稳定性高的按键元件,
可以减少按键抖动的发生。

4. 金属片设计,在按键设计中,可以添加金属片来增加按键的
稳定性,减少抖动。

5. 硬件消抖器,使用专门的硬件消抖器芯片,这些芯片可以自
动检测和消除按键抖动,提高按键的稳定性。

综上所述,消除按键抖动可以通过软件滤波、硬件滤波、选择稳定的按键元件、金属片设计以及使用硬件消抖器等多种措施来实现。

在实际应用中,可以根据具体情况选择合适的方法或者结合多种方法来解决按键抖动问题。

单片机如何防抖的设置方法

单片机如何防抖的设置方法

单片机如何防抖的设置方法
单片机防抖的设置方法有以下几种:
1. 硬件防抖:通过外部电路来进行防抖,常见的方式是使用RC电路或者电容滤波器来消除按键的抖动。

这种方法简单易行,但需要额外的硬件电路支持。

2. 软件防抖:通过编写软件程序来实现防抖功能。

常见的方法是使用延时函数,在按键按下后延时一段时间再进行处理,如果在延时期间按键状态没有发生变化,则认为按键有效。

这种方法相对简单,但可能会引入一定的延迟。

3. 硬件与软件结合防抖:可以同时使用硬件和软件的方式来实现防抖。

例如,使用硬件电路进行初步的滤波,然后在软件中再进行一次判断,确保按键状态的稳定。

需要注意的是,防抖的设置方法需要根据具体的单片机和应用场景来确定,不同的单片机可能有不同的实现方法。

同时,防抖的设置也需要根据实际需求来调整,过长的延时可能会导致按键响应不灵敏,而过短的延时可能会引入抖动。

因此,在设置防抖时需要进行一定的实验和调试。

单片机按键程序设计

单片机按键程序设计

单片机按键程序设计单片机按键的基本原理其实并不复杂。

通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。

在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。

在实际的按键程序设计中,有多种方式可以实现按键检测。

其中一种常见的方法是查询法。

这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。

以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。

当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。

除了查询法,还有中断法可以用于按键检测。

中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。

```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。

消除键抖动的各种方法

消除键抖动的各种方法

消除键抖动的各种方法作者:刘艳来源:《电脑知识与技术·学术交流》2008年第26期摘要:单片机控制系统中大多使用控制键来实现控制功能。

消除按键瞬间的抖动是设计者必须要考虑的问题。

该文介绍了常用的一些对按键进行去抖动处理的硬件和软件方法,来保证微机系统的正确工作。

关键词:单片机;键处理;去抖动中图分类号:TP334文献标识码:A文章编号:1009-3044(2008)26-1831-03The Ways of Elimination of Key JitterLIU Yan(The Information Department of Ningxia Vocational Technological Institution, Yinchuan 750002, China)Abstract: SCM control system ofen be used control keys to achieve control. Elimination of jitter of the key moment must be consider by the designers. In this paper, some of the commonly used of the hardware and software methods to deal with the jitter of keys are Introducted to ensure that computer systems work correctly.Key words: singlechip; dealing with key; elimination of jitter1 引言键盘是由若干按键组成的开关矩阵,他是单片机最简单的输入设备。

操作员通过键盘输入数据或命令,实现简单的人际对话。

组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

单片机按键去抖

单片机按键去抖

单片机按键去抖
我们首先要清楚为什么要按键去抖。

先看先按键按下的波形图
通过这个图形就很清楚为什么要按键去抖了,要是不去抖的话,当按下按键的时候就会在0~5ms 内出现抖动,相当于在不停地按下按键而就不是只按了一次了。

稳定闭合时间大约是10ms,松手抖动的时间和按下抖动的时间差不多。

去抖的方法有硬件去抖和软件去抖
我们常用牺牲CPU 的时间来软件去抖,就是按下按键后延时5~10ms 时间后再来检查是否有按键按下,松手检测也一样。

硬件去抖的方法如图所示
独立按键的去抖方法很简单,就是在按下和松手后分别加一小段延时再来判断。

例:
sbit key=P1;
........................
.......................
if(!key) //如果有按键按下
{
delay(10); //延时一小段时间
if(!key) //真有按键按下
{。

// 执行按键按下后的操作
}
while(!key); // 松手检测,要是没有松手的话就一直执行while 循环。

单片机按键消抖方式详解

单片机按键消抖方式详解
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所示。

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

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

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

单片机按键消抖的方法,硬件软件都可以实现
不管设计一个什么作品,按键总是少不了的,对于按键你知道那些呢?
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。

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

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

按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒,大家可以用示波器测试一下。

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

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

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

下面是两种消抖方法:
一、硬件消抖:
按键防抖电路控制电路
所示利用RC 积分电路来达成杂波的滤除与波形修整的电路(如图1 )。

在S1 ON 的瞬间由于接触弹跳的关系,会使A 点电压呈现高速的断续现象,再S1 OFF 时亦然,详(如图2所示),然而由于电容两端电压需由电压经电阻慢慢充电才会上升,使得B 点电位缓步上升情形:S1 OFF 时亦然,电容电压经R 放电,使B 点电压缓缓下降。

此一变化,经史密特反相修整后,可得一标准负脉波输出,如波形图C 点所示。

用其他的各类触发器,锁存器亦可达到消抖效果。

二、软件消抖:。

相关文档
最新文档