本设计采用动态显示方式。LED动态显示方法:LED动态显示就是利用单片机依次输出每一位数码管的段选码和对应于该位数码管的位选控制信号,一位一位轮流点亮各七段数码管。对每位数码管来说,每隔一段时间点亮一次,如此循环。利用人眼的“视觉暂停”效应,只要每位显示间隔足够短就可以给人以同时显示的感觉。在动态显示方式中,同一时刻,只有一位LED数码管在显示,其他各位是关闭的。在段选码和位选码每送出一次后,应保持1ms左右,这个时间应根据实际情况而定。不能太小,因而发光二极管从导通到发光有一定的延时,导通时间太小,发光太弱人眼无法看清。但也不能太大,因为毕竟要受限于临界闪烁频率,而且此时间越长,占用CPU时间也越多如图4.4所示。
开始[15]
。该系统的时间显示子程序流程图
将显示值分离为个位和十位调用字形表显示十位延时1ms调用字形表显示个位延时1ms结束 图4.4 时间显示子程序流程图
4.5 黄灯闪烁5s子程序
本设计中首先赋5s初值,其中关键的设计是使黄灯持续亮0.5s,再持续灭0.5s的方法。利用T0定时器中断,每中断一次是50ms,并使R4中的数值加1,则当R4=10时,正好是0.5s,再利用循环指令,判断R4是否等于10,若等于则跳出循环;否则反复循环,使黄灯持续亮或灭0.5s,即达到闪烁效果。本系统中的黄灯闪烁5s子程序流程图如图4.5所示。
22
开始赋5s初值调时间显示子程序东西、南北方向黄灯亮黄灯是否亮0.5s?YN东西、南北方向黄灯灭黄灯是否灭0.5s?YNN持续5s?Y结束
图4.5 黄灯闪烁5s子程序流程图
4.6 检测车流量与显示子程序
本子程序中,首先要对断点进行保护,以防止显示车流量时改变原绿灯初始值。当绿灯时间有车辆经过时,车流量计数值加1,当车流量低于或等于99时,双位数码管可以显示,按下S11键显示东西方向车流量,按下S12键显示南北方向车流量;当车流量高于99时,双位数码管无法显示,返回调用处重新计入。本系统的检测车流量与显示子程序流程图如图4.6所示。
23
开始保护断点车流量值自加1Y车流量是否超过99?NN是否显示车流量?Y调时间显示子程序结束
图4.6 检测车流量与显示子程序流程图
4.7 报警子程序
本设计中首先赋报警时间3s初值,每秒钟使其值减1,直到减为0,在其期间并判断红灯倒计时是否完毕,因为倒计时完毕时,黄灯闪烁,不需要再报警;否则启动蜂鸣器报警,警告有车辆或行人闯红灯,这样交警可以采取相应的措施对闯红灯者惩罚。本系统的报警子程序流程图如图4.7所示。
24
开始设置报警时间3s倒计时是否完?NY报警N是否够3s?Y关闭报警器结束
图4.7 报警子程序流程图
4.8 主程序
本设计的十字路口交通灯控制器的主程序流程图如图4.8所示。
25
开始初始化YP3.1=1?NYP1.7=1?N设定绿灯时间初值设定红灯时间初值显示初值显示初值启动T0定时器东西方向红灯倒计时,南北方向绿灯倒计时东西路口红外对管高电平?NY报警3s南北路口红外对管高电平?NNY检测车流量P2.5=0?Y显示车流量N倒计时完毕?Y黄灯闪烁5s东西方向绿灯倒计时,南北方向红灯倒计时南北路口红外对管高电平?NY报警3s东西路口红外对管高电平?NNY检测车流量P2.4=0?Y显示车流量N倒计时完毕?Y黄灯闪烁5s结束
图4.8 交通灯控制器主程序流程图
26