金牌会员
 
- 积分
- 1181
- 金钱
- 1181
- 注册时间
- 2018-4-13
- 在线时间
- 170 小时
|
说实话,单片机试验使用到组合键的情况确实不多,一般也就需要单个按键来操作,特殊需要使用组合键都是在键盘资源少又需要作比按键数量多的选择操作的时候需要。
这种情况给使用者带来许多不便的地方:体验差,需要记住很多组合才能正确操作。脑补:一边看使用说明一边操作。
所以,如果真需要作多种选择操作,还是需要一块触摸屏。
不过倒不是说这样就没有价值,我也分享下我写的组合按键试验代码。
感谢这些论坛朋友的分享:http://www.openedv.com/forum.php?mod=viewthread&tid=277263。
----------------------------------------------------
我的测试完成和原子教程一样的KEY例程:单独使用按键。
也可以实现:组合多个按键来实现想要的功能。组合按键这里指的是先后按下多个按键,可以有顺序也可以没有顺序。当然,由于没有做过多的设计,按顺序也只能检测最后一个按键是否是指定按键,不能检测超过两个按键的其他两个是否按顺序。比如A_B_C组合只能检测C是最后一个,至于其中的A_B是否先A后B没有检测。
代码只实现了组合按键都按下的要求(就像PC键盘的Ctrl+A),没有实现按顺序分别按下特定键的组合(类似先A释放A,然后B释放B)。
进一步的试验可以实现按顺序分别键入多个键:设计一个键盘缓冲区,对缓冲区进行操作。
-------------------------------------------------
关于防抖处理参考上面给出的参考帖子中我的回复,这里做简单说明。
防抖使用了SysTick实现的自定义定时器,也就是使用SysTick产生脉冲,用这个脉冲做计数脉冲来定时。程序中实现的TimeOn()延时闭合定时器,类似的可以实现TimeOff()延时断开定时器和TimeOnOff()延时闭合和延时断开定时器,甚至于更复杂的定时功能。
防抖使用的是延时闭合定时器TimeOn(),只有稳定的输入才能使定时器定时,出现抖动会复位定时器,这样滤过了抖动干扰。
在组合键检测部分,防抖实现了状态改变抖动:出现状态改变会延时,延时时间内检测值为上次的状态值,只有滤波时间后才使用新的状态值。
KeyComb_Test.zip
(293.49 KB, 下载次数: 76)
|
|