怎么判断按键已经弹起

erwa 2007-08-30 02:26:04
就是我想用一个按钮控制51单片机的一个中断(低电平触法),中断执行完后就根据中断程序去执行其他的程序。但是在这里遇到一个问题:就是我的中断程序很短(几微秒就执行完),我按下按钮的时候瞬间就执行完了。但是由于此时我的按钮还是处于按下状态所以执行完中断程序过后马上又会参生中断。这样就导致了中断的重复执行。如果我的中断程序是把一个数取反的话,这样就会导致我不能确定到底这个数是多少了。
我问了别人,然后自己也想了一下得出了一下几种解决方案,但是我觉得都不好,所以来这里向大家请教:
1.中断程序加一个延时。延时的时间大于我按键的时间。(缺点:效率低)
2.中断用下降沿触发。可能大家刚看到这个问题的时候就想到了这个。对啊!为什么不用下降沿触法呢?我的理由是:按键有抖动,没按一个键就会参生键抖动,也就是有很多下降沿在几毫秒内产生。这样也会重复产生多个中断。(我的中断程序只有几微秒)。不知道这里可不可以用延时来消抖动?好像可以吧。。。但延时了还有下降沿吗?
3:不用中断,用键盘。可同样会有这个问题,如果我第二次键扫描程序是在我的按键没有放开之前来的。那么键扫描程序就会认为我又按下了一个键。当然,也有人说可以加一个判断啊,如果两次键扫描程序得到的键值一样则判断为没有新键按下。但是如果我根据键得到的键值去执行的程序比较长的话那么第二次键扫描程序扫描到的相同键值也许真是我第二次按下的·


可能是我自己吧问题想复杂了,希望哪位用一个比较简单的方法来解决这个问题。
...全文
742 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_guang_wu 2007-09-04
  • 打赏
  • 举报
回复
牺牲一个定时器,再定义全局变量存储键值和按键状态,使用定时中断扫描按键,间隔时间ms级,连续读到n次低电平,认为有按键并处理且标记按键已经处理,需要连续读到m次高电平才清除按键已经处理的标记,才可以继续计数下次按键。
supergold 2007-09-04
  • 打赏
  • 举报
回复
用下降沿触发法,当触发中断是,进入中断处理程序,在中断处理程序开始先关中断,然后隔个几十毫秒再检测按键状态,如果还是处于按下状态则进行相应的操作,否则认为是误触发,不予处理.在中断处理子程序的最后在开中断.这样同时还对消抖进行了软件处理.同时满足了你的要求.
shagua0916 2007-09-02
  • 打赏
  • 举报
回复
你好好看看去抖动的一些文章,无论你的功能就多复杂,总可以实现
erwa 2007-08-31
  • 打赏
  • 举报
回复
sterrys(sterrys) ( ) 信誉:100 2007-8-30 17:11:26 得分: 0



中断产生之后就将中断关掉disable,直到变成高电平之后再enable中断



================================================
怎么知道已经变成了高电平 ?
erwa 2007-08-31
  • 打赏
  • 举报
回复
cilixc() ( ) 信誉:100 2007-08-31 09:00:24 得分: 0


产生低电平中断时,关闭总中断源,把该按键对应IO口的中断改为电平由低到高跳变触发,当按键放开时产生中断,再把中断方式还原即可


====================================================================
没懂你的意思··难道要用两个中断来控制?而且51单片机的中断只有低电平触发或着下降沿触发。接个非门?也不好控制啊··
cilixc 2007-08-31
  • 打赏
  • 举报
回复
产生低电平中断时,关闭总中断源,把该按键对应IO口的中断改为电平由低到高跳变触发,当按键放开时产生中断,再把中断方式还原即可
sterrys 2007-08-30
  • 打赏
  • 举报
回复
中断产生之后就将中断关掉disable,直到变成高电平之后再enable中断
erwa 2007-08-30
  • 打赏
  • 举报
回复
谢谢。我不知道你这个当按键抬起时给key赋值0的这个程序怎么写。而且,对于中断来说,它是不会管你是否在执行死循环的。只有你键是按下的,那么中断程序一执行完它就又会进入中断·
lzm_070320 2007-08-30
  • 打赏
  • 举报
回复
恐怕要浪费点工作效率了!不知道在适当的地方加一个:
while(key==0);
行不行!就是说按键没有抬起程序会停在此处!
仅供参考!

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧