资源描述
单片机模拟交通灯的设计 2011 年 5 月独 创 性 声 明本人郑重声明:所呈交的毕业设计是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,设计中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在设计中作了明确的说明并表示了谢意。签名: 年月日授 权 声 明本人完全了解许昌学院有关保留、使用本科生毕业设计的规定,即:有权保留并向国家有关部门或机构送交毕业设计的复印件和磁盘,允许毕业设计被查阅和借阅。本人授权许昌学院可以将毕业设计的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编设计。本人设计中有原创性数据需要保密的部分为(如没有,请填写“无”): 签名: 年月日指导教师签名: 年月日摘 要本设计是依据数字集成电路、单片机技术为基础,采用MCS-51系列单片机AT89C51为控制器件结合LED数码显示电路、发光二极管指示电路组成交通灯硬件电路,利用单片机内部定时中断溢出产生1s实现倒计时。系统能够完成25s倒计时显示,在倒计时到5s时绿灯开始闪烁以提醒过往的车辆及行人安全通行,倒计时到2s时黄灯亮。关键词:单片机;AT89C51;交通灯ABSTRACTThis design is based on digital integrated circuits, microcontroller technology, the use of MCS-51 series microcontroller AT89C51 devices for the control circuit with LED digital display, LED traffic lights indicating hardware circuit, the use of internal microcontroller timer interrupt overflow 1s achieved countdown. System can accomplish the 25s countdown, the countdown to when the green light starts flashing 5s to alert passing vehicles and pedestrians safe passage, the countdown to when the yellow light 2s.Keywords: SCM;AT89C51;Traffic lights 目 录1绪论11.1研究背景11.2单片机的概述11.3单片机的应用21.4单片机的发展史22系统硬件设计32.1系统原理32.2 AT89C51的介绍42.3 AT89C51的引脚说明52.4时钟电路72.5复位电路72.6单片机的最小系统构成82.7 7405 TTL 集电极开路六反相器82.8指示电路82.9 LED数码显示器93系统软件设计113.1系统整体程序流程图113.2设置定时,显示初始化113.3处理状态、倒计时显示133.4路口红绿灯状态子程序143.5 LED显示子程序144系统仿真164.1仿真平台介绍164.1.1 Keil软件介绍164.1.2 Proteus仿真软件介绍174.2系统硬件实现194.3系统仿真及分析195总结22参考文献23附 录24致 谢30 1绪论1.1研究背景当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。但这一技术在19世纪就已出现了。1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。这是世界上最早的交通信号灯。1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。红灯亮表示“停止”,绿灯亮表示“通行”。1918年,又出现了带控制的红绿灯和红外线红绿灯。带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。一般的交通灯系统采用固定周期换灯的控制方式,路口的交通灯大多只有红绿黄指示灯,行人在过路口时,会出现走到路中央绿灯跳变为红灯的情况。为符合以人为本的设计理念,我们可在路口安装与信号灯同步的倒记时显示器,行人和自行车可根据绿灯结束的时间决定是否过路口。设计中我们用AT89C51 单片机的并行口接发光二极管,模拟交通灯的变化规律。8个数码管用来显示秒值,东、西、南、北各两个。12个发光二极管,东、西、南、北各三个,分为红、绿、黄三种颜色。1.2单片机的概述单片机指集成在一个芯片上的微型计算机,也就是把组成微型计算机的各种功能部件,包括CPU(Central Processing Unit)、随机存取存储器RAM(Random Access Memory)、只读存储器ROM(Read-Only Memory)、基本输入/输出(Input/Output)接口电路、定时器/计数器等部件都制作在一块集成芯片上,构成一个完整的微型计算机,从而实现微型计算机的基本功能。1.3单片机的应用(1)智能仪器仪表现代仪器仪表采用单片机,不仅提高了仪器仪表使用功能和精度,使仪器仪表智能化而且简化了其结构,减小了体积,降低了成本。(2)工业控制单片机还可以用于工业控制器对各种物理量的采集及控制。例如,电流、温度、电压、流量等等物理参数的采集和控制都可以利用单片机实现,从而提高生产效率和产品质量。(3)家用电器现在家用电器都向智能化发展,单片机是家用电器智能化的大脑和心脏。例如洗衣机、空调、电冰箱、电视机等。(4)信息和通信产品信息和通信产品的自动化和智能化也离不开单片机的参与。典型产品如:打印机、传真机、考勤机、电话机等。1.4单片机的发展史单片机技术的发展十分迅速,大致可分为4个阶段:第一阶段(19761978):低性能单片机的探索阶段。以Intel公司的MCS-48为代表,采用了单片结构,即在一块芯片内含有8位CPU、定时器/计数器、并行I/O、RAM和ROM等。主要用于工业领域。第二阶段(19781982):高性能单片机阶段。这一类单片机带有串行I/O口,8位数据线、16位地址线可以寻址的范围达到64KB,有控制总线、较丰富的指令系统等。这类单片机的应用范围较广,并在不断地改进和发展。第三阶段(19821990):16位单片机阶段。16位单片机除CPU为16位外,片内RAM和ROM容量进一步增大,实时处理能力更强,体现了微控制器的特征。第四阶段(1990 ):微控制器的全面发展的阶段。各公司的产品在尽量兼容的同时向高速、强运算能力、寻址范围大以及小型廉价方面发展。2系统硬件设计2.1系统原理本设计主要采用AT89C51单片机为核心结合电源电路、时钟电路、复位电路构成单片机最小系统,并与外围倒计时显示电路和指示电路共同构成单片机模拟交通灯系统。其系统整体框图如下图2-1所示。电源电路时钟电路复位电路单片机AT89C51显示电路指示电路图2-1 系统整体框图图2-2 系统原理图2.2 AT89C51的介绍图2-3 单片机内部总体结构图设计采用的是Atmel公司的89C51是MCS-51系列单片机的典型产品,其主要结构包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:(1)中央处理器(CPU)中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。(2)内部数据存储器内部数据存储器包括RAM(128*8)和RAM地址寄存器,用于存放可读/写的数据。实际其几个内部共有256个RAM单元,但其中后128个单元为专用寄存器,能作为普通RAM存储器供用户使用的只是前128个单元。因此,通常所说的内部数据存储器是指前128个单元,简称“内部RAM”。(3)内部程序存储器内部程序存储器包括ROM(4K*8)和程序地址寄存器等。AT89C51共有4KB掩膜ROM,用于存放程序和原始数据,因此称之为程序存储器,简称“内部ROM”(4)定时器/计数器由于控制应用的需要,89C51内部共有两个16位的定时器/计数器,用定时器/计数器0和定时器/计数器1表示,用于实现定时或计数功能,并以其定时或计数结果对单片机进行控制。(5)并行I/O口89C51共有4个8位I/O口(P0、 P1、P2和P3),以实现数据的并行输入/输出。(6)串行口89C51单片机有一个全双工串行口,以实现单片机和其他数据设备之间的串行数据传送。该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。(7)中断控制电路89C51的中断功能较强,以满足控制应用的需要。共有5个中断源,即外中断2个,定时/计数中断2个,串行中断1个。全部中断分为高级和低级共两个优先级别。(8)时钟电路89C51芯片内部有时钟电路,但石英晶体和微调电容需外接。时钟电路为单片机产生时钟脉冲序列。2.3 AT89C51的引脚说明图2-4 AT89C51的引脚图按其功能可分为电源、时钟、控制和I/O接口四大部分:(1)电源引脚 Vcc:电源端,接+5V ;Vss:接地端。(2)时钟引脚XTAL1和XTAL2:当使用芯片内部时钟时,XTAL1和XTAL2用于外接石英晶体谐振器和微调电容;当使用外部时钟时,用于接入外部时钟脉冲信号。(3)控制引脚RST/VPD:复位/掉电保护信号输入端。RST为复位信号输入。Vcc掉电后,此引脚(VPD)可接备用电源,低功耗条件下保证内部RAM中的数据。ALE/:地址锁存控制信号/编程脉冲输入端ALE为地址锁存允许。当单片机访问外部存储器时,该引脚的输出信号ALE用于锁存P0端口的低8位地址。ALE输出的频率为时钟振荡频率的1/6。对8751单片机片内EPROM编程时,编程脉冲由此引脚接入。:片外程序存储器读选通有效信号取指令操作期间,的频率为振荡频率的1/6;但若此期间有访问外部数据存储器的操作时,则有一个机器周期中的信号将不会出现。/VPP:访问程序存储器控制信号/编程电源输入端当=0时单片机只访问外部程序存储器。对于8031单片机此引脚必须接地。=1,单片机访问内部程序存储器。对于内部有程序存储器的8xx51单片机,此引脚应接高电平,但若地址超过4KB范围(0FFFH),单片机将自动访问外部程序存储器。在8751单片机片内EPROM编程期间,此引脚接入21V编程电源Vpp。(4)I/O引脚P0.0P0.7:P0口数据/低8位地址复用总线端口。P1.0P1.7:P1口静态通用端口。P2.0P2.7:P2口高八位地址总线动态端口。P3.0P3.7:双功能静态端口,具有第二功能。表2-1 P3口线的第二功能说明口线第二功能信号第二功能信号名称P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2INT0外部中断0申请P3.3INT1外部中断1申请P3.4T0定时器/计数器0计数输入P3.5T1定时器/计数器0计数输入P3.6外部RAM写选通P3.7外部RAM读选通2.4时钟电路本设计采用AT89C51单片机的内部时钟方式,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHz,电容采用30pF。图2-5 时钟电路2.5复位电路单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,例如复位后PC0000H,使单片机从第个单元取指令。无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位,所以我们必须弄清楚MCS-51型单片机复位的条件、复位电路和复位后状态。单片机复位的条件是:必须使RST/VPD或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。例如,若时钟频率为12MHz,每机器周期为1us,则只需2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。本设计所用的复位电路如图2-5所示: RST图2-6 复位电路2.6单片机的最小系统构成单片机控制系统是由单片机和外围电路组成的,用最少的元件组成的单片机系统被称为单片机最小系统。即主要有电源电路、晶振电路、复位电路构成。图2-7 单片机最小系统构成2.7 7405 TTL 集电极开路六反相器 7045为六路反相器其内部由6个与非门组成,在设计中7405反相器的输入端与单片机的P2.1P2.6相连,输出端与LED发光二极管的负极相连,以实现对不同的状态下的LED进行控制。例如当单片机的I/O口输出高电平时,经过7405反相器输出低电平使该路的LED点亮。图2-8 7405一路反相2.8指示电路本设计中采用红、绿、黄三种颜色的发光二极管各4个通过7405反相器与单片机的P2口的相应引脚相连,在不同状态下点亮不同的二极管实现对道路的控制。发光二极管是半导体二极管的一种,可以把电能转化成光能,简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,从P区注入到N区的空穴和由N区注入到P区的电子,在PN结附近数微米内分别与N区的电子和P区的空穴复合,产生自发辐射的荧光。不同的半导体材料中电子和空穴所处的能量状态不同。当电子和空穴复合时释放出的能量多少不同,释放出的能量越多,则发出的光的波长越短。图2-9 红、绿、蓝三种颜色的发光二极管2.9 LED数码显示器LED是Light Emiting Diode(发光二极管)的缩写,发光二极管是能将电信号转换为光信号的发光器件。由条形发光二极管组成“8”字形的显示器,也称数码管。通过数码管中发光二级管的亮暗组合,可以显示多种数字、字母以及其他符号。数码管在单片机应用系统中主要用于显示单片机的输出数据和状态等。LED显示器为发光二极管构成的显示器件。常用的LED显示器有两种供应状态,既共阴极LED与共阳极LED。图2-10 LED数码管结构图LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O口进行驱动,或者使用如BCD码二十进位器进行驱动。动态显示驱动:动态驱动是将所有数码管的8位段码a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开被选中的数码管就会显示字符,没有选通的数码管就不会亮。在设计中我们采用静态显示方式,利用8个数码管每个方向各两个与AT89C51的P1口和P3口相连用来显示倒计时的十位和个位。3系统软件设计3.1系统整体程序流程图设置定时,显示初始化开始处理状态、显示时间到否?处理下一状态结束是否图3-1 系统整体程序流程图3.2设置定时,显示初始化在单片机应用系统中,实现定时的方法一般有以下三种:(1)软件定时:让计算机执行一段程序来进行事件延时。这个程序段本身没有安排其他的执行目的,只是利用该程序段执行花费的一个固定时间。通过适当的选择指令和安排循环次数,可调节这段程序执行所需花费的时间的长短。其特点是定时时间精确,不需外加硬件电路,但占用CPU时间。因此软件定时的时间不宜过长。(2)硬件定时:利用硬件电路实现定时。其特点是不占用CPU时间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。(3)可编程定时器:通过专用的定时计数器芯片来实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时的时间可通过程序的设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。当定时计数器设置为计数工作方式时,计数器对来自输入引脚T0和T1的外部信号计数,外部信号的下降沿将触发计数。最高检测频率为振荡频率的二十四分之一。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。 当设置了定时器的工作方式并启动定时器工作后,定时器就按照设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计满溢出时才能中断CPU当前的操作。延时方法可以有两种,一种是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软延时的方法。定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC 可得到如下计算通式: TC=M C (4 1)式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为8196;在方式1时M的值为65536;在方式2和3为256。 T=(M -TC)* 或 TCM-C/ (4 2)是单片机时钟周期的12倍;TC为定时初值如单片机的主脉冲频率=12MHz,经过12分频方式0 (4 3)方式1 (4 4) 我们在这里采用的是方式1,则初始值TC=65536-50000TH0=(65536-50000)/256 TL0=(65536-50000)%256 (4 5)显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题。我们采用在主程序中设定一个初值为1的软件计数器和使T0定时50毫秒这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,CPU先使软件计数器加1,然后判断它是否为20。为20表示1秒已到可以返回到输出时间显示程序。设置定时程序:START: MOV TMOD,#01H ;置T0工作方式1 MOV TH0,#3CH ;置T0定时初值50ms MOV TL0,#0B0H CLR TF0 SETB TR0 ;启动T0 CLR A3.3处理状态、倒计时显示东西方向绿灯亮开始25s倒计时初始化是否5s?绿灯闪烁黄灯亮2s是否转为南北方向的绿灯亮图3-2 状态处理流程图当处理到相应的状态时调用所对应的状态子程序和显示子程序来点亮该状态下的发光二极管来表示是否允许通过并利用LED数码管显示倒计时间。通过比较R3寄存器中的值来判断是否要进行下一个状态,当所有状态都已显示程序跳转到初始状态进行循环。初始化后处理状态1的程序:LOOP: MOV R2,#20 ;置1s计数初值 MOV R3,#20 ;红灯亮20s MOV SECOND1,#25 ;计时显示初值25s LCALL DISPLAY LCALL STATE1 ;调用状态1WAIT1: JNB TF0,WAIT1 ;查询50ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值50ms MOV TL0,#0B0H DJNZ R2,WAIT1 ;判断1s到否?未到继续状态1 MOV R2,#20 ;置50ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY ;调用显示子程序DJNZ R3,WAIT13.4路口红绿灯状态子程序通过设置各发光二极管所对应管脚的高低电平来满足该状态下的显示效果,由于各发光二极管的正极接高电平、负极经过7405反相器接单片机的引脚。例如在状态1下东西方向的绿灯亮、南北方向的红灯亮,将单片机的P2.1和P2.6置高电平经7405反相后为低电平来点亮与之相连的发光二极管。状态1下的子程序:STATE1: SETB LED_G1 ;状态1 CLR LED_Y1 ;东西路口绿灯亮 CLR LED_R1 CLR LED_G2 CLR LED_Y2 SETB LED_R2 ;南北路口红灯亮 RET3.5 LED显示子程序LED计时每1秒都要刷新1次,那么计时满1秒时就要将存储时间的计时寄存器SECOND1减1,然后送入LED显示程序中显示。下面要将时间数据R4的十位,个位分开送显P1,P0端口,首先将R4除以10,整数即十位放在A中,余数即个位放在B中,设置7段LED显示数据的数据表,用数据指针寄存器DPTR指向数据表的首地址,再加上A中的偏移量,就可以指向十位数字,然后送显即可,个位显示同理。显示子程序:DISPLAY: MOV A,SECOND1 ;取计时值作为被除数送入累加器A MOV B,#10 ;把10作为除数 DIV AB ;两者相除,商存A,余数存B MOV DPTR,#LEDMAP ;取数据表的首地址 MOVC A,A+DPTR MOV P1,A ;显示十位 MOV A,B MOVC A,A+DPTR MOV P3,A ;显示个位 RETLEDMAP: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END4系统仿真4.1仿真平台介绍4.1.1 Keil软件介绍单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的 A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发 MCS-51系列单片机的软件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil Software 8051开发工具,提供编译源程序,汇编源程序,连接和重定位目标文件和库文件,创建.hex文件调试目标程序。下面简单介绍一下使用过程。启动Keil新建工程选择芯片新建汇编/C语言文件编译文件、调试 生成.HEX文件图4-1 Keil软件的使用流程图Keil软件的工作界面图如下图:图4-2 Keil软件的工作界面图4.1.2 Proteus仿真软件介绍Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它主要包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它能把微处理器软件作用在处理器上,并和该处理器的任何模拟和数字器件协调仿真。仿真执行目标码就像在真正的单片机系统上运行,VSM CPU模型能完整仿真I/O口、中断、定时器、通用外设和其他与CPU有关的外设,甚至能仿真多个处理器。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。该软件的特点是:(1)集原理图设计、仿真和PCB设计于一体,真正实现从概念到产品的完整开发工具。(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真,是独一无二的支持处理器与外围电路的协同仿真电路设计软件。(3)具有全速、单步、设置断点等多种形式的调试功能。(4)具有各种信号源和电路分析所需的虚拟仪表、是电类教学实验与创新的最侍平台。(5)支持Keil C51 uVision2、MTLAB等第三方的软件编译和调试环境。(6)具有强大的原理图到PCB板设计功能,可输出多种格式的电路设计报表。下面介绍一下使用步骤:启动Proteus放置元器件连接电路添加.HEX文件、仿真图4-3 Proteus操作流程图打开Proteus启动工作界面,如下图:图4-4 Proteus工作界面4.2系统硬件实现图4-5 单片机控制交通灯硬件电路图选取单片机AT89C51一片,红、绿、蓝LED各4个,LED数码管8个,7405一片,电阻、电容若干按电路原理图连接电路。4.3系统仿真及分析图4-6 系统初始化效果图根据上图4-6的仿真效果图说明系统在初始化后使东西方向的绿灯亮、南北方向的红灯亮,仿真结果正确。图4-7 倒计时2s时的仿真图根据图4-7的仿真效果,在第一个循环周期内当倒计时到2s时东西方向由绿灯闪烁变换为黄灯亮,说明仿真正确。图4-8 南北方向25s倒计时根据图4-8当东西方向的25s倒计时结果后转为南北方向开始25s倒计时、南北方向的绿灯亮,东西方向的红灯亮,说明仿真结果正确。通过以上的仿真结果可以说明本设计可以正确的进行东西和南北方向的红绿灯转换并在倒计时5s时开始绿灯闪烁,2s的黄灯亮效果。但由于时间的仓促该设计在有些方面还有待于提高,比如在根据各个路段的车流量来自动的调整红绿的时间和闯红灯报警电路以满足社会的需要。5总结本文是以AT89C51单片机为核心,设计出的模拟交通灯。并通过PROTEUS进行的仿真。实现系统首先开始东西方向的绿灯亮南北方向的红灯亮并进行25s倒计时,在倒计时5s时东西方向的绿灯闪烁以提醒人们安全通行,倒计时2s时黄灯亮禁止没有通过路口的车辆通行,倒计时结束后开始南北方向的倒计时依次循环。通过PROTEUS仿真实验表明该交通灯的工作原理是比较简单,实用性比较强可以用在窄路段,因为时间较短。虽然本设计能够成功仿真,由于时间仓促和本人水平有限,本设计还存在一些不足之处,还有待继续研究和改进。参考文献1 李广弟,朱月秀,冷祖祁.单片机基础M.北京:北京航空航天大学出版社,2007.62 张靖武,周灵彬编著.单片机原理、应用与PROTEUS仿真M.北京:电子工业出版社,2008.83 周润景,袁伟亭,景晓松.Proteus在MCS-51&ARM7系统中的应用百例M.北京:电子工业出版社,2006.104 高卫东,辛友顺,韩彦征.51单片机原理与实践M.北京:北京航空航天大学出版社,2008.15 牛昱光.单片机原理与接口技术M.北京:电子工业出版社,2008.26 徐煜明.C51单片机及应用系统设计M.北京:电子工业出版社,2009.27 焦玉全,俞伟钧,顾诚甦.MCS-51单片机原理及应用M.南京:东南大学出版社,2010.18 蒋辉平,周国雄.基于Proteus的单片机系统设计与仿真实例M.北京:机械工业出版社,2009.49 余修武.单片机原理及应用M.西安:电子科技大学出版社,2008.110 余锡存,曹国华.单片机原理及接口技术M.陕西:西安电子科技大学出版社,2000.711 朱清慧,张凤蕊,王志奎.Proteus 教程电子线路设计、制版与仿真M.北京:清华大学出版社,2008.912 钱晓捷.汇编语言程序设计M.北京:电子工业出版社,2003.6 附 录交通灯源程序:SECOND1 EQU 30H ;计时寄存器DBUF EQU 40H ;显示码缓冲1TEMP EQU 44H ;显示码缓冲2LED_G1 BIT P2.1 ;东西路口绿灯LED_Y1 BIT P2.2 ;东西路口黄灯LED_R1 BIT P2.3 ;东西路口红灯LED_G2 BIT P2.4 ;南北路口绿灯LED_Y2 BIT P2.5 ;南北路口黄灯LED_R2 BIT P2.6 ;南北路口红灯 ORG 0000H LJMP START ORG 0100HSTART: MOV TMOD,#01H ;置T0工作方式1 MOV TH0,#3CH ;置T0定时初值50ms MOV TL0,#0B0H CLR TF0 SETB TR0 ;启动T0 CLR A;*LOOP: MOV R2,#20 ;置1s计数初值 MOV R3,#20 ;红灯亮20s MOV SECOND1,#25 ;计时显示初值25s LCALL DISPLAY LCALL STATE1 ;调用状态1WAIT1: JNB TF0,WAIT1 ;查询50ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值50ms MOV TL0,#0B0H DJNZ R2,WAIT1 ;判断1s到否?未到继续状态1 MOV R2,#20 ;置50ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT1 ;状态1维持20s;* MOV R2,#5 ;置50ms计数初值 MOV R3,#3 ;绿灯闪烁3s MOV R4,#4 ;闪烁间隔200ms MOV SECOND1,#5 ;显示初值5s LCALL DISPLAY LCALL STATE2 ;调用状态2WAIT2: JNB TF0,WAIT2 ;查询50ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值50ms MOV TL0,#0B0H DJNZ R4,WAIT2 ;判断200ms到否?未到继续状态2 CPL LED_G1 ;东西绿灯闪烁 MOV R4,#4 ;闪烁间隔200ms DJNZ R2,WAIT2 ;判断1s到否?未到继续状态2 MOV R2,#5 ;置50ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT2 ;状态2维持3s;* MOV R2,#20 ;置50ms计数初值 MOV R3,#2 ;黄灯闪烁2s MOV SECOND1,#2 ;显示初值2s LCALL DISPLAY LCALL STATE3 ;调用状态3WAIT3: JNB TF0,WAIT3 ;查询100ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值100ms MOV TL0,#0B0H DJNZ R2,WAIT3 ;判断1s到否?未到继续状态3 MOV R2,#20 ;置100ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT3 ;状态3维持2s;* MOV R2,#20 ;置50ms计数初值 MOV R3,#20 ;红灯亮20s MOV SECOND1,#25 ;显示初值25s LCALL DISPLAY LCALL STATE4 ;调用状态4WAIT4: JNB TF0,WAIT4 ;查询100ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值100ms MOV TL0,#0B0H DJNZ R2,WAIT4 ;判断1s到否?未到继续状态4 MOV R2,#20 ;置100ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT4 ;状态4维持20s;* MOV R2,#5 ;置50ms计数初值 MOV R4,#4 ;红灯亮20s MOV R3,#3 ;绿灯闪烁3s MOV SECOND1,#5 ;显示初值5s LCALL DISPLAY LCALL STATE5 ;调用状态5WAIT5: JNB TF0,WAIT5 ;查询100ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值100ms MOV TL0,#0B0H DJNZ R4,WAIT5 ;判断200ms到否?未到继续状态5 CPL LED_G2 ;南北绿灯闪烁 MOV R4,#4 ;闪烁间隔200ms DJNZ R2,WAIT5 ;判断1s到否?未到继续状态5 MOV R2,#5 ;置100ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT5 ;状态5维持3s;* MOV R2,#20 ;置50ms计数初值 MOV R3,#2 ;黄灯亮2s MOV SECOND1,#2 ;显示初值2s LCALL DISPLAY LCALL STATE6 ;调用状态6WAIT6: JNB TF0,WAIT6 ;查询100ms到否 CLR TF0 MOV TH0,#3CH ;恢复T0定时初值100ms MOV TL0,#0B0H DJNZ R2,WAIT6 ;判断1s到否?未到继续状态6 MOV R2,#20 ;置100ms计数初值 DEC SECOND1 ;显示时间减1 LCALL DISPLAY DJNZ R3,WAIT6 ;状态6维持2s LJMP LOOP ;大循环;*STATE1: SETB LED_G1 ;状态1 CLR LED_Y1 ;东西路口绿灯亮 CLR LED_R1 CLR LED_G2 CLR LED_Y2 SETB LED_R2 ;南北路口红灯亮 RETSTATE2: CLR LED_Y1 ;状态2 CLR LED_R1 CLR LED_G2 CLR LED_Y2 SETB LED_R2 ;南北路口红灯亮 RETSTATE3: CLR LED_G1 ;状态3 CLR LED_R1 CLR LED_G2 CLR LED_Y2 SETB LED_R2 ;南北路口红灯亮 SETB LED_Y1 ;东西路口黄灯亮 RETSTATE4: CLR LED_G1 ;状态4 CLR LED_Y1 SETB LED_R1 ; 东西路口红灯亮 SETB LED_G2 ;南北路口绿灯亮 CLR LED_Y2 CLR LED_R2 RETSTATE5: CLR LED_G1 ;状态5 CLR LED_Y1 SETB LED_R1 ;东西路口红灯亮 CLR LED_Y2 CLR LED_R2 RETSTATE6: CLR LED_G1 ;状态6 CLR LED_Y1 SETB LED_R1 ;东西路口红灯亮 CLR LED_G2 CLR LED_R2 SETB LED_Y2 ;南北路口黄灯亮 RET;*;显示程序DISPLAY: MOV A,SECOND1 MOV B,#10 DIV AB MOV DPTR,#LEDMAP MOVC A,A+DPTR MOV P1,A ;显示十位 MOV A,B MOVC A,A+DPTR MOV P3,A ;显示个位 RETLEDMAP: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END致 谢在这里我首先要感谢的是孙刚老师,在您的一路细心指导下完成了我的毕业设计。孙老师多次询问设计进程,并为我指点迷津,精心点拨,热诚鼓舞。由衷感谢您在我的论文上倾注了大量心血,孙老师不辞辛苦的教导才使我能够完成我的论文。对于孙老师的感激之情是无法用言语表达的。感谢在大学里为学生默默奉献的老师们是你们让我有了丰富的知识和做人的道理,给即将踏入社会的学生打下了深厚的基础,在此,我要向诸位老师深深地鞠上一躬。同样我还要感谢在此次设计中和在学校生活对我提供帮助的同学们,因为有了你们的支持我才能一步步的走向成功。最后感谢母校许昌学院对我的大力栽培。31
展开阅读全文