基于AT89S52的交通灯综合实验设计
2013-10-17郝文延
郝文延
(长治医学院生物医学工程系,山西长治 046000)
随着各种车辆的增多,经常遇到交通堵塞问题,作为交通控制主要工具的交通灯,扮演着重要的角色[1],本文设计了一种交通灯控制系统综合实验,该系统包括:主控制器AT89S52、键盘模块、数码管显示模块、LED灯模块等,为使学习能综合练习从输入到输出的完整过程。系统中可采用主控器的外部中断功能、定时中断功能、动态扫描功能等,这些功能放入一个程序中,可使学习者能更深刻地理解它们的实际应用。
1 实验的设计目的
(1)通过学习该实验,掌握单片机并行口传输数据的方法,以控制数码管和发光二极管的亮灭。(2)掌握用动态扫描方法解决多位LED共用一个P口显示的问题。(3)通过单片机程序的编写,熟练掌握计数器/定时器和中断的使用方法。(4)通过系统的硬件设计,掌握驱动芯片的使用及数码管的连接,将所学的电路理论联系到实践中去。
2 硬件设计
2.1 模拟交通灯控制系统框图
系统主要由单片机最小系统、功能键模块、特殊事件处理模块、接口电路、驱动电路及LED显示模块组成。其中,单片机为系统的主控部件,用以控制其他模块协调工作,文中选择AT89S52为主控芯片[2]。LED显示模块用以显示各车道的通行情况及时间(红灯表示该车道禁止通行;绿灯表示该车道允许通行,黄灯为中间过渡时间);驱动电路用以驱动LED和数码管工作;特殊事件处理模块以外部中断方式进入;接口电路则起到各模块间的连接作用,以使整个系统正常工作。模拟交通灯控制系统的硬件框图如图1所示。
2.2 各模块的硬件结构
(1)LED板模块。由于交通实际情况是右转不受红绿灯限制,车辆直行与人行道的直行一致,因此该实验设计每块LED板包含一个两位数码管U1、6个LED灯D1~D6,其中,6个 LED灯排成两行,每行有红(R)、黄(Y)、绿(G)3个灯,上面一行指示车辆和人行的直行(S)通行,下面一行指示车辆的左转(L)通行。6个LED的阴极连接到一个公共段G1上,当G1为低电平,a为高电平时就可以点亮D1;同样,若要点亮D6,只要使G1为低电平,f为高电平即可。
图1 交通灯控制系统的硬件框图
(2)驱动电路。ULN2003是常见的驱动芯片,一片可提供8路驱动信号,两片ULN2003共16路,用于驱动8位数码管及4组2×3LED灯的阴极[3],其中U2为LED灯的阴极驱动芯片,U3为数码管的驱动芯片;8个三极管Q1~Q8组成的共集电极电路用于驱动8位数码管的段及LED灯的阳极。
(3)单片机接口电路。系统中的单片机选择AT89S52芯片,对交通灯的控制主要用其中的定时器完成,一方面要完成对各模块的控制,另一方面是协调好各模块的时序及口线冲突问题。如图1所示,P1为数码管段码和LED灯阳极的控制口,P0和P2分别为数码管和LED灯的位选信号控制口。
(4)按键模块。图1中,在P3口的P3.2~P3.6引脚各装有一个按键K1~K5,其中,K1用于外部中断0发出一单脉冲向CPU申请中断,K2用于外部中断1发出一单脉冲向CPU申请中断进行模式选择,K3~K5是设置倒计时时间的功能键,K3用于数码管的换位,K4用于进行加1操作,K5用于确认操作。
3 软件设计
3.1 工作模式说明
系统分3种工作模式:正常模式、特殊事件模式和时间设置模式[4],并且通过图1中K1、K2按钮可实现模式选择。交通灯的主要状态示意图,如图2所示,南北方向交通灯亮灭顺序及时间长短如图3所示。
图2 交通灯主要状态示意图
图3 南北方向交通灯亮灭顺序及时间长短
(1)正常模式。
状态1 如图2程序开始运行先南北段通行60 s,其中车辆和人行道的直行通行40 s,数码管显示时间40 s,此时南北段直行通行绿灯亮(SG)、左转红灯亮(LR),东西段直行左转红灯都亮60 s,同时南北段和东西段方向的数码管分别从40 s和60 s开始倒计时。
状态2 南北段直行倒计时至最后5 s时,直行绿灯同时黄灯闪烁(SG SY);左转红灯同时黄灯闪烁(LR LY),如图3所示。
状态3 如图2所示,南北段直行倒计时为0时,数码管显示时间从20 s开始倒计时,直行通行红灯亮(SR)、左转绿灯亮(LG),表示禁止车辆和人的直行,允许左转,左转通行20 s,东西段红灯继续倒计时。
状态4 南北段左转倒计时至最后5 s时,直行红灯继续亮(SR),左转绿灯同时黄灯闪烁(LG LY),如图3所示。
状态5 南北段左转倒计时为0时,数码管显示时间从60 s开始倒计时,直行红灯亮(SR)、左转红灯亮(LR),表示禁止南北段的直行和左转。东西段状态与南北段交替,开始允许直行通行40 s后左转通行20 s,再循环至状态1。
(2)特殊事件模式。特殊事件指临时需紧急通行的事件,比如急救车、消防车、警车等。此时,应使东西南北4个方向全亮红灯,并延时10 s,以便特殊事件得到解决。
(3)时间设置模式。如果某路段的时间初始值与该路段的车辆通行状况不符,可按下中断键进入时间设置模式,对该路段各个路口的直行、左转时间长度进行设置。
3.2 程序流程图
软件设计主要用C语言编程,总程序分为3部分:主程序;显示控制、状态处理等子程序;定时、特殊事件和时间设置等中断处理程序[5]。
(1)主程序流程。系统以正常状态下交通信号灯各状态的循环显示为主程序,如图4所示。在主程序中,调用数码管倒计时子程序和中断延时以实现各种交通状态。
图4 主程序流程图
(2)显示控制。数码管采用动态方式显示交通指示灯的计时时间,查询判断是否计满50 ms,记满后需重置计数初值,循环显示20次直至完成定时1 s,倒计时时间减1。流程如图5所示。
图5 显示控制流程图
(3)特殊事件通行控制。发生特殊事件时通行受特殊事件强行通过按键控制,将此按键按下,无论原来信号灯的状态如何,一律强制4个路口红灯点亮,禁止其他车辆通行[6],使特种车放行10 s,其流程如图6所示。
图6 紧急事件处理流程
4 实验结果与分析
设计中学习者首先需要在KeilC51环境下对编写的程序进行编译调试,然后要用Proteus软件对模拟交通灯控制系统进行仿真分析[7],实现系统运行所需的功能,最后可在Protel中画出PCB图,动手制作PCB板并组装完成。
为检验学习者做该交通灯综合实验的学习效果,实验前后对63名学习者关于AT89S52单片机部分软硬件设计知识的掌握情况,进行了填表调查,结果如表1所示。
表1 实验前后学习者对AT89S52单片机软硬件知识掌握情况统计表
实验结果表明,学习者通过做该模拟交通灯综合实验,可以更灵活、有效、全面地掌握单片机软硬件设计。
5 结束语
该模拟交通灯控制系统硬件部分具有电路简单、成本低、可扩展等优点,通过软件部分,控制4块LED板上的数码管倒计时及红、黄、绿二极管的点亮与熄灭,实现基本的交通灯功能,时间设置功能和特殊事件处理等功能。
[1]吴慎将,李党娟.智能交通灯控制器的设计[J].研究与开发,2010,29(11):51-53.
[2]李广弟,朱秀月,冷祖祈.单片机基础[M].3版.北京:航空航天大学出版社,2010.
[3]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.
[4]郭强,刘志峰,张爱平,等.基于STC89C52单片机的智能交通灯控系统设计[J].机电一体化,2008,14(11):85-88.
[5]谭浩强.C程序设计[M].3版.北京:清华大学出版社,2008.
[6]王冬梅,张建秋,路敬裿.基于单片机的交通灯控制系统设计与实现[J].佳木斯大学学报:自然科学版,2009,27(1):42-44.
[7]何翼.智能交通灯控制系统设计与仿真[J].重庆交通大学学报:自然科学版,2010,29(5):763-766.