0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

按键消抖的软件和硬件方法

CHANBAEK 来源:硬件工程师干货 作者:硬件工程师干货 2023-03-01 10:53 次阅读

1、先看一下按键抖动波形

采用锅仔片式按键测量波形。 按键按下与抬起的部分都出现抖动,大致时间10ms左右。 为了防止按键误按或者重复识别,必须要按键消抖处理。 按键消抖有软件方法和硬件方法。

2、硬件方法:

一般增加对地滤波电容,利用电容两端电压不能突变的特性减少抖动杂波,使波形更加规整。

其它的复杂方法如RS触发器电路一般用在没有软件的场合,这里就不做介绍了。

3、软件方法:采用延时检测的方法错开抖动区域。

代码实现1: 这种方法在主循环内轮询按键状态,查询GPIO状态,这种方法最简单,也最常见,但是会增加主循环的负荷,按键按下时会阻塞主循环,降低主循环实时性。 当然主循环的阻塞是否有影响,根据自己情况判断。

while(1)
{
    if(KeyGpio == 0)
    {
        DelayMs(10);    //延时10ms
        if(KeyGpio == 0)
        {
            //按键处理代码
        }
    }
    //其它代码
}

代码实现2: 按键GPIO初始化为中断方式,按键按下后产生外部中断事件,进入中断处理函数中,延时消抖,最终调用按键处理函数,或者设置标志位去主循环里调用按键处理函数。 这种在中断中延时消抖的方法不少人使用,其性能还不如第一种方法,缺点很明显,中断中延时会导致低优先级中断阻塞,也导致主循环阻塞,实时性更差。

void KeyGpio_IrqHandler(void)
{
    if(KeyGpio == 0)
    {
        //延时10ms
        DelayMs(10);
        if(KeyGpio == 0)
        {
            //按键处理代码
            KeyFunction(); 
        }
    }
    ClearIrqFlag();
}

代码实现3: 按键GPIO初始化为中断方式,按键按下后产生外部中断事件,进入中断处理函数中,不采用延时消抖,而是开启了一个定时器,定时器设定为10ms后产生中断,定时器中断后再次检测按键GPIO,如果仍然是按下状态则调用按键处理函数。 中断中只是开启了定时器,并未阻塞,主循环也没有阻塞,从性能上最优,但是这种方法用到了一个定时器,占用了处理器资源。

void KeyGpio_IrqHandler(void)
{
    if(KeyGpio == 0)
    {
        //未开启定时情况下进入,防止重复开启定时器
        if(isTimerStart() == 0)
        {
              // 设置定时器时间为10ms
            InitTimer(10);
            // 开启定时器
            StartTimer();
        }
    }
    ClearKeyIrqFlag();
}


void Timer_IrqHandler(void)
{
    StopTimer();
    if(KeyGpio == 0)
    {
        //按键处理代码
        KeyFunction(); 
    }
    ClearTimerIrqFlag();
}

以上示例伪代码采用10ms延时,使用时可根据实际情况调整。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 软件
    +关注

    关注

    67

    文章

    4350

    浏览量

    85624
  • 波形
    +关注

    关注

    3

    文章

    344

    浏览量

    31245
  • 触发器
    +关注

    关注

    14

    文章

    1681

    浏览量

    60404
  • GPIO
    +关注

    关注

    16

    文章

    1135

    浏览量

    50578
  • 按键消抖
    +关注

    关注

    2

    文章

    23

    浏览量

    10333
收藏 人收藏

    评论

    相关推荐

    fpga教程之——按键

    电平,这次对按键进行操作则是对FPGA进行输入了。  2. 按键  2.1 按键输入原理  首先,我们得打开EE_FPGA的
    发表于 02-27 11:49

    按键

    请问大家的按键是用什么方法解决的,如普通的按键如何
    发表于 09-26 22:17

    FPGA按键方法

    FPGA按键方法
    发表于 05-01 16:12

    技术分享:明德扬按键的原理和基于fpga的设计

    按键按键可分为硬件
    发表于 08-02 10:38

    软件电路中存在的不足是什么?

    什么是电路?软件电路中存在的不足是什么?按键
    发表于 05-06 07:50

    按键代码方法有哪几种

    按键原理一、首先来回顾一下按键延时按键由于是
    发表于 07-14 06:21

    按键及原理是什么

    浅谈:在设计单片机按键输入的时候,进行按键是防止按键输入被CPU误读多次的必要手段。一、按键
    发表于 07-21 06:02

    MCU按键问题

    按键问题机械按键是必须的,1、延时
    发表于 11-04 06:37

    按键硬件原理

    按键硬件原理:利用电容充放电特性来实现,因为电容为储能元件。它两端的电压不能出现突变,即有一个充放电的过程下降沿触发电路:上升沿触发电路:什么是RC电路?STM8S手册中IO口的逻
    发表于 12-07 12:47

    有什么方法去实现按键

    怎样用软件即程序来实现按键呢?有什么方法去实现按键
    发表于 12-15 07:25

    有哪几种方法可以实现单片机程序的硬件

    大多数单片机程序里,都是使用软件,也就是先触发一次,然后延时5ms再检验一次。软件的好处
    发表于 01-06 06:47

    介绍独立按键方法

    目录按键介绍按键方法按键检测原理C51例程欢迎加QQ及邮件交流
    发表于 01-14 07:49

    按键延时方法和目的分别是什么

    的地方,开发成本高,操作难度大,可移植性差。软件就相对较好些,新手即可操作,延时,并非
    发表于 01-17 06:26

    STM32单片机按键和FPGA按键的相关资料分享

    写在前面:STM32单片机按键和FPGA按键大全按键
    发表于 01-18 06:39

    按键都有哪些处理方式?

    按键都有哪些处理方式除了硬件电路用软件怎么实
    发表于 11-01 07:06