图3-6 数码管显示模块
3.2.4 按键控制模块
按键控制模块由K1、K2、K3三个按键组成,系统初始为自动控制模式。若按下K2键,则系统由自动控制模式进入手动控制模式,此时交通系统强制南北方向通行,东西方向禁止通行;若按下K3键,则系统有自动控制模式进入手动控制模式,此时交通系统强制东西方向通行,南北方向禁止通行;若按下K1键,则系统由手动控制模式进入自动控制模式。
图3-7 按键控制模块
3.2.5 驱动模块
驱动模块由4个PNP8550、4个240欧电阻及1个10k欧的排阻组成。 数码管的段码端口通过排阻与单片机的P0口相连,此处电阻起到限流作用。而数码管的位选端口与PNP型三极管的射极相连,集电极接电源,为数码管提供足够大的驱动电流,三极管的基极与单片机的P2.0到P2.3相连,通过单片机端口的电位变化控制三极管的导通与截止,从而达到驱动数码管稳定显示的功能
[8]
。
:基于单片机的交通灯设计
图3-8 驱动模块
18
4 软件设计
4.1 主程序流程图
单片机初始化后显示初始数值,首先进入自动控制模式,然后调用键盘扫描函数获取键盘信息,根据按键情况进入不同的的工作模式,从进入各模式的子函数中,最终通过数码管、LED灯将交通信号显示出来。
开始程序初始化设置二极管,数码管显示初始数值调用键盘扫描程序scan_key(),获取键盘信息keybuf=0eYes调用model0()keybuf=0dYes调用model1(0)keybuf=0bYes调用model1(1) 其他T0 0.5ms定时刷新数码显示管 Led以T1 0.5s定时闪烁
图4-1 主流程图
:基于单片机的交通灯设计
4.2子程序流程控制
4.2.1 自动控制模式程序
在自动控制模式下,通过判断工作模式标志位modelflag来判断是保持自动控制模式还是进入人工控制模式。自动控制模式下,数码管开始60秒倒计时显示(从60秒到1秒),LED1、LED3点亮且LED1最后10秒闪烁。如果modelflag为1,则进入人工控制模式。
在model0模式下 modelflag=0YesNomodelflag=0;数码管60s延时显示LED灯点亮且最后10秒闪烁转入model(k)方式 图4-2 自动控制流程图
4.2.2人工控制模式程序
在人工控制模式下,按下K2键或K3键通过判断工作模式标志位modelflag来判断如何保持人工控制状态。
当工作模式标志位modelflag为0时,说明是由自动控制模式转入人工控制模式,再通过判断以前的交通状态来确定当前显示状态:若之前状态和所要求状态相同时,数码管直接显示“9999”,LED灯也直接显示所要求状态;若之前状态和所要求状态不同时,数码管首先显示10秒递减,完成后显示“9999”,LED灯经过延时后,显示所要求状态。
当工作模式标志位modelflag为1时,说明之前工作状态已为人工控制模式。若之前状态与所要求状态不同,则LED灯转变为所要求状态,数码显示管保持
20
“9999”;若之前状态与所要求状态相同,则LED灯保持之前状态,数码显示管仍保持“9999”。
K2或K3按下Yesmodelflag=0Nomodelflag=1(flag=0)&&(dirflag!=k)NoYesirflag=kYesNo LED显示状态方向标志dirflag改变LED保持以前状态关闭时间定时TR1=0;ET1=0显示9999数码管显示10s递减数据 LED闪烁10s
图4-3 人工控制流程图
4.2.3键盘扫描程序
所用三个简单按键作为输入控制端,单片机通过P3口写入全1,然后再判断P3信息是否改变,即判断出是否有键按下。如若有键按下或电路电平抖动,都可能使P3口电位发生变化。因此,为确定是否的确有键按下,要经过一定时间的延时再次判断键值与延时前是否相同。如果相同且不全为1,则断定有确定键按下,否则无键按下。