OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6291|回复: 3

分享一个按键扫描程序(支持间断,连续,自锁按键以及增量编码器))

[复制链接]

15

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
647
金钱
647
注册时间
2014-4-29
在线时间
299 小时
发表于 2016-7-4 17:27:23 | 显示全部楼层 |阅读模式
大体思路是这样的:
1.每隔一个时间间隔扫描一次按键
2.把去抖动的处理过程和按键识别的部分分开。去抖动的方法是连续n次检测到相同的电平,则可确认按键的电平,这个确认后的电平再传递给按键识别部分来使用。当n=2的时候,就退化成大家熟悉的延时去抖动程序。当然也可以用其他的去抖动方法,比如统计n次并设定一个阈值。总之这里为后面的识别提供各自的电平
3.每个按键有自己独立的模式,间断按键是按下再弹起后响应,连续按键短按时弹起后立即响应,长按时以一定的时间间隔响应,自锁按键是在电平的边沿响应。编码器把AB相中的一相约定为时钟。
4.不支持所有的组合按键。


实际的程序:
1.硬件基于战舰板(如果用楼主提供的代码测试,请务必拔掉液晶屏,因为使用了板上引出的IO口)
2.代码基于freertos,实际上用ucos也没影响,裸奔的程序也能用,在定时器中断里调用扫描按键的程序即可
3.按键的响应直接printf到串口界面里了,使用的时候可以考虑加个按键的队列之类的来同步别的任务。
4.受限于水平,代码有些乱,而且内存占用有点多,注释也比较少,程序只是个参考,大家在工程里面不要贸然这么用。

测试的工程在附件里面

PANEL_v1.0.12 _d.rar

5.47 MB, 下载次数: 1858

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2016-7-4 17:54:26 | 显示全部楼层
感谢分享,下载下来慢慢学习
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-7-4 20:33:32 | 显示全部楼层
牛逼哄哄的
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6505
金钱
6505
注册时间
2018-6-27
在线时间
549 小时
发表于 2021-10-18 10:43:56 | 显示全部楼层
谢谢分享,学习学习。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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