本帖最后由 forrest11 于 2012-9-20 20:30 编辑
1. 如果要求是闪烁必须处理,可以延后,类似消息排队处理时,还是比较方便的,方法如下:
用10ms的时间片,每过10ms,各灯计数变量的计时加1,并判断各计数变量值是否等于或超过对应阈值。如果超过,则设置灯的闪烁标志位,然后逐位检测各标志位。标志位如果为1,则闪烁对应灯一下,同时将该灯的标志位置零,计数变量置零。问题即可解决。
2. 和1相比,多了一个按键,由于要求按键后50ms内闪烁,也是比较好处理的。只要将时间片设为1ms即可(如果粗糙点,10ms的时间片应该也是可以的),未按键时的处理和1相同,如果某灯按键按下,则读此按键对应计数变量是否超过50。如果超过,则直接设置灯的闪烁标志位;如果没有超过,则设置此按键对应灯的计数阈值为50。这样又回到了和1相同的处理方式。唯一区别的是:该灯闪烁后,要恢复其阈值为默认阈值。问题也可解决。 |