按键消抖
之前我们的按键程序没有考虑抖动的情况。
按键按下的会有尖峰脉冲,常见的两种消抖方式:
第一:硬件消抖
并联一个电容,利用电容的充放电过程消抖。
第二:软件消抖
一般的用法就是一个延时,在不是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.定时器时间到了之后,在定时器回调函数中执行想要的操作。
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |