单片机按键消抖的方法,硬件软件都可以实现
单片机的按键消抖与几种按键电路
用其他的各类触发器,锁存器亦可达到消抖效果。 二、 软件消抖 : 通过软件延时 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 循环。
单片机按键消抖方式详解
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.硬件电路设计为了能够较好地去抖动按键,我们可以在按键的输入引脚上加一个RC组合电路,以延迟触发信号的上升沿和下降沿,从而消除抖动。
RC组合电路一般由一个电阻R和一个电容C组成,其原理是通过RC的时间常数来控制信号的上升和下降过程。
2.软件设计在单片机程序中,我们需要采取一定的算法来检测按键的真实触发信号,下面是一个简单的按键去抖动的程序设计思路:(1)初始化首先,我们需要对按键的输入引脚进行初始化,配置为输入模式,并设置为上拉电阻模式。
这样可以确保在按键未按下时,输入引脚保持高电平。
(2)读取按键状态通过读取按键的输入引脚状态,来判断当前按键是否处于按下状态。
一般来说,输入引脚为高电平时表示按键未按下,为低电平时表示按键已按下。
(3)去抖动算法当检测到按键状态发生变化时,即从未按下到按下或从按下到未按下,可以认为触发了一次按键操作。
在这个过程中,我们需要使用去抖动算法来过滤掉抖动信号。
常见的去抖动算法有两种:软件延时法和状态延时法。
软件延时法是通过在检测到按键状态发生变化后,延时一段时间,再次读取按键状态来判断是否真正触发了按键操作。
通过调整延时时间,可以达到去抖动的效果。
但是使用软件延时法会占用较多CPU时间,因此在需要很高响应速度的系统中不适用。
状态延时法是通过引入一个状态变量,用来保存按键的状态。
在检测到按键状态发生变化后,将状态置为相反的值,并延时一段时间。
在延时结束后,读取按键状态和状态变量的值,如果相等则认为触发了按键操作,否则不触发。
需要注意的是,为了防止按键的持续震动导致多次触发,我们一般会设置一个最小的按键触发间隔。
即在两次按键操作之间需要间隔一段时间,才能再次触发。
(4)执行按键操作当确认触发了按键操作后,我们可以执行相应的操作,如触发一个中断、改变LED灯的状态等。
通过上述程序设计思路,可以实现按键去抖动的功能,从而得到准确的按键触发信号。
当然,具体的实现还需要根据具体的单片机平台和开发环境来进行调整。
单片机消除按键抖动的方法
单片机消除按键抖动的方法
单片机中,当按键被按下时,可能会出现按键抖动的现象,即按下按键后,按键会不断地重复触发,导致程序的不稳定性等问题。
为了消除按键抖动,可以采取以下方法:
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 次)电流平稳了才确定按键被按下。
按键被放开时采取同样操。
按键消抖的原理
按键消抖的原理按键消抖是指在按键被按下或松开时,因按键触点的弹性以及机械结构原因,导致按键信号在短时间内频繁抖动,从而产生多次触发信号的现象。
为了有效避免按键抖动对系统带来的干扰和误操作,需要进行按键消抖处理。
按键消抖的原理主要包括硬件消抖和软件消抖两种方式。
硬件消抖是通过在按键电路中添加外部元件实现的。
常见的硬件消抖方式包括使用电容、电感或者滤波器等元件,通过延迟、滤波或者稳定电平等方式来消除按键抖动信号。
电容消抖的原理是利用电容的充放电特性,将抖动的信号通过电容进行延时处理,从而产生稳定的按键触发信号。
电感消抖则是利用电感的滤波特性,通过电感对抖动信号进行滤波处理,从而获得稳定的按键信号。
而滤波器消抖则是通过在电路中加入滤波器元件,对抖动信号进行滤波处理,使得按键信号变得稳定可靠。
硬件消抖的优点是简单可靠,但缺点在于需要占用额外的电路资源和成本,且对于信号干扰抑制能力有一定的限制。
软件消抖是通过程序算法来实现的,常见的软件消抖方式包括延时消抖、状态机消抖和计数器消抖等。
延时消抖的原理是在按键按下后通过一个设定的延时时间来判断按键的有效触发,若在延时时间内未出现抖动信号,则判定为有效触发信号。
状态机消抖是通过设定按键的状态机来判断有效触发信号,只有在按键状态经过一定的稳定转换后才判断为有效触发。
计数器消抖则是通过设定一个计数器,在计数器计数达到一定次数后才判断为有效触发信号。
软件消抖的优点是不需要额外的硬件资源,可灵活性高,但缺点在于需要占用系统的处理器资源和对于时间精度的要求较高。
在实际应用中,通常会结合硬件消抖和软件消抖来实现按键的稳定触发。
例如在按键电路中加入电容滤波器来消除抖动信号,同时在系统程序中采用延时消抖或状态机消抖算法来进一步确保按键信号的稳定可靠。
这样既能保证按键信号的稳定触发,又能兼顾系统的资源和成本。
综上所述,按键消抖是通过硬件或者软件手段对按键信号进行处理,消除由按键触点的弹性抖动引起的干扰信号,从而获得稳定的按键触发信号。
按键消抖程序设计在单片机中的运用
按键消抖程序设计在单片机中的运用【摘要】按键开关在电子类的开发者中运用较多,但它却专有一个按键抖动的特性。
由于机械触点的弹性作用,按键开关断开或闭合时不会马上稳定地断开或接通,而是不断的抖动,即不断的闭合、断开。
这一连串的抖动给系统带来一些不稳定的因素,甚至是错误的结果,为了不产生这种现象而需采取相应消抖措施。
【关键词】按键抖动;消抖措施;单片机运用1.按键开关开发单片机系统的人都知道,按键开关共有四个引脚,分别是两个引脚短路作为一端,不分正负极,焊接时只需将短路一端焊接在电路的一个焊盘,将另外一个短路端口焊接在电路的另外一个焊盘即可,即为开关的两端。
在电路设计中或者是软件编写程序过程中如果遇到按键,则需要考虑按键的抖动情况。
因为按键开关是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,不会马上稳定地接通或者断开。
2.按键抖动及影响按键开关抖动时间的长短主要是由按键的机械特性决定的,一般时间为为5ms~10ms。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次,即在按键的过程中被误认为是有多次的断开和闭合,为确保CPU对按键的一次闭合仅作一次处理,所以必须去除键抖动。
在按键闭合稳定时才读取键的状态,并且必须判别到键释放稳定后再作处理。
3.消抖措施为了消除按键抖动及其带来的不利影响,一般可以用以下两种措施。
3.1电路消抖可采用设计硬件电路方法消除按键的抖动。
最常用的就是用RS触发器。
设计原理是:利用两个“与非”门构成一个RS触发器。
当按键未按下时,输出为“1”;当键按下时,输出为“0”。
此时即使按键的机械性能,使按键因弹性抖动而产生瞬时断开,按键不返回原始状态,双稳态电路的状态不会改变,继而输出保持为“0”,这样就不会产生抖动的波形,消除抖动带来的影响。
3.2程序消抖若系统的按键较多,可采用编写程序的方法进行去抖,即软件消抖。
按键消抖
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触发器电路,可以使得按键信号在较窄的范围内才触发,从而避免了信号抖动。
稳压二极管电路是通过将按键信号通过一个稳压二极管分流到地上来实现去抖。
稳压二极管具有一定的电流限制特性,可以通过限制按键信号的上升速度,从而达到去抖效果。
当按键按下时,相应的稳压二极管会导通,将信号分流到地上,达到去抖的效果。
除了硬件去抖外,软件去抖也是一种常见的实现方式。
软件去抖的原理是通过在程序中控制按键信号的采样和判断,从而实现去抖。
常用的软件去抖方法有延时法、状态变化法和计数法。
延时法是在按键检测的程序中加入一定的延时,在延时后再次检测按键状态,如果状态保持不变,则判断为有效按键操作。
状态变化法是通过判断按键信号的上升沿和下降沿来确定按键状态的变化,当检测到状态变化时,判断为有效按键操作。
计数法是通过在程序中设置一个计数器来统计按键状态的次数,在一定的计数范围内连续采样到相同的按键状态时,判断为有效按键操作。
软件去抖相比硬件去抖的优点在于不需要额外的硬件电路,通过编写程序即可实现去抖功能。
51单片机独立按键去抖动程序
if(!key4)
{
P0=0x66;//数码管显示"4"
}
}
}
}
{
P2=0x00;
while(1)
{
if(!key1)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);
if(!key1)
{
P0=0x06;//数码管显示"1"
}
}
if(!key2)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);//去抖动
if(!key2) //检测按键确实按下,进行按键处理
{
P0=0x5B;//数码管显示"2"
//这里可以添加按键按下所需要的操作,如数据加减乘除,蜂鸣器等设备开关
}
}
if(!key3)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);
if(!key3)
{
P0=0x4F;//数码管显示"3"
}
}
if(!key4)
{ //按下相应的按键,数码管显示相应的码值
内容:切换到独立按键模式,通过按键在数码管显示对应的数字
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit key1=P3^0; //定义按键位置
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
传感器应用技术十 按键的抖动与消除
主流程图
定时器中断
是否同键 N 按下? Y
执行相应代码
定时器参数重值
中断返回
中断流程图
总结
单片机使用按键输入时:
必须考虑抖动的影响与消除处理。
借助定时器可以提高延时消抖效率。
Thank s
开始
是否有键 N 按下? Y
延时20ms
是否按键 N 按下? Y
执行相应代码
软件延时消抖流程图
新授 按键消抖方法
2. 软件延时消抖
软件延时消抖程序实现
开始
是按键 N 按下? Y
执行相应代码
软件延时消抖流程图
小结
按键存在抖动; 抖动会引起单片机误触发; 软件延时可以有效消抖。
用定时器定时20ms, 代替主程序软件延时20ms。
思考 解决方法
用定时器延时
开始
是否有键 N 按下? Y
启动定时器
主流程图
定时器中断
是否同键 N 按下? Y
执行相应代码
定时器参数重值
中断返回
中断流程图
思考 解决方法
定时器是独立于cpu
单独计时;
不占用主程序执行时
间,因此执行效率高。
开始
是否有键 N 按下? Y
新授 按键消抖方法
硬件消斗
软件延时消斗
新授 按键消抖方法
1. 硬件消抖
R-S 触发器消斗
积分电路消斗
新授 按键消抖方法
1. 硬件消抖
硬件 开销大
按键多 不适合
应用较少
新授 按键消抖方法
2. 软件延时消抖
不增加硬件成本 软件实现消斗功能
新授 按键消抖方法
2. 软件延时消抖
基于单片机的一种消抖方法及应用
基于单片机的一种消抖方法及应用作者:杨立宏来源:《无线互联科技》2014年第07期摘要:键盘电路是单片机应用中的常用电路,本文给出了一种基于单片机的利用定时器中断进行按键软件消抖的方法,在不改变定时器定时时间的情况下可以实现任意消抖延时时间的设定。
关键词:按键;软件消抖;单片机在微型计算机和工业控制应用领域中,开关是必不可少的输入设备。
本文在实际应用的基础上介绍一种利用单片机定时器产生中断的方法来实现按键的消抖。
特点是节省CPU资源,同时对延时时间可自由控制,而不需要改变定时器的定时时间。
1消抖原理一个按键开关在闭合或者断开时不会马上稳定,均伴随有一连串的抖动,抖动的时间长短由按键的机械特性决定,一般为5ms~10ms。
软件消抖主要采用延时或者中断实现:一种是用延时子程序,首先读取按键的状态为低电平,然后调用延时子程序,执行完延时之后,再次判断此时按键的状态,如果和上次相同则证明被按下,否则被认为是抖动,但此种方法延时时一直占用CPU资源,在多任务的系统中不适合采用此法。
另外一种方法则是用中断的方法,每一次中断读取按键的状态,如果与上次读取的数据不一致则说明当前读取的是前沿抖动数据,将当前的数据保留,等待下次定时器中断,如果当前读取的数据和前次读取的数据相同则说明读取的是稳定状态下的数据,则认为真正有键按下。
本文同样也是采用中断的方法进行消抖。
2按键消抖硬件电路及软件设计单片机有着丰富的定时器资源,此处使用定时器。
实现的方法是:设定定时器定时时间为5ms,定时器定时时间到后,进入中断处理程序,在中断处理程序中判断按键的状态,并预先设定一个字节k[i](初始化为0xff)来存放按键的状态,如果按键被按下则将k[i]的最后一位置为0,同时将k[i]左移一位,再将最后一位置1,等待下次定时满后再判断。
延时时间可以设定为5ms的整数倍。
方便之处在于不改变定时器定时时间的情况下可以实现任意消抖延时时间的设定。
单片机按键去抖动程序设计思路
单片机按键去抖动程序设计思路
1.去抖动原理:按键在按下和松开的瞬间会产生震动,导致按键信号在短时间内出现多次转换,给程序带来困扰。
为了解决这个问题,需要对按键信号进行去抖动处理,即在按键按下和松开时,只记录一次按键状态变化。
2.软件去抖动方法:软件去抖动方法主要通过软件延时来判断按键信号是否稳定。
具体来说,可以通过以下步骤实现软件去抖动:-初始化按键引脚为输入模式,并使能内部上拉电阻;
-设定一个延时时间阈值t,用于判断按键是否稳定;
-读取按键引脚的电平,如果为低电平,说明按键按下;
-进入一个循环,每次循环读取一次按键引脚的电平,并与前一次读取的电平进行比较;
-如果连续读取到的电平与前一次相同,说明按键信号稳定;
-如果连续读取到的电平与前一次不同,则说明按键信号还在抖动,继续读取直到连续读取到的电平与前一次相同;
-当稳定的电平持续时间超过延时时间阈值t时,认为按键信号已稳定,可以进行相应的处理。
3. 硬件去抖动方法:硬件去抖动方法主要通过电路设计来实现。
常见的硬件去抖动电路包括RC滤波电路和Schmitt触发器电路。
其中,RC 滤波电路利用电容和电阻的特性,对按键信号进行平滑处理;Schmitt触发器电路则通过正反馈的方式,将不稳定的信号转换为稳定的信号。
这两种方法可以根据实际需求选择。
总结:
按键去抖动程序设计可以通过软件去抖动和硬件去抖动两种方式实现。
软件去抖动主要通过软件延时判断按键信号是否稳定,而硬件去抖动则通
过电路设计实现。
根据具体的应用场景和需求,可以选择适合的方法来设
计按键去抖动程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机按键消抖的方法,硬件软件都可以实现
不管设计一个什么作品,按键总是少不了的,对于按键你知道那些呢?
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
图1
抖动时间
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒,大家可以用示波器测试一下。
键抖动会引起一次按键被误读多次。
为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。
在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
下面是两种消抖方法:
一、硬件消抖:
按键防抖电路控制电路
所示利用RC 积分电路来达成杂波的滤除与波形修整的电路(如图1 )。
在S1 ON 的瞬间由于接触弹跳的关系,会使A 点电压呈现高速的断续现象,再S1 OFF 时亦然,详(如图2所示),然而由于电容两端电压需由电压经电阻慢慢充电才会上升,使得B 点电位缓步上升情形:S1 OFF 时亦然,电容电压经R 放电,使B 点电压缓缓下降。
此一变化,经史密特反相修整后,可得一标准负脉波输出,如波形图C 点所示。
用其他的各类触发器,锁存器亦可达到消抖效果。
二、软件消抖:。