两个按键实现长短按、双击、连发组合--
做一个小产品,按用户要求,写的程序参考了或模仿了马潮老师书上的的按键状态机程序 + 此贴http://www.amobbs.com/thread-3985870-1-1.html
这是调试时的程序,用串口可看见它的基本思想,主要还是状态机
------供初学者参考----同时欢迎高手拍砖
============================================================
以SW键为例:(返回如下信息-----串口可见)
0E---有按下动作8E---按下9E---短按下并抬起4E---长按 2E---连发-----(其它键、组合键也是这样)
AA---快速双击BB----慢速双击(时间也变) CC---类似于Ctrl + s这样的组合
电脑上的慢速双击好像没时间限,只要是连着的两次单击 && 时间间隔 > 双击打开这种操作的时间间隔即可
如重命名慢双击:单击-------等(大于0.5S的时间)------单击
打开快双击:单击------等(小于0.5S的时间)---下一次单击按下即可
顶一个 顶一个。。。。。。。。 谢谢分享,学习一下 学习了 Thank you!!!!! 顶一个{:lol:} 怎么下载不了,该附件无法读取 什么情况,再传一下,网站最近好像不太好打开 该附件无法读取呀{:sad:} caoxinkafei 发表于 2014-6-24 15:21
该附件无法读取呀
我试过了 能下载啊 什么情况 tigeroser 发表于 2014-6-24 16:46
我试过了 能下载啊 什么情况
点击后就这样,是不是设了什么条件 多谢分享 caoxinkafei 发表于 2014-6-24 16:54
点击后就这样,是不是设了什么条件
能下,最近网站有问题 我看我之前的帖子也要密码 两个键能做到这么多功能,不错嘛,有空帮你验证一下可靠性{:lol:} Ilove51andAVR 发表于 2014-6-24 19:01
两个键能做到这么多功能,不错嘛,有空帮你验证一下可靠性
{:lol:} 灰常感谢,不过
我的按键操作采样过程是:
看一个键的这些动作:按下------消抖------按下------消抖-----抬起。
没有判断按下前的抬起状态。,所以这样的话程序有个误区:发生在组合按下(KEY1 KEY2)后的抬起。
因为同时抬起是不可能的,那么,慢抬起的那个会触发一次短按操作------------符合:按下------消抖------按下------消抖-----抬起
我也没法解决这个,所以在组合按下后加了个3S延时,以跳过两个手指的不可能同时抬起状态
你看这个问题怎么解决 tigeroser 发表于 2014-6-24 21:43
灰常感谢,不过
我的按键操作采样过程是:
看一个键的这些动作:按下------消抖------按下------ ...
设个禁止标志,双键按下后forbid=1,两个键都抬起forbid=0
单键处理前先查forbid标志,如为1不处理 {:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:} 谢谢楼主分享。 下来看看,谢楼主 MARK 一下,两个按键实现长短按、双击、连发组合 不错不错!!来个试试! 附件下载不了? mark 赞一个!@LZ 用户表示按键功能没出现什么问题。。。
设按键A和按键B,组合按键A+B(按下A,再按下B即生效)、B+A也不会出现刚开始的问题了。16的想法值得学习。也不会出现一开始的误判
==========================================
看过一些程序的模块,还是那句话,一切从实际出发、具体问题具体分析,理论联系实践。。。我的理论就是一般的状态机思想。总结一下我心目中的状态机------根据信标进行状态切换的机器,状态即任务。信标可以是定时器产生,也可以由当前任务产生,以此来转换下一个任务。
感谢分享 感谢分享{:handshake:} 正是想看的必须顶啊 模仿一下先~ 感谢楼主的了,好好学习了 程序有个问题:快速双击、组合按下 后的一次抬起操作是残留下来的,对程序而言是重新扫描的,即可造成:单击、长按等。如A+B组合,B按下后即产生一次组合功能,之后的B抬起,就是一次残留的抬起,这次残留操作对程序而言就是重新扫描了。。。
解决方法-------------快速双击和组合按下都设置一个标志位,来指示当前的操作是不是残留的
用户程序中已解决,回头再上传程序片断 非常感谢 学习了!!!! 谢谢分享! 学习一下
谢谢分享,学习一下 顶
页:
[1]