1、目 录1 绪论11.1 本论文研究的目的和意义11.2 国内外研究现状11.3 本论文主要研究内容22 基本原理及概要设计32.1 研究内容的基本工作原理32.1.1 红绿灯的工作流程32.2 系统硬件和软件的概要设计42.2.1 方案论证42.2.2 具体设计思路42.2.3 控制系统的总体设计方案43 硬件设计53.1 单片机最小系统53.1.1 电源引脚53.1.2 时钟电路53.1.3 复位电路63.1.4 8051单片机简介73.2 红黄绿灯显示电路103.3 7sEG-MPX2-CC数码管显示器113.3.1 一位八段显示数码管电路113.4 应急按钮触发电路133.5 总体方案设
2、计134 软件设计154.1 软件流程图设计154.2 软件模块154.2.1 定时器模块154.2.2 开机自检模块174.2.3 第一个状态184.2.4 第二个状态194.2.5 第三个状态214.2.6 第四个状态224.2.7 显示子程序244.2.8 延时子程序244.2.9 外部中断子程序255 系统试验及仿真275.1 汇编源程序275.2 Proteus仿真286 结论31附录:程序清单32参考文献40致 谢41第II页 共II页1 绪论1.1本论文研究的目的和意义新中国成立以后,我国城市道路基础设施的建设有了长足发展,大中城市的道 路通车历程、道路数量、道路等级都得到了前所
3、未有的提高,很多城市对城市的道路空间利用的非常充分,地下有地铁,地面上有四通八达的高等级公路,还有高架桥环 绕贯穿整个城市,还引进和发展了许多新型的交通式,如轨道交通、BRT .1 城市交通运输行业日益发达,交通事故量也日益增多,交通伤害程度比较严重。道路交通信号灯作为道路交通的基本语言,在道路交通安全中的作用日益突出。道路交通信号灯是交通安全产品中的一个类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具。适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行2。交通信号灯由红灯(表示禁止通行)、绿灯(表示允许通行)、黄灯
4、(表示警示)组成。交通灯是城市交通管理系统的重要组成部分,能够保证机动车辆的安全运行 维持城市道路的顺畅3。1.2国内外研究现状当今中国各大城市,红绿灯安装在各个道口上,已经成为疏导交通最常见及最有效的手段,对于疏导交通流量、提高道路运输能力,减少交通事故等有明显效果。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆
5、炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,是一种是把压力探测器装在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能感应到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。九十年代初,随着LED产品及技术大范围推广普及,它以其亮度高、寿命长、低耗电等优点率先被
6、交通信号灯所采用,出现了第二代交通信号。LED(发光二极管)是近年来开发生产的一种新型光源,具有耗电小(电流只有1020mA)、亮度高(光强可达上万个mcd)、体积小(直径最小可达3mm)、重量轻(一颗发光二极管仅重零点几克)、寿命长(平均寿命10万小时)等优点。现已逐步代替白炽灯、低压卤钨灯制作道路交通信号灯4。信号灯的出现,使交通次序得到有效管制,对于疏导交通流量、提高道路运输能力,减少交通事故等有明显效果。1968年,联合国道路交通和道路标志信号协定对各种信号灯的含义作了规定。绿灯是通行信号,面对绿灯的车辆可以直行,左转弯或右转弯,除非另一种标志禁止某一种转向。左右转弯车辆都必须让合法地
7、正在路口内行驶的车辆和过人行横道的行人优先通行。红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。当前世界各国广泛使用的最具代表性却有实施的城市道路交通信号控制系统有英国的TRANSYT与SCOOTS交通控制系统和澳大利亚的SCATS系统。最近几年,国外仍偏向于引进自适理论来对交通信号控制系统进行研制,特别是美国有几十个大学的研究机构正在研制自适应交通信号控制系统5。1.3 本论文主要研究内容设计位于十字路口的交通信号控制系统的电路设计与软件编写工作,最终达到以下几个系统控制要求。在
8、每个入口处设置红、绿、黄三色信号灯,红灯亮表示禁止通行,绿灯亮表示允许通行,黄灯亮则表示给行驶中的车辆时间停在禁行线外。 主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 主、支干道均有车时,两者交替允许通行,主干道每次放行60秒,支干道每次放行30秒,设立60秒、30秒计时、显示电路。 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。2 基本原理及概要设计2.1研究内容的基本工作原理2.1.1红绿灯的工作流程系统分两种工作模式:正常模式、紧急模式,并且通过一个按钮来转化。正常模式:南北段直行通行(绿灯)、东西段禁
9、止(红灯)60s,同时南北段和东西段方向的数码管从60s开始倒计时,至最后5s时南北段绿灯变成黄灯闪烁;此后南北段禁止通行、东西段通行(绿灯)30s,至最后5s时东西段变成黄灯闪烁;依次循环。紧急模式:当按下紧急按钮后南北段,东西段都禁止通行,信号灯都变为红灯,数码管显示PP。松开按钮后,系统恢复正常运行状态。红绿灯的工作顺序依次为:1-2-3-4-1依次循环。表2.1 十字道路红绿灯状态表状 态东西支干道南北主干道时间1红灯亮,禁止通行绿灯亮,允许通行55秒2红灯亮,禁止通行黄灯亮,停车5秒3绿灯亮,允许通行红灯亮,禁止通行25秒4黄灯亮,停车红灯亮,禁止通行5秒开始初始化A绿灯,B红灯Ti
10、me 55sA黄灯,B红灯Time 5sA红灯,B绿灯Time 25sA红灯,B黄灯Time 5s图2.1 红绿灯工作流程图2.2系统硬件和软件的概要设计2.2.1方案论证单片机有丰富的中断源,方便本课题的设计,它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便地实现一些调用。I/O口功能也非常强大,方便使用,方便对设计进行扩展,使设计更加完善,成本也相对低一些,虽然在控制与显示的结合上有些复杂,但其他控制器件相比使用单片机设计是一个比较实用、低成本而且能很好地满足设计要求。2.2.2具体设计思路利用8051单片机控制交通灯系统工作,作为该系统的核心控制器件。其中P2口接数据输出口,与外
11、部数码管连接,P0口与数码管的COM口连接,用于选择数据输出的地址,这样实现时间的动态显示,并且节省了端口数。P1口作为红黄绿灯的控制口,通过上拉电阻将红黄绿灯的正极接高电平,负极接在P1口上,我们可以利用控制单片机的P1口的输出数据控制红黄绿灯的亮灭。调时可以利用外部中断INT0申请中断。当有外部中断的时候,单片机的PC指向INT0的中断入口地址,从而转向中断服务程序。这是我们可以通过判断外部按钮的状态来对红黄绿灯的显示时间进行修改。当按钮按下时时,东西南北方向的都送红灯亮,实现紧急情况下禁止通行。然后通过判断按钮的状态来决定中断是否返回,当按钮松开时,退出中断服务程序,继续执行主程序。2.
12、2.3 控制系统的总体设计方案总体方案由五个模块电路组成,分别是:单片机8051、信号灯时间显示部分电路、晶振及复位控制电路、中断电路。设计方框图如图所示。 图2.2 系统方框图3 硬件设计3.1单片机最小系统单片机最小应用系统,是指用最少的原件组成的单片机可以工作的系统。对51系列单片机来说,最小系统应包括单片机、晶振电路、复位电路。下面介绍51单片机的最小系统电路图3.1 51单片机最小系统单片机的最小系统是由电源、复位、时钟,下面介绍一下每一个组成部分。3.1.1 电源引脚 Vcc40电源端GND20接地端工作电压为5V,另有8051工作电压则是2.7-6V, 引脚功能一样。3.1.2
13、时钟电路 图3.2 晶振模块XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30pF左右。系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,
14、但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30pF。在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。3.1.3 复位电路在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。复位是由
15、外部的复位电路来实现的。片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。当时钟频率选用12MHz时,C取10F,R3约为300,R2约为8K。复位操作不会对内部RAM有所影响6。常用的复位电路如下图所示:图3.3 常用复位电路图3.1.4 8051单片机简介8051是MCS-51系列单片机的典型产品,8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统
16、等几大单元及数据总线、地址总线和控制总线等三大总线7。中央处理器(CPU)是整个单片机的核心逻辑部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM)8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表8。程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表
17、格。定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。并行输入输出(I/O)口:8051共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。全双工串行口:8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。图3.4 MCS-51单片机组成框图时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片
18、机运行的脉冲时序,但8051单片机需外置振荡电容。单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,图2.4是8051单片机的引脚配置图,40个引脚中,正电源和地线两根,外置石英振荡器的时钟电路,4组8位共32个I/O口输入输出引脚,
19、中断引脚接口与P3引脚接口分时复用。 图3.5 MCS-51系列单片机的内部结构示意图图3.6 8051单片机引脚配置图Pin9:RESET/Vpd复位为信号分时复用脚,当8051通电,时钟电路工作,当RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,即8051的初始态。Pin29:当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的
20、16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。Pin30:ALE/当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。Pin31:EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则
21、不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地9。 (1) P0端口P0.0-P0.7 P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用10。(2) P1端口P1.0P1.7 P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入
22、用。对内部Flash程序存储器编程时,接收低8位地址信息。(3) P2端口P2.0P2.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。(4) P3端口P3.0P3.7 P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接控
23、制信息。除此之外P3端口还用于一些专门功能,具体请看下表。 表3.1 8051单片机P3口引脚功能P3引脚兼用功能P3.0串行通讯输入(RXD)P3.1串行通讯输出(TXD)P3.2外部中断0( INT0)P3.3外部中断1(INT1)P3.4定时器0输入(T0)P3.5定时器1输入(T1)P3.6外部数据存储器写选通WRP3.7外部数据存储器写选通RD3.2 红黄绿灯显示电路红黄绿灯显示电路如下图3.7所示。二极管的正极通过上拉电阻接+5v的电源VCC,负极分别接8051单片机的外部接口P1.0、P1.1、P1.2、P1.3、P1.4、P1.5口,我们可以通过控制单片机P1口的数据输出来控制
24、二极管的亮灭。例如为P1口送值为#0DEH,则南北红灯亮禁止通行,东西绿灯亮允许通行。南 北VCCP1.0P1.1P1.2P1.3P1.4P1.5东 西图3.7 红绿黄灯显示电路图3.3 7sEG-MPX2-CC数码管显示器图3.8 两位数码管显示器这是一个两位数共阴极的数码管,1就是左边数码管的阴极,2就是右边数码管的阴极a,b,c,d,e,f,g,就是数码管的段码,dp就是数码管的小数点。例如:你b,c送高电平,1接地,这样左边的数码管会显示1。如果你b,c送高电平,2接地,这样右边的数码管会显示1。其中一位的原理与数码管八段显示相同。3.3.1 一位八段显示数码管电路数码管是一种半导体发
25、光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一
26、字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮11。9a10b4c2d1e6f7g5dp8com3com图3.9数码管八段结构图数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟
27、是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低12。3.4应急按钮触发电路在此系统中,按键模块是实现紧急功能的关键,按键通过电阻与单片
28、机相连接,可以对单片机进行控制,低电平信号对相应的单片机引脚有效,可使按键的另一端接地。本设计中有强制东西禁止通行,南北禁止通行按键。如图所示:图3.10应急按钮触发电路按键与单片机相对应的接口见上面的单片机模块。3.5总体方案设计根据各电路模块的设计,采用proteus软件绘制基于8051单片机的交通信号灯的控制系统,电路图如下所示。图3.11 基于8051单片机的交通信号灯的控制系统电路图4 软件设计软件在硬件平台上构筑,完成各部分硬件的控制和协调。系统功能是由软件和硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是本系统的灵魂。软件采用模块化设计方
29、法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。4.1 软件流程图设计软件总体设计主要完成各部分的软件控制和协调。本系统主程序模块主要完成的工作是对系统的初始化,发送显示数据,等待外部中断,以及根据所需要的功能进行相应的操作。其流程图如图所示。图4.1 软件运行流程图4.2 软件模块4.2.1 定时器模块在单片机应用系统中,实现定时的方法一般有以下三种:1:软件定时:让计算机执行一段程序来进行事件延时。这个程序段本身份没有安排其他的执行目的,只是利用该程序段的执行花费的一个固定时间。通过适当的选择指令和安排循环次数,可调节这
30、段程序执行所需花费的时间的长短。其特点是定时时间精确,不需外加硬件电路,但占用时间。因此软件定时的时间不宜过长。:硬件定时:利用硬件电路实现定时。其特点是不占用时间,通过改变电路元器件参数调来节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。:可编程定时器:通过专用的定时计数器芯片来实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时的时间可通过程序的设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。 当定时计数器设置为计数工作方式时,计数器对来自输入引脚T0和T1的外部信号计数,外部信号的下降沿将触发计数。最高检测频率为振荡频率的二十四分之一。计数器对外部输入信
31、号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。当设置了定时器的工作方式并启动定时器工作后,定时器就安倍设定的工作方式独立工作,不在占用CPU的操作时间,只有在计数器计满溢出时才能中断CPU当前的操作。延时方法可以有两种一种是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软延时的方法。定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC 可得到如下计算通式: TC=M-C式中,M为计数器摸值
32、,该值和计数器工作方式有关。在方式0时M为8196 ;在方式1时M的值为65536;在方式2和3为256。 T=(MTC)T计数 或 T计数其中T计数是单片机时钟周期的倍;为定时初值如单片机的主脉冲频率为 =,经过分频方式:213微秒毫秒方式:216微秒毫秒我们在这里采用的是方式1,则初始值TC=65536-50000THO=(65536-50000)%256 TL0=(65536-50000)/256显然秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题我们采用在主程序中设定一个初值为的软件计数器和使定时毫秒这样每当到毫秒时就响应它的溢出中断请求,进入
33、他的中断服务子程序。在中断服务子程序中,先使软件计数器加,然后判断它是否为20。为20表示秒已到可以返回到输出时间显示程序。4.2.2 开机自检模块开机之后,先检查交通信号灯的好坏,信号灯全亮。数码管显示PP。延时一段时间后,信号灯全灭,数码管显示PP,准备开始进入主程序。void check()/开机自检子程序RED_ZHI=0;RED_ZHU=0;GREEN_ZHI=0;GREEN_ZHU=0; YELLOW_ZHI=0;YELLOW_ZHU=0;P0=0x00;P2=0X73;delay(2);RED_ZHI=1;RED_ZHU=1;GREEN_ZHI=1;GREEN_ZHU=1; YE
34、LLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0x73;delay(2);开机自检子程序运行流程图如下。开始红绿灯都亮LED显示管显示PP延时一段时间红黄绿灯都亮图4.2开机自检子程序运行流程图4.2.3 第一个状态第一个状态为主要运行状态,完成的功能主要是主干道亮绿灯55s,支干道亮红灯。void init1()int temp;temp=61;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x3c;TL0=0xB0;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1) RED_ZHU=1;RED_ZHI
35、=0;GREEN_ZHU=0; GREEN_ZHI=1;YELLOW_ZHU=1; YELLOW_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减if(temp=5)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位display(ge,shi);第一个状态的程序流程图如下所示。图4.3第一个状态的程序流程图4.2.4 第二个状态第二个状态的主要功能是:主干道黄灯闪烁5s,支干道红灯闪烁。void init2()int temp;temp=6;/变量赋初值TMOD=0x01;/定时器T0工作于方式1
36、TH0=0x3c;TL0=0xB0;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)GREEN_ZHU=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHU=YELLOW_ZHU;RED_ZHI=RED_ZHI;if(temp0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);第二个状态的程序流程图如下所示。图4.4 第二个状态的程序流程图4.2.5 第三个状态第三个状态:主干道亮红灯、支干道亮绿灯25Sv
37、oid init3()int temp;temp=31;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x3c;TL0=0xB0;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHU=0; RED_ZHI=1;YELLOW_ZHU=1; GREEN_ZHI=0;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减if(temp=4)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);第三个状态的程序流程图如
38、下图所示。图4.5第三个状态的程序流程图4.2.6第四个状态第四个状态:主干道红灯闪烁、支干道黄灯闪烁5svoid init4()int temp;temp=6;/变量赋初值TMOD=0x01;/定时器T0工作于方式1TH0=0x3c;TL0=0xB0;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0while(1)RED_ZHI=1;GREEN_ZHU=1;GREEN_ZHI=1;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减YELLOW_ZHI=YELLOW_ZHI;RED_ZHU=RED_ZHU;if(t
39、emp0)break;shi=temp%100/10;/显示十位ge=temp%10;/显示个位 display(ge,shi);第四个状态的程序流程图如下图所示。图4.6 第四个状态的程序流程图4.2.7显示子程序void display(uint ge,uint shi)P0=0xfd;P2=tableshi;/显示十位delay0(5);P0=0xfe;P2=tablege;/显示个位delay0(5);4.2.8延时子程序void delay0(uint z)uint i,j;for(i=0;iz;i+)for(j=0;j0;j-) for(i=1250;i0;i-) for(k=18
40、0;k0;k-); 4.2.9 外部中断子程序计算机在执行正常程序时,如果系统出现某些急需处理的异常情况和特殊请求,CPU会暂时中止正在执行的指令,转去对随机发生的更紧迫事件进行处理;处理完后,CPU会自动返回原来的程序继续执行。MCS-51单片机的中断源共有5个,分为3类:外部中断源,片内溢出中断源,串行口中断源。外部中断源可以分为由片内P3.2引脚输入的INT0中断,以及由P3.3引脚输入的INT1中断。片内溢出中断分为定时器T0中断和定时器T1中断。串行口中断只有一个,片内串行数据的接收和发送中断。这5个中断源在程序存储器中各有中断服务程序的入口地址,这个地址也称为矢量地址。在CPU响应
41、中断时,硬件自动形成各自的入口地址,由此进入中断服务程序,从而实现了正确的转移13。本中断子程序用了INTO外部中断,很好的完成了紧急情况下车辆通行。void xint0() interrupt 0 /外部中断INT0RED_ZHU_ON();void RED_ZHU_ON()/外部中断INT0显示子程序RED_ZHI=0;RED_ZHU=0;GREEN_ZHI=1;GREEN_ZHU=1; YELLOW_ZHI=1;YELLOW_ZHU=1;P0=0x00;P2=0X73;delay0(1000);return;中断程序运行流程图如下图所示。图4.7 中断程序运行流程图5 系统试验及仿真根据
42、上面的设计,此次课程设计使用keil和Proteus软件仿真,其中使用keil c软件汇编源程序,使用Proteus软件对硬件电路进行模拟14。PROTUES软件介绍Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使
43、用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室15。keil c软件介绍Keil C51 Vision2集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想16。5.1 汇编源程序在Vision2中,输入源程序后,对源程序进行编译,经调试源程序可以运行。汇编结果如图所示:图5.1 汇编结果5.2 Proteus仿真在此次设计中,用Proteus对硬件部分进行模式。在Proteus中输入原理图后,在单片机中载入上面汇编的hex文件,运行仿真,结果如下:1.系统开始工作,开机自检。仿真结果如图所示:图5.2 开机自检仿真图2.系统运行第一个状态:南北主道路绿灯亮55s,东西支路口亮红灯。图5.3 第一个运行状态仿真图3.系统运行第二个状态:南北主道路黄灯亮5s,东西支路口亮红灯图5.4 第二个运行状态仿真图4.系统运行第三个状态:南北主道路亮红灯,东西支道路亮绿灯25s。图5.5 第三个运行状态仿真