dragonFANG 发表于 2015-11-18 22:45:22

51单片机数码管显示时遇到的问题,发现有BUG但不知道怎么做

程序的目的是在按键key按下5秒后,继电器吸合(一个IO口控制三极管来控制继电器的吸合和断开)并且此时数码管开始从000增加到300然后再回到0。现在遇到的问题是:
1、在key按下时,也就是对应delay_ms(5000);这段语句中,如果按键按下没有保持5000ms的话,那么单片机还是会延时5000ms后再判断key键是否为按下的状态。这样就没有达到实时监测按键的效果了。
2、在仿真时还发现在key按下前,数码管显示00。但是在key按下时数码管不亮,在5s后再亮。说明在延时的delay_ms(5000)的5秒里,单片机是不处理display(sec)的函数的。现在我需要的是在一通电时数码管始终都是有显示的,不会出现不亮的现象。PS:初始化时我已经把数码管设定为显示000。

麻烦有空的大师们帮忙看看,这个问题我想了好几天了。我觉得这个弄明白了有助于更加深刻的理解MCU的工作时序问题。

xiaoyigechaos 发表于 2015-11-19 00:07:21

解决这个问题,需要用定时器中断来帮你了。比如设定一个5ms的中断,中断1000次就是你要求的5秒,每次中断都检测按键是否持续按下,一旦按键没到时间就释放了,也就不必再继续中断下去了。此外,数码管刷新也可以放到中断里

dragonFANG 发表于 2015-11-19 08:37:39

xiaoyigechaos 发表于 2015-11-19 00:07
解决这个问题,需要用定时器中断来帮你了。比如设定一个5ms的中断,中断1000次就是你要求的5秒,每次中断都 ...

谢谢!应该可以的。我试试看

zxq_9781 发表于 2015-11-29 19:25:55

用定时器,扫描按键吧,延时搞起来反而麻烦

dragonFANG 发表于 2015-11-29 22:17:31

zxq_9781 发表于 2015-11-29 19:25
用定时器,扫描按键吧,延时搞起来反而麻烦

已经解决了谢谢!!!
页: [1]
查看完整版本: 51单片机数码管显示时遇到的问题,发现有BUG但不知道怎么做