如何消除按键的抖动现象

描述

按键的介绍:

轻触开关是一种电子开关,使用时.轻轻按开关按钮就可使开关接通,当松开手时.开关断开。我们使用的开关如下图:

轻触开关

在一个理想的状态下,我们按下按键就会使得电位状态从低电平编程高电平,高电平编程低电平。

事实上,按键在按下和松开的过程中,会存在一个处于中间值的过程,这个时候会存在一个抖动现象。

轻触开关

为了消除按键的抖动现象,我们需要对这一电路进行一个修改。

对于消抖,我们可以通过两个途径进行消抖

1、硬件消抖:

采用一个RC延时充放电的电路进行消抖。

工作原理:在RC消抖电路中,电阻起到限制电流流动的作用,电容则用来储存电荷。当输入信号发生变化时,电容会通过电阻进行充放电,从而实现对信号的平滑处理。通过合理选择电阻和电容的数值,可以达到最佳的消抖效果。

RC消抖电路的工作方式可以分为两个阶段:充电阶段和放电阶段。

1,充电阶段:当输入信号由低电平变为高电平时,电容开始充电。由于电容的充电时间常数( t=RC),充电过程并不是瞬间完成的,而是需要一定的时间。在这个过程中,电容会逐渐储存电荷,输出信号也会逐渐稳定。当电容充满电荷后,输出信号达到稳定状态。

2.放电阶段:当输入信号由高电平变为低电平时,电容开始放电。放电过程同样需要一定的时间,电容会逐渐释放电荷。在这个过程中,输出信号会逐渐下降,直到达到低电平。放电过程的时间也由RC电路的时间常数决定。

轻触开关

2、软件消抖:

当按键被按下时,通过延时时间来判断按键是否按下(即二次确认按键的状态)来进行消抖

轻触开关

程序编写:

通过一个按键来控制一个灯的启停状态

#include

typedef unsigned char u8;

typedef unsigned int u16;

sbit led=P2^0;

sbit K1=P3^1;

void delay(u16 i) //延时函数

{

while(i--);

}

void key()

{

if(K1==0)

{

delay(1000); //消抖

if(K1==0)

{

led=~led;

}

while(!K1); //判断按键是否松开

}

}

void main()

{

while(1)

{

key();

}

}

现象展示:

1、当我们按下按键时,那么LED灯亮

轻触开关

2、当我们再次按下按键时,LED灯熄灭

轻触开关

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分