图3-4所示的模拟交通灯仿真电路中,12只LED分成东西向和南北向两组,各组指示灯均有相向的两只红色、两只黄色与两只绿色的LED,程序运行时模拟了十字形路口交通信号灯的红绿灯切换显示及黄灯闪烁效果。
图3-4 LED模拟交通灯
(一)指示灯操作定义
源程序13~26行分别定义了各指示灯的开、关、闪烁操作,虽然这样编写增加了代码长度,但可以有效提高整个代码的可读性。
(二)指示灯切换程序设计
本例共有4种类型的切换操作,Traffic_Light函数通过switch语句,根据切换操作类型变量Operation_Type(1~4)进入不同的case,分别完成相应显示切换操作,程序结构清晰简洁。
对于所提供的切换程序,要注意到case 1与case 3每执行一次以后,都会递增Operation_Type变量,将执行权交给下一个case,但case 2与case 4就不是这样的,它们内部出现了语句:
所出现的if语句使得这两个case 将分别被执行10次(形成5次相关的闪烁),然后才会改变Operation_Type的值,将执行权交给下一case,或回到最前面的case,这是因为Flash_Count变量未累加到10时,返回语句return将使该case中修改Operation_Type的操作被“提前忽略”。
① 主程序将交通指示灯切换时间设置得较短,这样可在调试的时候快速观察到运行效果,在源程序调试通过以后,重新修改程序,模拟实际应用中的交通指示灯切换效果。
② 观察不同路口的指示灯切换效果,重新设计电路与程序进行仿真。