专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函...
2019-12-10 18:27
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
10798
84
85
以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣。矩阵键盘定时器扫描消抖法。感谢CSDN的可爱虎朋友。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
84条回答
彪悍的飞翔
1楼-- · 2019-12-11 10:19
矩阵键盘上加个电容就好了,不用delay
加载中...
0123456789
2楼-- · 2019-12-11 14:22
精彩回答 2 元偷偷看……
加载中...
afeionline
3楼-- · 2019-12-11 18:16
本帖最后由 afeionline 于 2014-7-24 20:56 编辑
从来都不用delay的飘过。定时扫描+状态机最有效,也很方便
加载中...
dongjiren2012
4楼-- · 2019-12-11 21:55
afeionline 发表于 2014-7-24 20:46
从来都不用delay的飘过。定时扫描+状态机最有效,也很方便
来一个定时扫描+状态机的例程呗,我不太懂状态机
加载中...
afeionline
5楼-- · 2019-12-11 23:29
本帖最后由 afeionline 于 2014-7-25 22:53 编辑
好久不写代码了,之前最完整的程序找不到了,只找到了简单的,供参考。
说一下思路吧,这个倒是记得。
先说矩阵扫描的思路,也就是状态机转换。
按键分为未按下,按下一次(不确认按下是否有效,需消抖),按下(有效按下),持续按下,抬起一次(需消抖),抬起(也就是未按下),总共5种有效状态,分别标记为状态0~4,状态转移图如下图。
对绝大多数矩阵键盘来说,只允许同时按下一个按键,如果同时按下多个键,则以扫描到的第一个键为准,这个是前提。
由于人按键的速度是有限的,即使狂按同一个按键,每秒按键次数通常也不超过10次,因此只要在100ms内完成5次完整的矩阵扫描就保证不会有漏检的情况。比如4*4矩阵键盘,5ms扫描一列,20ms刚好扫描完一个状态,100ms可以扫描5次。
定时扫描有两种方式,一种是每隔固定时间在timer中断里直接扫描矩阵键盘的其中一行;另一种是在timer中断里定时打开一个信号量,在主函数while(1)循环中检查信号量,有效则扫描一行。
需要调用键盘的函数只需要检查按键值即可,在有效值范围内则认为按键有效,执行相应操作。
加载中...
dongjiren2012
6楼-- · 2019-12-12 01:46
好的,谢谢了,一会儿研究研究
加载中...
上一页
1
2
3
4
5
6
7
8
下一页
最后一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
从来都不用delay的飘过。定时扫描+状态机最有效,也很方便
来一个定时扫描+状态机的例程呗,我不太懂状态机
好久不写代码了,之前最完整的程序找不到了,只找到了简单的,供参考。
说一下思路吧,这个倒是记得。
先说矩阵扫描的思路,也就是状态机转换。
按键分为未按下,按下一次(不确认按下是否有效,需消抖),按下(有效按下),持续按下,抬起一次(需消抖),抬起(也就是未按下),总共5种有效状态,分别标记为状态0~4,状态转移图如下图。
对绝大多数矩阵键盘来说,只允许同时按下一个按键,如果同时按下多个键,则以扫描到的第一个键为准,这个是前提。
由于人按键的速度是有限的,即使狂按同一个按键,每秒按键次数通常也不超过10次,因此只要在100ms内完成5次完整的矩阵扫描就保证不会有漏检的情况。比如4*4矩阵键盘,5ms扫描一列,20ms刚好扫描完一个状态,100ms可以扫描5次。
定时扫描有两种方式,一种是每隔固定时间在timer中断里直接扫描矩阵键盘的其中一行;另一种是在timer中断里定时打开一个信号量,在主函数while(1)循环中检查信号量,有效则扫描一行。
需要调用键盘的函数只需要检查按键值即可,在有效值范围内则认为按键有效,执行相应操作。
一周热门 更多>