最近琢磨给高达模型加灯,一开始想在淘宝上找一些跑马灯、呼吸灯的成品,但是花样都不是我想要的。
偶尔看到有一家店买C51控制的心形灯。作为野生码农,就决定自己搞搞,用C51来控制花样切换等等。
作为单片机零基础的人,在论坛看了不少范例,借鉴了论坛上
http://www.51hei.com/bbs/dpj-153979-1.html(谢谢该程序的作者)的代码自己写了一个,用了P1和P2两组IO,总共16个灯组(每组等1-4个灯不等),灯的样式有3个花样,各个样式通过按钮(p3.2 int0)切换
花样1:所有灯按顺序渐亮,LED1逐渐点亮,然后LED2逐渐点亮,最终所有灯全亮,耗时大概5、6秒
花样2:所有灯循环呼吸灯,一个循环大概1秒
花样3:所有灯一直全亮
3个样式我都实现了,但是切换按钮有点问题。
如果处于花样1、花样2,按下按钮后不会马上切换,而是要等花样执行完之后才会切换。
后来经过研究、对比,发现是因为花样1和花样2的耗时太长,需要等执行完了再回去判断花样代码才会调整花样。
然后我就在花样1、花样2的每个delay函数前加一个if,来判断是否有按按键,如果有就终止花样重新判断花样代码,并执行相应的花样。最终实现了我要的效果,花样切换很及时。
但是这样的话,就有很多if语句,整个代码看起来很不美光。
请问各位大佬,在主循环或子函数需要执行很多指令或耗时比较长,在执行过程中因为某些情况需要终止当前循环或者函数时,你们是怎么处理的呢?谢谢