单片机一键长按与短按按键实现的c程序有问题,实在不知道是哪里有问题,请帮助修改一下,谢谢!

2024-12-27 00:33:15
推荐回答(2个)
回答1:

这……也太乱了吧?你能从这一大堆的逻辑中理出头绪来,我真佩服死你了。你这长按一处理,后面短按马上也生效了,长按跟没有一样。既然都用上定时器了,就别delay了,那东西只有教材上才会出现,实际应用上很少用到的。用定时器,设个基准时间比如200us一中断,然后设个10ms的按钮扫描时间,就是50个中断,用两个连续的按钮扫描低电平来确定按钮有效性,那个delay就可以88了,教条主义害死人啊。按扭有效后马上对“中断计数”,这个会吧?按钮按下就连加,放开就清0,下次重计数,2秒就是20000次中断,能计到这个数就说明长按有效,没计到这个数就说明短按有效,这样就可以分开处理啦,就这么简单,别老拿定时器开啊关啊。理清思路,别说长按短按,就是双击都可以做出来。

回答2:

因为中后不赋初值,所以就由一开始的一毫秒变为6.55毫秒,相应的,按键时间也变了