打印

按键长按跟短按的实现问题

[复制链接]
4582|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xtzjkj|  楼主 | 2013-9-28 01:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
flag11是标志位实现其他指令,flag_anjian1是短按的功能,flag_yiwei是长按的功能,Count是定时器0计数的,为什么实现不了长按短按功能,哪里不对吗?

长按短按实现.jpg (54.59 KB )

长按短按实现.jpg

长按短按实现.jpg (54.59 KB )

长按短按实现.jpg

相关帖子

沙发
hobbye501| | 2013-9-28 10:16 | 只看该作者
你的Count是怎么计数的?怎么通过Count的计数实现长短的 这部分没体现出来!

使用特权

评论回复
板凳
xtzjkj|  楼主 | 2013-9-28 10:55 | 只看该作者
hobbye501 发表于 2013-9-28 10:16
你的Count是怎么计数的?怎么通过Count的计数实现长短的 这部分没体现出来! ...

Count就是在定时器0的中断处理函数里面++啊,我没贴出来·····

使用特权

评论回复
地板
hobbye501| | 2013-9-28 13:19 | 只看该作者
xtzjkj 发表于 2013-9-28 10:55
Count就是在定时器0的中断处理函数里面++啊,我没贴出来·····

那就不对了 你按键是外部中断  比如你的按键平时是高电平 当有低电平了进入中断,这个Count就应该去计算低电平的时间 这样才能判断出长短按键

使用特权

评论回复
5
yicaiwu| | 2013-9-29 10:51 | 只看该作者
你这按键检测好差啊

使用特权

评论回复
6
yicaiwu| | 2013-9-29 10:51 | 只看该作者
还是用状态机吧

使用特权

评论回复
7
xtzjkj|  楼主 | 2013-9-29 20:16 | 只看该作者
hobbye501 发表于 2013-9-28 13:19
那就不对了 你按键是外部中断  比如你的按键平时是高电平 当有低电平了进入中断,这个Count就应该去计算 ...

没有啊,我不是有个While(key_jia==0);判断的啊,如果一直按着就计算时间,因为我中断是下降沿触发,所以定时器不会有影响,最后下面if判断计时的时间啊,本来就是计算低电平的时间,哪里有问题????

使用特权

评论回复
8
hobbye501| | 2013-9-30 00:10 | 只看该作者
xtzjkj 发表于 2013-9-29 20:16
没有啊,我不是有个While(key_jia==0);判断的啊,如果一直按着就计算时间,因为我中断是下降沿触发,所 ...

那你短按键结束后 有给计数器清零吗?建议每次进入先清零 再算时间

使用特权

评论回复
9
maruce| | 2013-9-30 10:45 | 只看该作者
你这长按的判断怎么是放在exint 0里做的呢?
应该放在Timer里,长按的时候中断只触发一次,后面怎么可能会有count>=20

使用特权

评论回复
10
m564522634| | 2013-9-30 12:31 | 只看该作者
按鍵写的不怎么好,这样做会花好多时间。我最不喜欢的就是用中断去检测按键因为按键的抖动会使中断发生几次。虽然通过延时可以解决这个问题但是不符全多任务运行的要求所以一般不用外部中断检测按键

使用特权

评论回复
11
Harvard| | 2013-9-30 22:31 | 只看该作者
利用状态机吧.

使用特权

评论回复
12
liang5319| | 2013-9-30 22:39 | 只看该作者
单片机中断你居然这么用,有点无语了。。乱用中断很容易出现问题。。

使用特权

评论回复
13
huaziforever| | 2013-10-7 14:19 | 只看该作者
首先来讲,在中断里做延时就说明你还没领悟到中断的真正作用;

使用特权

评论回复
评论
xmar 2014-4-13 19:04 回复TA
正确。 
14
jrcsh| | 2013-10-7 16:50 | 只看该作者
换个方法了。随便来个普通IO 按下去为低, c++

if(ccc>n)
{
a=1;
if(ccc>m)
a=2;
ccc=0;
}

使用特权

评论回复
15
解博| | 2013-10-7 21:22 | 只看该作者
我 也是刚开始写程序,也都是按键程序处理不好,楼上说的状态机是什么意思,好像听过。 还有实现单按键取反,反正一直写不好,有时能实现功能,但程序的可读性太差

使用特权

评论回复
16
古董| | 2013-10-8 13:32 | 只看该作者
xtzjkj 发表于 2013-9-28 10:55
Count就是在定时器0的中断处理函数里面++啊,我没贴出来·····

这个时候定时器中断服务程序是无法执行到的---优先级的问题

使用特权

评论回复
17
零度888| | 2014-4-12 18:07 | 只看该作者
正在头痛这个问题

使用特权

评论回复
18
blust5| | 2014-4-13 11:01 | 只看该作者
外部中断0优先级要高于定时器0中断,就是说进了外部中断0之后,定时器0中断就进不去了,完成不了计数功能,因此不能达到效果,可以换成普通IO口检测按键电平,或者如果非要用中断的话,可以把定时器0中断的优先级提升一个档次,让它高于外部中断0的优先级。

使用特权

评论回复
19
zyj9490| | 2014-4-13 15:57 | 只看该作者
还是用状态机比较严格,读端口可以在中断里发生,但处理按键,判断,输出按键值在主循环中处理,一目了然。

使用特权

评论回复
20
lobster_L| | 2014-4-13 21:37 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

78

帖子

0

粉丝