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

[复制链接]
5378|21
 楼主| xtzjkj 发表于 2013-9-28 01:40 | 显示全部楼层 |阅读模式
flag11是标志位实现其他指令,flag_anjian1是短按的功能,flag_yiwei是长按的功能,Count是定时器0计数的,为什么实现不了长按短按功能,哪里不对吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
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就应该去计算低电平的时间 这样才能判断出长短按键
yicaiwu 发表于 2013-9-29 10:51 | 显示全部楼层
你这按键检测好差啊
yicaiwu 发表于 2013-9-29 10:51 | 显示全部楼层
还是用状态机吧
 楼主| xtzjkj 发表于 2013-9-29 20:16 | 显示全部楼层
hobbye501 发表于 2013-9-28 13:19
那就不对了 你按键是外部中断  比如你的按键平时是高电平 当有低电平了进入中断,这个Count就应该去计算 ...

没有啊,我不是有个While(key_jia==0);判断的啊,如果一直按着就计算时间,因为我中断是下降沿触发,所以定时器不会有影响,最后下面if判断计时的时间啊,本来就是计算低电平的时间,哪里有问题????
hobbye501 发表于 2013-9-30 00:10 | 显示全部楼层
xtzjkj 发表于 2013-9-29 20:16
没有啊,我不是有个While(key_jia==0);判断的啊,如果一直按着就计算时间,因为我中断是下降沿触发,所 ...

那你短按键结束后 有给计数器清零吗?建议每次进入先清零 再算时间
maruce 发表于 2013-9-30 10:45 | 显示全部楼层
你这长按的判断怎么是放在exint 0里做的呢?
应该放在Timer里,长按的时候中断只触发一次,后面怎么可能会有count>=20
m564522634 发表于 2013-9-30 12:31 | 显示全部楼层
按鍵写的不怎么好,这样做会花好多时间。我最不喜欢的就是用中断去检测按键因为按键的抖动会使中断发生几次。虽然通过延时可以解决这个问题但是不符全多任务运行的要求所以一般不用外部中断检测按键
Harvard 发表于 2013-9-30 22:31 | 显示全部楼层
利用状态机吧.
liang5319 发表于 2013-9-30 22:39 | 显示全部楼层
单片机中断你居然这么用,有点无语了。。乱用中断很容易出现问题。。
huaziforever 发表于 2013-10-7 14:19 | 显示全部楼层
首先来讲,在中断里做延时就说明你还没领悟到中断的真正作用;

评论

正确。  发表于 2014-4-13 19:04
jrcsh 发表于 2013-10-7 16:50 | 显示全部楼层
换个方法了。随便来个普通IO 按下去为低, c++

if(ccc>n)
{
a=1;
if(ccc>m)
a=2;
ccc=0;
}
解博 发表于 2013-10-7 21:22 | 显示全部楼层
我 也是刚开始写程序,也都是按键程序处理不好,楼上说的状态机是什么意思,好像听过。 还有实现单按键取反,反正一直写不好,有时能实现功能,但程序的可读性太差
古董 发表于 2013-10-8 13:32 | 显示全部楼层
xtzjkj 发表于 2013-9-28 10:55
Count就是在定时器0的中断处理函数里面++啊,我没贴出来·····

这个时候定时器中断服务程序是无法执行到的---优先级的问题
零度888 发表于 2014-4-12 18:07 | 显示全部楼层
正在头痛这个问题
blust5 发表于 2014-4-13 11:01 | 显示全部楼层
外部中断0优先级要高于定时器0中断,就是说进了外部中断0之后,定时器0中断就进不去了,完成不了计数功能,因此不能达到效果,可以换成普通IO口检测按键电平,或者如果非要用中断的话,可以把定时器0中断的优先级提升一个档次,让它高于外部中断0的优先级。
zyj9490 发表于 2014-4-13 15:57 | 显示全部楼层
还是用状态机比较严格,读端口可以在中断里发生,但处理按键,判断,输出按键值在主循环中处理,一目了然。
lobster_L 发表于 2014-4-13 21:37 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

78

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部