【GD32 开发】机械式按键如何软件消抖

文章介绍了单片机通过检测按键电平变化判断按键状态的基本原理,着重讨论了机械抖动问题以及硬件消抖(使用电容)和软件消抖(延时检测)两种方法。给出了一个使用软件消抖的示例代码片段,用于按键按下后功能执行和松开检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 独立按键原理

单片机通过检测按键按下前后的高低电平变化,来判断按键是否按下。通过程序的控制,就可以实现不同的功能与设置。机械式按键在按下或者释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点稳定下来。抖动时间长短与开关的机械特性有关,一般为 5~10ms。在触点抖动期间检测按键的按下与否,可能会导致判断失误,为了克服机械抖动所产生的影响,必须采取消抖措施,可分为硬件消抖和软件消抖。

2 消抖措施

  1. 硬件消抖:硬件消抖一般会在按键两端并联电容,通过电容的充放电作用将按键按下时的高频振荡吸收掉。
  2. 软件消抖:软件消抖一般是通过延时。当检测到按键按下时,不会立即去检测电平,而是经过短暂的延时之后,再去检测当前引脚的电平。

3 软件消抖示例

可以在第一次检测到按键按下之后,延迟一定的时间,等按键稳定之后再次检测按键按下,即可以判断按键是按下状态。在按键按下之后就可以执行功能,比如点灯。在按键按下之后可以通过检测按键的引脚状态,判断按键是否松开。示例代码如下:

 

void key_scan(void)
{
    if(gpio_input_bit_get(GPIOA,GPIO_PIN_0) == SET) // 检测 WK_UP 按键按下
    {
        /* 延迟消抖 */
        delay_1ms(20);
        if(gpio_input_bit_get(GPIOA,GPIO_PIN_0) == SET) // 再次检测 WK_UP 按键按下
        {
            /* WK_UP 按键按下执行功能 */
            gpio_bit_toggle(GPIOE,GPIO_PIN_3); // LED1 电平状态翻转
            printf("key press!\r\n");
            while(gpio_input_bit_get(GPIOA,GPIO_PIN_0) == SET); // 检测 WK_UP 按键松开
            printf("key release!\r\n");
        }
    }
}

 注意:仅展示关键部分代码块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值