10310|14

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎样实现单片机按键双按、长按识别功能? [复制链接]

我用C51编程设计一个4键小键盘,想让程序判断出按键是否为双击、长按。
在识别双击部分,我想设两次击键的间隔时间为0.5s,但不知道如何设置定时器。

请高手指教,我是新手,请讲解详细一些,万分感谢!

最新回复

顶11楼,那Codehat 说跟不说一个样,不看也罢  详情 回复 发表于 2010-6-17 16:49
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
LZ,0.5S,有这么设置吗?

貌似很难实现啊

我个人想法是让每次击键都产生一个信号发送给C51,然后在做后续处理
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
定时器?在中断中判断?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

4
 
瞎说的,嘿嘿
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
我的意思是设定一个按键双击的时间间隔0.5s,此次按键与上一次按键的时间间隔小于0.5s则判断为双击,大于0.5s则判断为单击。那是不是应该启动一个定时器来对按键释放的时间计时呢?
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
双击应该比0.5秒要短,最好LZ还是弄一个测试程序,让用户自己设定吧

单片机在做这个上要郁闷哈,咱们的键的那个抖动,嘿嘿

好运...
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

7
 
使用状态机。
以下以一个按键A为例:键值为A_Key(每一次收到A_Key表示按键A被按下一次).
假设每50ms扫描一次。

状态           意义
-------------------------------------
Idel  ---- 按键没有按下(初始状态)
KDowm ---- 按键按下
KUp   ---- 按键弹起
-------------------------------------
         ______________________
         |                     |
         |                     |
         v              A_Key  |
       Idel ----> KDowm ----> KUp
                  ^   |
                  |___|
                  A_Key

--------------------------------------
看得懂就看吧,看不懂就算了。。。。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

8
 
使用状态机。
以下以一个按键A为例:键值为A_Key(每一次收到A_Key表示按键A被按下一次).
假设每50ms扫描一次。

状态           意义
-------------------------------------
Idel  ---- 按键没有按下(初始状态)
KDowm ---- 按键按下
KUp   ---- 按键弹起
-------------------------------------
#########______________________
#########|                     |
#########|                     |
#########v              A_Key  |
########Idel ----> KDowm ----> KUp
###################^   |
###################|___|
###################A_Key

--------------------------------------
看得懂就看吧,看不懂就算了。。。。
格式问题。。。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

9
 
使用状态机。
以下以一个按键A为例:键值为A_Key(每一次收到A_Key表示按键A被按下一次).
假设每50ms扫描一次。

状态           意义
-------------------------------------
Idel  ---- 按键没有按下(初始状态)
KDowm ---- 按键按下
KUp   ---- 按键弹起
-------------------------------------
#########______________________
#########|#####################|
#########|#####################|
#########v##############A_Key##|
########Idel ----> KDowm ----> KUp
###################^###|
###################|###|
###################A_Key

--------------------------------------
看得懂就看吧,看不懂就算了。。。。
格式问题,把#号去掉看。。。
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

10
 


  1. 使用状态机。
  2. 以下以一个按键A为例:键值为A_Key(每一次收到A_Key表示按键A被按下一次).
  3. 假设每50ms扫描一次。

  4. 状态           意义
  5. -------------------------------------
  6. Idel  ---- 按键没有按下(初始状态)
  7. KDowm ---- 按键按下
  8. KUp   ---- 按键弹起
  9. -------------------------------------

  10.          ______________________
  11.          |                     |
  12.          v              A_Key  |
  13.         Idel ----> KDowm ----> KUp
  14.                    ^   |
  15.                    |___|
  16.                    A_Key

  17. --------------------------------------
  18. 看得懂就看吧,看不懂就算了。。。。
  19. 格式问题,把#号去掉看。。。
复制代码
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
终于对头了,瀑布汗
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
判断按键抬起,从按下到抬起为一次按键,记录这个状态,计数器开始工作,到检测到下一次按键或者计数超时计数器可以停止计数,认为单次按键

长按就是检测到按键按下开始计数,到额定时间按键如果保持按下状态就认为长按
用状态机来做比较好
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
前几天做了个抗抖  采样N次判断是否稳定
效果还不错,,就是浪费点资源  要一个定时器
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
codehat 辛苦了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 
顶11楼,那Codehat 说跟不说一个样,不看也罢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表