关于按键消抖方法—软件消抖

在设计单片机按键输入的时候,进行按键消抖是防止按键输入被CPU误读多次的必要手段。

一、按键消抖方法(软件)

如果按键较多的情况下,常用软件方法消抖

(1)延时消抖(延时函数按键消抖)

检测出键闭合后执行一个延时程序,5~10ms(取决于机械特性)的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正的按下按键。当检测到按键释放后,也要给5~10ms的延时,待后沿抖动消失后才能转入该键的执行程序。

缺点:程序在空跑,会浪费CPU资源、不够精准。

if(PXin(x)==KEY_PRESS)

{

    delay_ms(10);

    if(PXin(x)==KEY_PRESS)

    {

        //按键处理

    }

}

注:如果按键是用中断方式实现的,那就更不能在中断服务函数里面使用延时函数,因为中断服务函数最基本的要求就是快进快出!

(2)定时器消抖(定时按键消抖)

原理:按键采用中断驱动方式,当按键按下以后触发按键中断,在按键中断中开启一个定时器,定时周期为10ms,当定时时间到了以后就会触发定时器中断,最后在定时器中断处理函数中读取按键的值,如果按键值还是按下状态那就表示这是一次有效的按键。

图中 t1 ~ t3 这一段时间就是按键抖动,是需要消除的。设置按键为下降沿触发(由按键的电路决定),因此会在 t1、t2 和 t3 这三个时刻会触发按键中断,每次进入中断处理函数都会重新开器定时器中断,所以会在 t1、t2 和 t3 这三个时刻开器定时器中断。但是 t1 ~ t2 和 t2 ~ t3 这两个时间段是小于我们设置的定时器中断周期(也就是消抖时间,比如 10ms),所以虽然 t1 开启了定时器,但是定时器定时时间还没到 t2 时刻就重置了定时器,最终只有 t3 时刻开启的定时器能完整的完成整个定时周期并触发中断,我们就可以在定时器中断处理函数里面做按键处理了。

优点:节约CPU资源

缺点:消耗一个定时器

相关推荐

  1. 参考——单片机_外部中断_按键

    2024-06-07 06:24:06       11 阅读

最近更新

  1. 数据结构第11节: B树

    2024-06-07 06:24:06       0 阅读
  2. Spring Boot与RSocket的集成

    2024-06-07 06:24:06       0 阅读
  3. 责任链模式

    2024-06-07 06:24:06       0 阅读
  4. docker run/build Dockerfile 修改及完善

    2024-06-07 06:24:06       0 阅读
  5. 基于Gunicorn+Flask+Docker模型高并发部署

    2024-06-07 06:24:06       0 阅读

热门阅读

  1. nginx如何编译安装?

    2024-06-07 06:24:06       10 阅读
  2. 【Android】点击图片获取点击位置在图片中的位置

    2024-06-07 06:24:06       13 阅读
  3. electron录制工具-准备录制mask

    2024-06-07 06:24:06       10 阅读
  4. 一些关于科技的想法

    2024-06-07 06:24:06       8 阅读
  5. 使用docker直接运行不同版本nodejs命令

    2024-06-07 06:24:06       10 阅读
  6. Centos7安装Docker和DockerCompose

    2024-06-07 06:24:06       13 阅读
  7. PostgreSQL的视图pg_stat_database

    2024-06-07 06:24:06       12 阅读
  8. Open MV 人眼识别和瞳孔识别

    2024-06-07 06:24:06       12 阅读
  9. PostgreSQL的视图pg_locks

    2024-06-07 06:24:06       11 阅读
  10. python里装饰器的作用是什么

    2024-06-07 06:24:06       9 阅读