当前位置: 首页 > news >正文

按键消抖方法

按键消抖方法

1、什么是按键抖动

按键抖动指的是在机械按键在按下或释放时由于机械元件的特性,导致开关多次闭合或断开,从而在单片机IO口上检测到电压信号出现抖动的现象。

键通常由弹簧、金属片等物理部件组成,在按下和释放过程中,这些部件可能会受到机械振动或弹性反弹的影响,导致接触不稳定,从而产生抖动。按键抖动的时间一般为5ms到10ms,这段时间内触点会多次通断,如果单片机在这个时间段内检测按键状态,可能会导致误判,即将一次按键操作误判为多次操作,从而引发错误的程序处理。

image-20260211221756185

2、按键消抖原理

采用硬件或软件方法都能消除按键抖动

3、硬件消抖

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

img

4、软件消抖

软件消抖的原理一般是跳过按键抖动状态,读取按键稳定时IO口的电平作为按键状态。

硬件消抖一般用于按键个数很少的情况,毕竟增加电路元件会增加硬件成本。而软件消抖则几乎没有成本变动,因此大多情况都使用软件消抖。

1)延时消抖

延时消抖法,就是在检测到按键按下时延时一段时间(比如10ms)再次读取按键IO的电平,检测两次读取的结果是否相同,相同则认为按键被按下。

unsigned char hal_KeyScan(void)
{  if(SET_KEY == 0){DelayMs(20);if(SET_KEY == 0){ while(!SET_KEY)  //Wait for release{DelayMs(10);}            return SET_KEY_PUSHED;}}return 0;
}

显然,这种方法并不高效,延时会阻塞CPU处理其他事物。同时,如果按键个数比较多,那么延时的时间会非常长,大大降低程序运行效率,不推荐使用这种方法。

2)计数消抖法

计数消抖法,周期执行按键扫描程序在检测到按键变化时备份输入状态,清零计数器并开始计数,直到检测到按键弹起,如果计数值大于某个设定值则认为按键动作有效,否则按键动作无效。

/*
*\scan button port
*/
uint8_t KeyScan()
{static uint8_t back_key_val = 0, long_key_release = 0;static uint16_t check_count = 0;uint8_t current_key_val = 0,key_val = 0,key_bit = 0;current_key_val = input_key();if(current_key_val != NO_KEY_VALID){if(back_key_val != current_key_val){check_count = 0;back_key_val = current_key_val;}check_count++;if((check_count >= 300)&&(long_key_release == 0)){check_count = 301;key_val = back_key_val^NO_KEY_VALID;long_key_release = 1;return key_val;}}else{if(long_key_release != 0)long_key_release = 0;else{if(check_count >= 2){key_val = back_key_val;}}back_key_val = 0;check_count = 0;}return key_val;
}

相对于延时消抖法,计数消抖法的效率明显更高,而且也能适应按键较多的情形,也方便处理长按键的情形,因此比较常用。

http://www.jsqmd.com/news/371463/

相关文章:

  • MySQL 安装配置
  • 手把手教你学Simulink--基于高比例可再生能源渗透的复杂电网建模场景实例:多馈入直流系统中光伏电站与风电场协同运行仿真
  • 从模型到产品:Claude AI原生应用商业化路径
  • 使用 MATLAB/Simulink + Simscape Electrical 构建一个包含风光互补发电系统的模型
  • 数据库系统概论第一章
  • 1169: PIPI倒水
  • 数据库系统概论第二章关系数据库
  • AI原生应用里自然语言处理的核心算法解析
  • 数据库系统概论第三章关系数据库标准语言SQL
  • Eureka在大数据领域的核心作用揭秘
  • 突破查重难关!7大AI降重方案解析
  • 毕业论文AI工具推荐:5个高效选择
  • 击穿膨胀痛点:OpenTeleDB 源码编译与 XStore 引擎极限抗压实录
  • 纠结论文写作?5款AI工具实测排名解析
  • 5个靠谱AI写作网站,解决毕业论文纠结问题
  • 5个高评分AI写作网站,论文效率翻倍
  • 构建之法阅读笔记3
  • 2026年踩了5次坑后,我终于搞懂了降AI率的正确姿势
  • 再讨论一次视频平台接入摄像机要注意的问题
  • C# `async/await` 技术笔记
  • 论文降重指南:7个AI工具实测推荐
  • 降AI率工具怎么用?从上传到出结果手把手教你3步搞定
  • 【易经系列】《蒙卦》六三:勿用取女,见金夫,不有躬,无攸利。
  • 虚拟机工具选择指北
  • Seedance 2.0 完整使用指南:字节最新视频生成模型的两种开通方案
  • 时序数据库选型深度指南:从大数据视角与主流产品对比,聚焦Apache IoTDB
  • 55261
  • Java异常处理深度解析:从原理到最佳实践
  • 所以我放弃了OI
  • STM32_GPIO输入