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