1摘要随着城市社会经济的发展,城市道路交通供给和需求的矛盾日益突出,并引发很多交通问题。在当代,交通灯控制等很多行业的设备都与计算机密切相关,一个好的交通灯控制系统,将对道路拥挤、违章控制等问题有一定的帮助。这次的设计模拟了交通灯控制系统,实现了数个功能:白天与夜间模式的切换;紧急停止与再启动。本设计以AT89c52单片机为路口控制核心,程序分为主程序、定时器中断服务子程序、倒计时显示子程序、交通灯模拟显示子程序四部分。利用键盘实现对工作模式的控制,用数码显示管显示交通灯的工作周期,软硬件的结合大致实现了真正交通灯的功能,成功模拟出交通管制系统,这次设计是单片机知识的应用实例,仅单片机方面知识是不够的,还要根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善,结合理论知识和实际操作,充分发挥个人和团队能力,才能完成设计,提高我们利用已学知识分析和解决问题的能力,使我们得到充分锻炼。在实验板上制作了基于单片机的交通灯控制系统样机,对硬件和软件部分分别进行了调试,再进行了软硬件联调,得到的交通灯控制系统样机实物,可圆满地完成毕业设计任务书所要求的功能。关键词:交通灯模拟,工作模式控制,单片机东西向南北向一.电路总体设计与元件介绍1.1交通灯控制设计要求1.系统功能:(1)在LED数码管上显示倒计时秒的时间。(2)采用LED模拟信号灯,信号灯分东西、南北二组,分别有“红”“黄”“绿”三种颜色。其工作状态由单片机程序控制,“启动”、“停止”按钮分别控制信号灯的启动和停止。“白天/黑夜”开关控制信号灯白天/黑夜转换。按下“启动”按钮开始工作,按下“停止”按钮停止工作,“白天/黑夜”开关按下闭合时为黑夜工作状态,这时只有黄灯闪烁,断开时按时序控制图工作。2.系统硬件电路设计(1)单片机采用MCS51系列(2)键盘为4×4行列式键盘,按键设有启动、停止、白天、黑夜功能键。(3)控制时序如下图所示。1.2总体设计整个设计以AT89c52芯片为核心,由键盘控制电路,复位、晶振电路,数码管显示电路,LED电路组成。如下电路结构框图所示:绿1黄1红1绿2黄2红220S6S40S6SAT89c52芯片复位、晶振电路键盘控制电路数码管显示电路LED电路1.3MSC-51芯片简介MCS-51单片机内部结构【1】图2单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,(图3所示)现在我们分别加以说明:图3·中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。·数据存储器(RAM)51单片机内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。·程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。·定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。·并行输入输出(I/O)口:51单片机共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。1.4AT89c521.AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。2.AT89C52为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。主要管脚有:XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义。(图4:AT89c52实物图,图5:AT89c52管脚定义图)【2】图4图51.574ls244(如图6所示)【3】1.74LS244为3态8位缓冲器,一般用作总线驱动器。74LS244没有锁存的功能。其中I0~I7为输入端,O0~O7为输出端,OE1,OE2为三态端,低电平有效。图62.74Ls244真值表输入输出!GXTLHHLLLHXZH=高电平,L=低电平,X=不定,Z=高阻态1.6protel99se主要功能介绍Protel99SE共分5个模块,分别是原理图设计、PCB设计(包含信号完整性分析)、自动布线器、原理图混合信号仿真、PLD设计。以下介绍一些Protel99SE的部分最新功能:◆可生成30多种格式的电气连接网络表;◆强大的全局编辑功能;◆在原理图中选择一级器件,PCB中同样的器件也将被选中;◆同时运行原理图和PCB,在打开的原理图和PCB图间允许双向交叉查找元器件、引脚、网络◆既可以进行正向注释元器件标号(由原理图到PCB),也可以进行反向注释(由PCB到原理图),以保持电气原理图和PCB在设计上的一致性。在本设计中,主要使用protel99se来绘制电路原理图和进行PCB板的布线。1.7设计安排1.了解各芯片工作特性,根据设计要求,绘制电路原理图。2.PCB布线。3.印板,腐蚀,电路检查。4.程序设计。5.仿真调试。6.程序烧写,脱机调试。二单元电路模块设计2.1复位电路【4】复位方式有多种,本设计采用了传统的上电复位,接线图如图7所示。电阻采用10KΩ电阻以及10uf电容产生复位信号。其充电时间10*103*10*-6=100ms,远大于两个机器周期。图72.2晶振电路晶振电路原理图如图8:选取原则:传统做法,但是能够满足设计需要的最简单使用的做法。电容选取30PF,晶振频率为12MHz。图880512.3LED数码显示电路在单片机应用系统中,数码管显示常用两种方法:静态显示和动态扫描显示。本设计使用动态扫描显示的方法。所谓动态扫描显示即是利用人的视觉残留让每位LED轮流闪烁令用户产生连续显示错觉的方法实现的显示。P1口输出各位需要显示的数码到74LS244锁存。由P2口的第5到第8位确认显示的位。其电路图如图9所示。图9本设计采用共阴极LED数码管,其字型码如表2-1所示。数据位P07P06P05P04P03P02P01P00笔段位DPGFEDCBA字形码0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FH全灭0000000000H表2-1:共阴极LED数码管字形码表2.4交通灯状态显示电路十二个交通灯有白天及夜晚工作模式白天模式下有四种状态:状态一:东西红灯亮,南北绿灯亮状态二:东西红灯亮,南北黄灯闪烁状态三:东西绿灯亮,南北红灯亮状态四:东西黄灯闪烁,南北红灯亮(以上四种状态LED显示倒数时间)夜晚工作模式下东西南北黄灯闪烁(LED灯熄灭)图10对应的硬件设计图如下:图11用74LS244和上拉电阻组成的电路使单片机能够驱动发光二极管,途中电阻为1KΩ以保证通过发光二极管的电流大于工作电流10mA。四种状态下发光二极管与相应端口取值关系见表3-2。P10P11P12P13P14P15P16P17P1编码南北红南北黄南北绿东西红东西黄东西绿----东西红南北绿001100XXCCH东西红南北黄010100XXCAH东西绿南北红100001XXE1H东西黄南北红100010XXD1H表2-2:P1口编码与交通灯状态对照表3.5键盘输入电路本设计中的键盘输入电路由8051P2口前四位上拉电阻及按键部分组成。当4个按键中的一个按下与其连接的P2口将会被置为0。四个按键1、2、3、4的功能分别为启动、停止、白天模式选择、黑夜模式选择。图112.6总体设计原理图及功能介绍(1)整个设计原理图见附图(2)功能介绍在应用电路中,采用74LS244以及上拉电阻以满足点亮发光二极管的驱动电气要求。通过对P1口各位写“1”或“0”控制发光二极管的亮灭,从而模拟十字路口交通灯的各种状态。将本设计外加适当的驱动电路即可实现真正交通灯的控制。LED数码管用于对各种交通灯状态的倒计时显示。设计中采用74LS244动态扫描显示方式驱动LED数码管,利用单片机的P0口8位输送显示数据,P2口后四位座位显示选择口。利用延时程序控制每秒的时间,实现东西、南北方向分别显示。日间、黑夜模式转变和停止工作的处理采用查询跳转的方式。通过不断查询P2.1~P2.3口的状态来判断是否有按键按下,然后运行相应的出黎程序,切换到用户指定的工作模式中。三软件设计3.1程序总设计:交通灯设计应满足停止,再启动,白天模式,黑夜模式,四个工作过程之间的转换。程序主流程图3.2白天与黑夜模式的程序流程:(两模式不互相转换)白天模式应包含四个阶段:1.20s,南北向绿灯亮,倒计时从20~0s;东西向红灯亮,倒计时从26~6s。2.6s,南北向黄灯闪烁。3.40s,南北向红灯,倒计时从46~6s;东西向绿灯亮,倒计时从40~0s。4.6s,东西向黄灯闪烁。在白天模式中,需调用10ms的定时中断程序,以便于在每经过1s,对时间进行减1。同时还需调用键盘扫描子程序,便于转换到黑夜模式或停止,和调用显示子程序,显示倒计时。黑夜模式的程序相对简单,只需使两向的黄灯不停地闪烁,用定时中断计时0.5s,已达到每1s闪烁一回。并在程序中键盘扫描,用于转换至白天模式或停止。3.3定时中断与显示子程序算法分析:1.定时中断子程序选择T0为16位定时器,可用工作方式一,定时10ms。由于晶振频率为12MHz,TCY=1μS,故有T=(65536-X)TCY=(65536-X)×1μs=10ms计算初值X=55536=D8F0H即TH0=D8H,TL0=F0H。由于要定时1s,需中断100次为1s,用寄存器r5作100次计数。寄存器r3作46s或26s的计数,每一秒r3自减一,并进行处理子程序。t0int:movTL0,#0f0hmovth0,#0d8hincr4incr5cjner5,#64h,t01;定时1s10ms*100movr5,#00decr3lcallchuli;每当1s,跳到处理程序中,对显示时间进行处理,将时间十,个位拆开t01:reti2.显示子程序60h~63h为显示缓冲区,r1寄存缓冲区地址,r0寄存位选地址,dptr寄存0~9的字码地址。每一毫秒显示一位,并r1自加一,存下一位显示数;r0右移一位,用于选中下一位数码管。每四毫秒一次。disp:movr1,#60h;显示60h至63h(显示缓冲区中的数)movr0,#7fhmovdptr,#tabdispb:mova,@r1movca,@a+dptr;将十进制数转换成数码管应显示的对应字码movp0,a;输入段选movp2,r0;输入位选lcalldl1ms;延时1msincr1mova,r0rramovr0,acjner1,#64h,dispb;直至四个数都显示过,则跳回retTAB:DB3fh,06h,5bh,4fh,6