单片机按键如何消抖

单片机按键如何消抖,第1张

if (key==0)            如果按键按下

for(i=0;i<100;i++):利用延时消除抖动

    if (key==0)            再次判断按键,如果还是按下状态

( 要执行的语句)则执行相关语句

这是常用的软件消抖方法

消抖是指消除按键接触时产生的干扰抖动杂脉冲波。

硬件消抖是通过采用外加零件来消除干扰抖动杂脉冲波,通常采用电容滤波、单稳延时电路等等。

软件消抖是通过采用软件程序的方法来达到消除干扰抖动杂脉冲波,最常见的是软件采用延时再次检测的方法来消抖。

补充:

按键按下时的瞬间,它的两片触片不是“理想”地立即接触的,特别是按键开关用了一段时间后,触片有些氧化和老化,这一点,如果用示波器来观察,就能观察到按键接触时的脉冲变化中附带有许多抖动波。

另,无论采用硬件还是软件方法,消除抖动波只是它主要的功能,它还起到消除干扰的作用。

独立按键的使用,需要注意一些事情,就是在按键的使用中,需要加入按键消抖和松手检测,原因就是在按键被按下的短暂一瞬间,由于硬件上的抖动,往往会产生几毫秒的抖动,在这时候若采集信号,势必导致误 *** 作。

按键消抖的方法有硬件消抖和软件消抖,硬件消抖是在电路中加入一些特定的触发器。

软件消抖则是在代码中加入相应的程序。软件消抖的基本原理是:在检测到有按键按下时,不是立即认定此键已被按下,而是执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍然保持闭合状态电平,若仍然保持,则确认该键真正被按下。

#include "reg51h"

#include "intrinsh" //头文件中含有所需的左移和右移的运算

#define u8 unsigned char

#define u16 unsigned int

sbit led = P1^0; //led灯定义

sbit key = P1^1; //按键位定义

void delay(u16 i) //延时函数 大概1ms

{

u16 m,n;

for(m=0;m

继电器代替按键,消抖方法:

反接一个耐压值高的电容。如50V, 15uF。

因为继电器在断电时,会产生一个很大的扰动脉冲电流,还会有瞬时高压。

所以反接耐高压电容后,会把这个脉冲电流震荡消解掉。

单片机中抖动是按键所用的开关都是机械d性开关,当机械触点断开、闭合时,由于机械触点的d性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动。利用电容的充放电特性来对抖动过程中产生的电压毛刺进行平滑处理,从而实现消抖。

按键稳定闭合时间长短是由 *** 作人员决定的,通常都会在100ms以上,刻意快速按的话能达到40-50ms左右,很难再低了。

抖动时间是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。

当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。按键消抖可分为硬件消抖和软件消抖。

扩展资料

单片机在电子技术中的开发,主要包括CPU开发、程序开发、 存储器开发、计算机开发及C语言程序开发,同时得到开发能够保证单片机在十分复杂的计算机与控制环境中可以正常有序的进行,这就需要相关人员采取一定的措施:

(1)CPU开发。开发单片机中的CPU总线宽度,能够有效完善单片机信息处理功能缓慢的问题,提高信息处理效率与速度,开发改进中央处理器的实际结构,能够做到同时运行2-3个CPU,从而大大提高单片机的整体性能。

(2)程序开发。嵌入式系统的合理应用得到了大力推广,对程序进行开发时要求能够自动执行各种指令,这样可以快速准确地采集外部数据,提高单片机的应用效率。

(3)存储器开发。单片机的发展应着眼于内存,加强对基于传统内存读写功能的新内存的探索,使其既能实现静态读写又能实现动态读写,从而显着提高存储性能。

(4)计算机开发。进一步优化和开发单机片应激即分析,并应用计算机系统,通过连接通信数据,实现数据传递。

其实,消抖与数字钟没有什么关系,与定时器更没有关系。,

消抖是针对按键的,因电子钟中要用按键,用来调时,也要用定时器,所以,你才误把这三者联系在一起了。

按键是金属片机械接触的,所以,在按下的时候,会因为机械抖动,产生多次的接触,本来是只按一次,应该是接触一次的,但实际上是接触很多次,还是未知的。造成的现象就是,本来按一下键,但却好像 按了n 次一样,这就是所谓的抖动。

消抖动就是克服按键的多次接触,保证每次按键只识别出一次接触。

消抖动的 方法就是写程序时,每当判断有按键按下后,先延时一段时间,再判断一次,如果还保证有按键才有效。这样写

if(key==0) //第一次判断按键被按下,key就是按键

{

delay(); //延时

if(key==0) //第二次判断按键被按下

{

//从这开始写按键后程序

while(key==0); //等待按键松开

}

}

以上就是关于单片机按键如何消抖全部的内容,包括:单片机按键如何消抖、硬件消抖和软件消抖区别、使用软硬件结合方法,要求:若有按键压下D1,LED的发光状态反转等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9707219.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存