凡亿专栏 | 单片机去抖是什么意思?单片机按键去抖程序(附源码)
单片机去抖是什么意思?单片机按键去抖程序(附源码)

一般来说,用单片机开发带有键盘输入的电子产品时,总会遇到“键盘按键去抖”现象,那么很多人就好奇了,单片机去抖是什么?单片机怎么按键去抖?今天将为小伙伴们一一解答,感兴趣的话,给我点个小心心~

零基础学单片机,凡亿教育助你学

>>51+STM32单片机系统学习套餐

>>51单片机开发入门实战课程

>>60天STM32开发全能线上特训班

通常而言,单片机的按键是机械弹性开关,当机械触点断开/闭合时,由于机械触点的弹性作用,按键开关在闭合时不会快速稳定地接通;在断开时也不会快速断开。因此在闭合及断开瞬间均伴随有一连串的抖动。简单来说是单片机的按键在正常操作中不能瞬间反应过来正常工作。为了消除这现象产生的不良影响而做出的措施就是单片机去抖。

若不进行“按键去抖”,单片机在接收按键开关按压带来的一连串电平信息,,这种抖动一般在10ms作用,会导致单片机判断错误。

单片机“按键去抖”思路在于:当单片机检测到按键状态变化时,而不是立即相应,是先等待闭合或断开稳定后在进行处理。

常用的单片机去抖方法主要分为硬件去抖和软件去抖。

硬件去抖:

在开关端子上使用电容器绕过高频脉冲序列(由弹跳产生的),使其发送给单片机。

e12142561fba7d88d0c63242dc6556.png

软件去抖:

当引脚上升沿时,进入延迟程序一段时间(比如200-500ms),再次检查引脚是否处于高电平或低电平状态(以确认是否有意按下按钮)。如果完成检查后无影响,处理器将进行按钮按下操作。

//开关状态

#define SWITCH_PRESSED 1

#define SWITCH_BOUNCE 0

//检查Switch状态的函数

int Switch_Debounce(void)

{

int status = SWITCH_BOUNCE;

if(Switch == 0) // 按下开关

{

DebounceDelay(); //Wait time more then bouncing period

if(Switch == 0) // Check the status of switch again

{

status = SWITCH_PRESSED;

}

}

return status ;

}

//Function provides a delay to prevent the bouncing phenomenon

void DebounceDelay(void)

{

int i = 0;

for(i=0; i < DEBOUNCE_VALUE; i++)

}

200-500毫秒的延迟为忽略所有伪上升沿(下降沿)提供了时间。因此避免了因抖动引起的问题。

欲了解更多的单片机知识,可关注凡亿课堂

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论