找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于STM32用定时器配合做按键消抖的程序,请大神们看看我写的有啥毛病没,恳请指导

查看数: 2491 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-6-21 08:53

正文摘要:

思路是这样的,通过定时器TIM5,其实哪个定时器都行,5毫秒进入中断一次,然后创建个函数检测IO口的状态,每次进入中断执行一下函数体的变量左移一位,变量声明是char型,5*8=40毫秒来进行消抖,这样不需要Delay这样 ...

回复

ID:929847 发表于 2021-6-21 10:05
谢谢大神们的指导,这个函数最初我是在51单片机上做过单个按键和多个按键的实验,单片机实现的功能可能单一,没与出现多个中断源抢占的情况,可能没发现一些问题,但感觉32的单片机这样做按键消抖有点多余。
ID:592807 发表于 2021-6-21 09:58
黄youhui 发表于 2021-6-21 09:42
好处。
1. 可以进行多个按键测检测,即组合按键检测
2.按键检测函数不会占用太多CPU时间

这里的坏处2解释一下,就是正常的软件延时消抖会在消斗完成后如果是短按的话用while(1)等待按键弹起,确保每个按键效果只触发一次。长按的话才会用楼主那种方法使用标志位,但是哪怕是长按不会在处理函数里面刷新标志位的,毕竟长按1秒会被触发1000/40=25次函数(LED闪烁太快肉眼看不见,可以用串口打印试试)
ID:592807 发表于 2021-6-21 09:42
好处。
1. 可以进行多个按键测检测,即组合按键检测
2.按键检测函数不会占用太多CPU时间

坏处。
1必须确保按键时长大于40ms,且中断不会被其中断打断
2标志位刷新机制不合理,如标志位改变需要40ms,这40ms里面按键标志位被主函数调用多少次?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

ID:517951 发表于 2021-6-21 09:23
好处就是,按键扫描期间,CPU不用死等可以干别的事务,不好的地方需要:占用一个定时器硬件资源来完成扫描动作,延时等待是纯软件方式完成的,各有优点,自己按项目做好规划取舍。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表