一般来说,用单片机开发带有键盘输入的电子产品时,总会遇到“键盘按键去抖”现象,那么很多人就好奇了,单片机去抖是什么?单片机怎么按键去抖?今天将为小伙伴们一一解答,感兴趣的话,给我点个小心心~
零基础学单片机,凡亿教育助你学
通常而言,单片机的按键是机械弹性开关,当机械触点断开/闭合时,由于机械触点的弹性作用,按键开关在闭合时不会快速稳定地接通;在断开时也不会快速断开。因此在闭合及断开瞬间均伴随有一连串的抖动。简单来说是单片机的按键在正常操作中不能瞬间反应过来正常工作。为了消除这现象产生的不良影响而做出的措施就是单片机去抖。
若不进行“按键去抖”,单片机在接收按键开关按压带来的一连串电平信息,,这种抖动一般在10ms作用,会导致单片机判断错误。
单片机“按键去抖”思路在于:当单片机检测到按键状态变化时,而不是立即相应,是先等待闭合或断开稳定后在进行处理。
常用的单片机去抖方法主要分为硬件去抖和软件去抖。
硬件去抖:
在开关端子上使用电容器绕过高频脉冲序列(由弹跳产生的),使其发送给单片机。
软件去抖:
当引脚上升沿时,进入延迟程序一段时间(比如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毫秒的延迟为忽略所有伪上升沿(下降沿)提供了时间。因此避免了因抖动引起的问题。
欲了解更多的单片机知识,可关注凡亿课堂。