按键消抖

本文介绍了按键程序中常见的抖动问题及解决方法,包括硬件消抖和软件消抖两种方式,并详细解析了一种基于10ms定时器延时的软件消抖方法,同时介绍了相关的内核函数和定时器概念。

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

之前我们的按键程序没有考虑抖动的情况。

按键按下的会有尖峰脉冲,常见的两种消抖方式:

第一:硬件消抖

并联一个电容,利用电容的充放电过程消抖。

第二:软件消抖

一般的用法就是一个延时,在不是us、ns必争的的场合,延时个几毫秒(一般5-10ms)再读取按键值就可以消除抖动了。

韦老师的方法是在按键中断键值读取之前加了一个10ms的定时器延时。

在按键中断的服务函数中,开启一个10ms的定时器,然后10ms定时器时间到了之后,再去读取按键值。

这里主要学习几个内核函数和几个timer的概念。

上面的HZ是一个宏,HZ定义成多少我们不用关心,只用知道用HZ代表的单位是秒。所以HZ/100就是10ms的时间了。

jiffies是一个全局变量,它代表了内核的时基。

 

 

 

 

时间结构体是一个链表,暂时我只用关心怎么初始化里面的元素,怎么调用可以实现定时器,进阶的待阅读源码。

定时器使用步骤:

1.先定义一个定时器的链表,然后初始化链表init_timer函数,给定时器回调函数赋值buttons_timer.function =XXX,添加定时器add_timer函数

2.需要更改定时器的值调用mod_timer函数

3.定时器时间到了之后,在定时器回调函数中执行想要的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值