3.7 AT89S51单片机控制交通灯周期循环
在AT89S51没有中断的情况下,通过定时器T0的控制作用产生定时作用,把产生的高低电平送P2口控制四组数码管和四组LED。每组数码管含两个七段数码管,选择红色的数码管。每组LED分别含有一个绿管、一个黄管和红管。七段管数码管显示的时间是倒计时,时间固定,在十字路口南北方向的红灯亮60秒的这段时间内东西方向直行绿灯亮的时间是40s的,倒计时到后4秒(南北方向23s至20s)为黄灯亮3秒,是为正在流动的行人一个缓冲时间以更安全的通行,之后东西方向左转绿灯亮,倒计时到最后4s与南北方向一起亮起黄灯。然后换南北方向为直行绿灯倒计时40秒,后三秒为黄灯工作时间,左转绿灯倒计时20s,东西方向红灯亮的时间也是60秒倒计时,中间南北方向黄灯在闪烁时,它也跳为黄灯同时闪烁,如此循环。
3.8 AT89S51单片机驱动LED和驱动七段数码管
发光二极管简称LED,是由电流驱动的发光二极管,有不同颜色和功率。不同的LED工作电压也不同,约在1.5V~3.6V,工作电流一般在0.01~0.03A。LED工作时必须加上适当的限流电阻,限流电阻阻值计算法法如下:
限流电阻阻值=(电源电压-LED工作电压)/LED工作电流
AT89S51单片机驱动七段数码管和驱动LED的方法类似,只要给它加上合适的电流就会发光。可是,数码管不同于LED,不仅需要使它发光,还需要他显示数字。数码管在正常工作的时候,段口和位选[10]都需要送入正确的电平信号,它才能正常工作。本次设计选用共阴极七段数码管。数码管的段口不仅需要驱动数码管送上数据,还需在位上加上对应的高电平或低电平,使段与位之间有
数码管的正常显示,需要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态驱动和动态驱动两种方式。本次设计采用动态驱动显示方式,单片机控制数码管动态显示是单片机比较广泛的一种应用,动态驱动是将所有数码管的8个显示"a, b, c, d, e, f, g, dp"的负极或正极端连在一起,而且每个数码管的公共极为位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出显示码时,数码管都接收到共同的显示码,但具体是哪个数码管会显示,决定于单片机对位选通端的控制,所以只要将需要显示的数码管的位选通控制端打开,该位就显示出字形,没有选通的数码管不会亮。通过分时顺序控制每个数码管的位选端,轮流使各个数码管显示,这就是动态驱动。在顺次显示过程中,每位数码管的点亮时间为1~2ms,因为人的视觉暂留及发光二极管的余辉效应,虽然理论上各位数码管不是同时点亮,但只要有足够快的扫描速度,给人的感觉将是一组稳定的显示数据,没有闪烁感,动态显示的效果和静态显示是差不多的,但动态显示可以节省大量的I/O 端口,功耗更低。本次设计就是采用动态扫描的方法驱动数码管。而且东西方向的数码管并联,LED管并联。南北方向的两组数码管和LED管并联。实现同步工作,同步换相。
AT89S51单片机驱动LED和数码管工作的交通灯仿真图如图6所示。
图6 AT89S51驱动LED和数码管工作的仿真图
4. 软件设计
4.1软件协议
要想保证通信的成功,通信双方必须有一系列的约定,即通信协议,通信双方必须遵从统一的通信协议。PC机与单片机都可发送和接收数据,两者的波特率必须保持一致,在物理实现过程中定位2400Bps,在仿真时都设置为9600Bps。
PC机与多个AT89S51单片机的通信采用单片机串行口的方式3,此时,单片机传输一帧信息共11位:1位起始位、8位数据位、1位程序控制可为“1”或“0”的第九位数据位和1位停止位,其中第9位数据位作为“地址帧”(为“1”时)和“数据帧”(为“0”时)的识别标志位。该位数据在发送端由串行控制寄存器(SCON)的TB8产生,在接收端则自动将该位数据传送到SCON的RB8中,接收端接收完一帧数据后,在满足RI=0和SM2=0(或在SM2=1时,满足RI=0和接收到的第9位数据为1)的条件才能产生接收中断。在此方式下,因第9位数据已做为地址帧和数据帧的识别标志位,所以不能利用其充当奇偶校验位以实现通信数据中的自动检错,这种方法没能发挥出模式3可提供奇偶校验位的优点。鉴于主从式控制结构的实际情况,本此设计采用通信不区别地址帧和数据帧的通信方法,把主站传送的所有信息均作为数据帧,使得第9位数据位可作为奇偶校验位。如下所述为其通信原理: AT89S51智能交通灯控制系统的设计+VB源程序+仿真图(6):http://www.youerw.com/zidonghua/lunwen_502.html