一般按键都是采用外部中断,如果是在while循环里面进行按键键值判断,那么在判断之前最好加个小延时,进行按键去抖。
像你这个wile循环耗时很长,最适合使用外部中断了,当然如果按键没有接到外部中断引脚,采用定时中断也可以达到一定的效果,但是一定要把定时时间设置的短一些。
这……也太乱了吧?你能从这一大堆的逻辑中理出头绪来,我真佩服死你了。你这长按一处理,后面短按马上也生效了,长按跟没有一样。既然都用上定时器了,就别delay了,那东西只有教材上才会出现,实际应用上很少用到的。用定时器,设个基准时间比如200us一中断,然后设个10ms的按钮扫描时间,就是50个中断,用两个连续的按钮扫描低电平来确定按钮有效性,那个delay就可以88了,教条主义害死人啊。按扭有效后马上对“中断计数”,这个会吧?按钮按下就连加,放开就清0,下次重计数,2秒就是20000次中断,能计到这个数就说明长按有效,没计到这个数就说明短按有效,这样就可以分开处理啦,就这么简单,别老拿定时器开啊关啊。理清思路,别说长按短按,就是双击都可以做出来。因为单片机执行的速度过快,也由于程序的复杂程度使程序走到部分代码阶段会出不去,出不去就一直执行.在你按按键和执行中断的时候刚好走进这个循环里,程序判断当然是进入中断,然后中断完了回来这个循环造成这个循环变死循环了.也就是你中断改变了一些因子使程序原本那个循环的因子突然遭到改变而出不去.然后死循环了.欢迎分享,转载请注明来源:内存溢出
评论列表(0条)