tigeroser 发表于 2014-6-24 08:10:44

两个按键实现长短按、双击、连发组合--

做一个小产品,按用户要求,写的程序
参考了或模仿了马潮老师书上的的按键状态机程序 + 此贴http://www.amobbs.com/thread-3985870-1-1.html
这是调试时的程序,用串口可看见它的基本思想,主要还是状态机
------供初学者参考----同时欢迎高手拍砖
============================================================
以SW键为例:(返回如下信息-----串口可见)
0E---有按下动作8E---按下9E---短按下并抬起4E---长按 2E---连发-----(其它键、组合键也是这样)
AA---快速双击BB----慢速双击(时间也变) CC---类似于Ctrl + s这样的组合

电脑上的慢速双击好像没时间限,只要是连着的两次单击 && 时间间隔 > 双击打开这种操作的时间间隔即可
如重命名慢双击:单击-------等(大于0.5S的时间)------单击
打开快双击:单击------等(小于0.5S的时间)---下一次单击按下即可


xujihu 发表于 2014-6-24 08:38:50

顶一个            

10xjzheng 发表于 2014-6-24 08:39:40

顶一个。。。。。。。。

dlmaowf 发表于 2014-6-24 09:04:39

谢谢分享,学习一下

peter_zj 发表于 2014-6-24 09:06:47

学习了 Thank you!!!!!

机器人天空 发表于 2014-6-24 09:31:00

顶一个{:lol:}

lqzhw 发表于 2014-6-24 12:56:58

怎么下载不了,该附件无法读取

tigeroser 发表于 2014-6-24 14:49:58

什么情况,再传一下,网站最近好像不太好打开

caoxinkafei 发表于 2014-6-24 15:21:16

该附件无法读取呀{:sad:}

tigeroser 发表于 2014-6-24 16:46:47

caoxinkafei 发表于 2014-6-24 15:21
该附件无法读取呀

我试过了 能下载啊 什么情况

caoxinkafei 发表于 2014-6-24 16:54:19

tigeroser 发表于 2014-6-24 16:46
我试过了 能下载啊 什么情况


点击后就这样,是不是设了什么条件

数电menmenchaig 发表于 2014-6-24 16:59:47

多谢分享

tigeroser 发表于 2014-6-24 18:14:53

caoxinkafei 发表于 2014-6-24 16:54
点击后就这样,是不是设了什么条件

能下,最近网站有问题 我看我之前的帖子也要密码

Ilove51andAVR 发表于 2014-6-24 19:01:34

两个键能做到这么多功能,不错嘛,有空帮你验证一下可靠性{:lol:}

tigeroser 发表于 2014-6-24 21:43:13

Ilove51andAVR 发表于 2014-6-24 19:01
两个键能做到这么多功能,不错嘛,有空帮你验证一下可靠性

{:lol:} 灰常感谢,不过
我的按键操作采样过程是:
看一个键的这些动作:按下------消抖------按下------消抖-----抬起。
没有判断按下前的抬起状态。,所以这样的话程序有个误区:发生在组合按下(KEY1 KEY2)后的抬起。
因为同时抬起是不可能的,那么,慢抬起的那个会触发一次短按操作------------符合:按下------消抖------按下------消抖-----抬起


我也没法解决这个,所以在组合按下后加了个3S延时,以跳过两个手指的不可能同时抬起状态

你看这个问题怎么解决

sf49ers 发表于 2014-6-25 09:59:44

tigeroser 发表于 2014-6-24 21:43
灰常感谢,不过
我的按键操作采样过程是:
看一个键的这些动作:按下------消抖------按下------ ...

设个禁止标志,双键按下后forbid=1,两个键都抬起forbid=0
单键处理前先查forbid标志,如为1不处理

闷鱼 发表于 2014-7-9 11:44:35

{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}{:shocked:}

zjsdlt2013 发表于 2014-7-10 19:11:33

谢谢楼主分享。

yayagepei 发表于 2014-7-24 21:56:41

下来看看,谢楼主

busterace 发表于 2014-7-24 23:11:41

MARK 一下,两个按键实现长短按、双击、连发组合

shi_90 发表于 2014-7-25 15:22:27

不错不错!!来个试试!

mmiker 发表于 2014-7-27 09:34:49

附件下载不了?

rockyyangyang 发表于 2014-7-30 09:38:24

mark                     

成就与价值 发表于 2014-7-30 12:49:55

赞一个!@LZ

tigeroser 发表于 2014-7-30 13:13:53

用户表示按键功能没出现什么问题。。。
设按键A和按键B,组合按键A+B(按下A,再按下B即生效)、B+A也不会出现刚开始的问题了。16的想法值得学习。也不会出现一开始的误判
==========================================
看过一些程序的模块,还是那句话,一切从实际出发、具体问题具体分析,理论联系实践。。。我的理论就是一般的状态机思想。总结一下我心目中的状态机------根据信标进行状态切换的机器,状态即任务。信标可以是定时器产生,也可以由当前任务产生,以此来转换下一个任务。

ordinary 发表于 2014-8-15 14:43:46

感谢分享

asong14437546 发表于 2014-8-16 07:31:52

感谢分享{:handshake:}

我是缘哥啊 发表于 2014-8-18 18:47:25

正是想看的必须顶啊

蓝蓝的恋 发表于 2014-9-1 12:54:10

模仿一下先~

nhw1234 发表于 2014-9-1 16:27:15

感谢楼主的了,好好学习了

tigeroser 发表于 2014-9-2 08:56:43

程序有个问题:快速双击、组合按下 后的一次抬起操作是残留下来的,对程序而言是重新扫描的,即可造成:单击、长按等。如A+B组合,B按下后即产生一次组合功能,之后的B抬起,就是一次残留的抬起,这次残留操作对程序而言就是重新扫描了。。。
解决方法-------------快速双击和组合按下都设置一个标志位,来指示当前的操作是不是残留的

用户程序中已解决,回头再上传程序片断

peter_zj 发表于 2014-9-4 09:04:46

非常感谢 学习了!!!!

sos9616 发表于 2015-4-9 16:48:30

谢谢分享!

机器人天空 发表于 2015-4-9 19:13:25

学习一下

a673261839 发表于 2018-11-8 13:55:29


谢谢分享,学习一下

小黑人嘿嘿 发表于 2018-11-9 17:05:19

顶      
页: [1]
查看完整版本: 两个按键实现长短按、双击、连发组合--