OpenEdv-开源电子网

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

长按键按3s,求助

[复制链接]

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
发表于 2014-9-5 17:04:20 | 显示全部楼层 |阅读模式
5金钱
最近做一个菜单显示,只用一个按键,显示多级菜单

采取的是外部中断检测按键方式,检测到按键有上升沿,则视为按键按下;

现在如果要按键长按 3s 以上才有效,怎么处理按键呢????求大侠指点

最佳答案

查看完整内容[请看2#楼]

简单点,直接在中断里面读IO电平,死循环判断。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-5 17:04:21 | 显示全部楼层
简单点,直接在中断里面读IO电平,死循环判断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-5 17:17:46 | 显示全部楼层
可以加个定时器来计数,在主函数里面扫描就行了。
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-5 17:33:28 | 显示全部楼层
回复【2楼】TinyBoy:
---------------------------------
你的意思是进入外部中断之后,使能定时器?如果计时时间3s以上,判断是否仍有按键按下,然后执行服务函数,关闭定时器中断。

是这个思路么??
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-9-5 17:57:12 | 显示全部楼层
双边沿触发,记录时间差
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2014-9-5 20:24:49 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
我也想知道,求解
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-5 20:28:00 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
回复【4楼】styleno1:
---------------------------------
不算很明白,能详细解释一下不,先谢谢了
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-9-7 14:51:13 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
事后想,原子常规方法比较合适,定时器中断扫描按键状态,记录累计时间,而边沿触发的按键容易受抖动等噪声影响。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-9 08:02:42 | 显示全部楼层
回复【3楼】交流zzk:
---------------------------------
定时器一般情况下都要用的,就是多了一个按键延时变量而已,它在定时器里面只做加运算,你在主函数里面判断并使用它。
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-10 10:02:45 | 显示全部楼层
回复【9楼】TinyBoy:
-----------------------------如果   我需要3s   和  6s  不同的按键状态,怎么处理???
比如,定时器在计时的时候,如果判断6s的按键肯定会经过3s的状态,然后却进入了3s的状态程序。。。。
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-10 10:07:29 | 显示全部楼层
回复【4楼】styleno1:
---------------------------------
回复【2楼】TinyBoy:
---------------------------------
如果   我需要3s   和  6s  不同的按键状态,怎么处理??? 
比如,定时器在计时的时候,如果判断6s的按键肯定会经过3s的状态,然后却进入了3s的状态程序。。。。
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-10 10:10:27 | 显示全部楼层
回复【11楼】交流zzk:
---------------------------------
情况是这样的,看你程序功能如何安排了,或者你弄组合键,或者多击键来区别。
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-10 10:14:00 | 显示全部楼层
回复【12楼】TinyBoy:
---------------------------------
这个项目的要求是这样的,按住按键不松手,  如果3s,则执行对应的操作,比如显示1级菜单,     
                                                              如果按键按下6s以上则进入2级菜单
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-10 10:16:58 | 显示全部楼层
回复【12楼】TinyBoy:
---------------------------------
我的意思也就是说, 现在只能判按下3s的状态。因为假如我本身想按住6s,但是计时器计数到3s的时候,却执行的3s按下的程序。 单个按键,如何实现 3s   6s  两种状态
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-10 10:44:03 | 显示全部楼层
回复【14楼】交流zzk:
---------------------------------
 先不说能不能实现,光是这个项目的要求这样不是很合理,1级菜单和2级菜单应该是在同等条件下都可以进入的,比如在一级菜单下进入2级菜单,或者在2级菜单下进入1级菜单。如果项目一定要求这样,那没办法了,其实你可以使用其他方式来做,比如长按释放之后才动作,算是3S的状态,如果不释放,超过6S,算是6S的状态,也可以把功能做为同一个长按键菜单切换,如果要求没法改,我也没想到什么好的处理方式了。
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-10 10:48:27 | 显示全部楼层
回复【14楼】交流zzk:
---------------------------------
我的建议是,在还有键值可以用的情况下,比如短按,或者短按释放等一些键值,使用这些键值来做,当然,我做项目,发现一切都是可以商量的,如果人家实在不给改,那你也只能这么实现了,具体功能还是看你程序了。
回复

使用道具 举报

60

主题

204

帖子

0

精华

高级会员

Rank: 4

积分
503
金钱
503
注册时间
2014-2-28
在线时间
7 小时
 楼主| 发表于 2014-9-10 10:50:32 | 显示全部楼层
回复【16楼】TinyBoy:
---------------------------------
恩恩,也只能照这个办法来做了。谢谢你的耐心解答
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-9-10 11:15:21 | 显示全部楼层
如TinyBoy所言,按键释放再判定键值种类,楼主想多了。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 15:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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