1、交通灯的控制摘 要:本设计以AT89C51单片机为主控模块,主要由按钮开关,数码管,发光二极管组成,利用汇编语言编写程序来模拟对十字路口的交通管理,系统包括左右拐,直行,人行道四个基本的交通等功能.南北方向亮绿灯60s,然后黄灯闪烁3次,每次一秒(亮灭各40ms),红灯40s,同时东西方向红灯65s,绿灯35s,黄灯闪烁3s。各路灯用LED模拟显示,同时用七段数码管显示两路的倒计时时间.利用键盘可修改灯亮时间PC机设置灯亮时间,利用PC与单片机串口通信实现 。为防止出现紧急情况(如119,110通过时),该系统还设置了中断,可通过按键使各个路口为红灯其它车辆禁行,特殊车辆通行的状态,当东西方向
2、为通行状态时,南北方向有突发情况,也可通过手动按键使东西方向为红灯,南北方向为绿灯.在对系统的分析基础上,提出了几种设计方案,经比较选择各方较好的LED动态循环显示方案进行设计,设计包括硬件和软件两大部分单片机最小系统,时间显示,交通等显示三部分。以AT89C51为控制核心,东西南北各设置3个交通灯,东西,南北方向各设置一个2位的数码管时间显示器,交通灯显示则采用红绿黄三色高亮发光二极管模拟,软件采用模块化的设计方法,主要分为主程序,定时中断服务子程序,倒计时显示子程序,交通灯模拟显示子程序。软件设计完成,经过对该设计程序模拟测试,可实现对十字路口交通的良好管理,预期目标全部达到,该系统操作简
3、单,实用性强,扩展功能好.关键词:AT89C51 数码管 光二极管 中断 模拟 目录1前言51.1该课程选题背景51。2该课程选题现实意义51。3单片机交通灯研究任务52设计方案62.1方案设计目的62。2方案设计思路62.3方案设计原理73系统硬件设计83。1 AT89C51芯片简介83。2 74LS47芯片简介113。3系统总框图123。4、交通灯硬件线路123.5、系统工作原理124软件设计134.1每秒钟的设定134.2秒的方法134。3相应程序代码134.4、键盘显示流程图144。5、 软件延时145 Proteus软件仿真155。1正常运行时状态155。2黄灯亮时状态165。3应急
4、情况下状态166 设计心得体会17附录1:源程序代码18附录2:硬件连接图23参考文献231前言1.1单片机交通控制系统的选题背景世界上第一盏正式投入使用的交通信号灯出现在1868年12月10日,这盏身高7米,由德哈特设计的红绿两色煤气灯出现在议会大厦前的十字路口。一位警察手持长杆牵动皮带转换红绿两色:红灯停,绿灯行。随着人口快速的增多,交通工具的爆炸性的发展,以及道路资源的有限性,交通控制就应运而生,在人类的生活、工作环境中,交通扮演着极其重要的角色,人们的出行都无时不刻与交通打着交道。自18世纪工业革命以来,工业发展带动整个交通运输的发展,从而催生了单独的交通控制学问与管理机构.道路交通信
5、号灯是交通安全产品中的一个类别,是为了加强道路交通管理,减少交通事故的发生,提高道路使用效率,改善交通状况的一种重要工具.适用于十字、丁字等交叉路口,由道路交通信号控制机控制,指导车辆和行人安全有序地通行。1.2 单片机交通控制系统选题的现实意义 城市道路交通自动控制系统的发展是以城市交通信号控制技术为前导,与汽车工业并行发展的。在其各个发展阶段,由于交通的各种矛盾不断出现,人们总是尽可能地把各个历史阶段当时的最新科技成果应用到交通自动控制中来,从而促进了交通自动控制技术的不断发展。交通网络是城市的动脉,象征着一个城市的工业文明水平。交通关系着人们对于财产,安全和时间相关的利益。具有优良科学的
6、交通控制技术对资源物流和人们出行都是十分有价值的,保证交通线路的畅通安全,才能保证出行舒畅,物流准时到位,甚至是生命通道的延伸。1。3单片机交通控制系统主要研究的内容基于整个交通控制系统的发展情况,本设计主要进行如下方面的研究:用智能,集成,且功能强大的单片机芯片为控制中心,设计出一套十字路口的交通控制系统,以指挥该路口的实时通行状态. 本设计主要做了如下几方面的工作: 一是确定系统交通控制的总体设计,包括十字路口具体的通行禁行方案设计以及系统应拥有的各项功能,在这里,本设计除了有信号灯状态控制能实现基本的交通功能,还增加了倒计时显示提示,基于实际情况,又要求了对车流量检测及自调整模拟功能,违
7、规检测及处理,紧急状况处理。二是进行智能传感器的硬件电路,显示电路等的设计对各器件的选择及连接,大体分配各个器件及模块的基本功能要求。2方案设计2。1课程设计目的2。1.1巩固和加深对单片机原理和接口技术知识的理解;2。1。2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;2。1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;2。1。5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图.2。1。6通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。2。1。7通过交通信号灯控制系统的
8、设计,掌握定时/计数器及中断的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力。2。2设计思路东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。红灯亮禁止通行,绿灯亮允许通行。黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。设东西道比南北道的车流量大,指示灯燃亮的方案如表1:车道时间60s3s2s35s3s东西道绿灯黄灯红灯红灯红灯南北道红灯红灯红灯绿灯黄灯 表1表1说明:(1)当东西道为绿灯,此道车辆通过,行人禁止通行。时间为60秒;南北方向为红灯,此道车辆禁止通行,南北道行人可通过。(2)当东西方向
9、为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换;南北方向为红灯,此道车辆禁止通行,南北道行人可通过。(3)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;当南北方向为红灯,此道车辆禁止通行,南北道行人可通过.(4)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;东西道为绿灯,此道车辆通过,行人禁止通行。时间为35秒。(5)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北方向为黄灯闪烁3秒,警示车辆和行人红、绿灯的状态即将切换。(6)此表可根据车流量动态设定红绿灯初始值。2。3设计原理人行道人行道人行道 人行道1、首先了解实际交通灯的变化情况和规律.假设一个十字路口如
10、上图所以,为东南西北走向。初始状态0为东西南北都红灯亮。然后转状态1东西红灯亮,南北绿灯亮通行.过一段时间后,转状态2,黄灯亮,东西红灯灭,南北绿灯灭。再转状态3,东西绿灯通车,南北红灯亮.过一段时间后转状态4,黄灯亮,东西绿灯灭南北红灯灭.一段时间后,又循环至状态1。中间可通过中断按钮产生中断,跳入中断程序执行中断。列出交通信号灯的状态表如下:(其中,1代表灯亮,0代表灯灭)状态北西南东绿黄红绿黄红绿黄红绿黄红000100100100111000011000012010010010010300110000110040100100100102、对于交通信号灯来说,应该有东西南北共四组灯,但由于
11、同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理.每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展.5、通过脉冲中断编写中断程序,可实现中断。3系统硬件设计选用设备:AT89C51单片机一片,74LS47芯片二片,电阻排RESPACK7三个,共阴极的七段数码管7SEG-MPX2-CA两个,红、黄、绿交通灯各四个,开关键盘、连线、
12、电阻、电容若干。3。1、AT89C51芯片简介AT89C51单片机内部结构AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线.MCS51的引脚说明:MCS51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用经综合对本系统的分析,选用AT89C51单片机就非常合适,AT89C51有P0,P1,P2,P3四个外部接
13、口,介绍如下:P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入端用。 在访问外部数据存储器或程序存储器时,P0口被分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).此外,P1。0和P1.2分别作定时器/计数器2的外部计数输入(
14、P1。0/T2)和时器/计数器2的触发输入(P1。1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。 P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路.对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口.P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对P3 口写入“1”时,它们被内部上拉电阻拉高并可作
15、为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG-当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节.一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG).PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机
16、器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号.EA/VPP-外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地).需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。下图是MCS-51系列单片机的内部结构示意图1。 图1单片机的复位及初始化如图2: 图23。274LS47芯片简介74LS47的端子功能图如下图3: 图374LS47的主要功能端如下:BI为熄灭输入端,低电平有效,当BI=0时,无论其他输入端状态如何,
17、译码器输出七段同时熄灭;BI=1时,不影响译码器正常译码。LT为测试输入端,低电平有效,用于检查数码管的七段是否正常发光.当LT=0,同时BI=1时,不管输入的B南北码是什么状态,都可使驱动数码管的七段同时点亮。译码器要正常译码,必须LT输入无效电平。RBI为灭零输入端,低电平有效.设置灭零输入端的目的是为了能将不希望显示的0熄灭,例如一个四位数码显示电路,整数部分两位,小数部分两位,在显示6。4时,将出现06.40的字样,如果将前、后多余的0熄灭,显示的结果更醒目一些.灭零输入端只能对显示的0进行熄灭,而对其他数字没有影响。在原理图中,译码器与数码管的连接如图4: 图43。3系统总框图如下:
18、74LS47七段驱动器数据口数码管显示CD方向时 间89C51系 统 处 理键盘设置时间参数东西和CD方向红绿黄三种灯的显示情况74LS47七段驱动器数据口数码管显示东西方向时 间3。4、交通灯硬件线路图:3.5、系统工作原理(1)开关键盘a、改变数码管显示的时间;b、开关控制十字路口十个方向的灯同时显示红灯且数码管显示00.(2) 由AT89C51单片机每秒钟通过P0、P2口向74LS47的数据口送信息,由P1口显示红、绿、黄灯的燃亮情况;由7SEGMPX2CA显示每个灯的燃亮时间。(3)AT89C51 P3。3为低电平时,P1口对应的红灯即四个方向的红灯亮,数码显示为00.(4 AT89C
19、51 P3。2有下降沿触发时,时间暂停,进入时间显示状态,当P3.6为低电平时,时间显示以240ms的速度进行加1;当P3。7为低电平时,时间显示以240ms的速度进行减1;当P1.0为低电平时,时间暂停消除,恢复正常.(5)初始状态东西方向绿灯60秒南北方向红灯65秒.(6)当东西方向绿灯60秒倒计时完了。进入下一阶段,东西方向黄灯3秒,且黄灯以40ms的速度闪烁;南北方向红灯5秒。(7)当东西方向黄灯3秒倒计时完。进入第三阶段,东西方向红灯40秒;南北方向红灯2秒.(8)当南北方向红灯2秒倒计时完.进入第四阶段,东西方向红灯38秒;南北方向绿灯35秒。(9)当南北方向绿灯35秒倒计时完.进
20、入第五阶段,东西方向红灯3秒;南北方向黄灯3秒,且黄灯以40ms的速度闪烁。(10)东西方向红灯和南北方向黄灯3秒同时倒计时完毕,重新循环。4软件设计4.1、每秒钟的设定延时方法可以有两种一中是利用AT89C51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。4。2、秒的方法我们采用在主程序中设定一个初值为的软件计数器和使定时毫秒这样每当到毫秒时就响应它的溢出中断请求,进入他的中断服务子程序。在中断服务子程序中,先使软件计数器减,然后判断它是否为零。为零表示秒已到可以返回到输出时间显示程序。4.3、相应程序代码()主程序定时器需定时10毫秒,故工作于方式。初值:T0初值=21
21、6fose/12Xt=216-(12X106X0.01)/12=55536D=D8F0H ORG 0000H MAIN: MOV TMOD,01H MOV TL0,0F0H MOV TH0,0D8H SETB EA SETB ET0 SETB TR0 SETB EX0 SETB EX1 SETB IT0 CLR IT1 SETB PT0()中断服务子程序 ORG 000BHZHD2: MOV TL0,#0F0H ;重先赋值 MOV TH0,0D8H CLR P3。4 RETI4。4、键盘显示流程图键盘“设置”按下主程序“加”键按下程序设 置“加”数字显示程序“减”数字显示程序主程序“减”键按下
22、4.5、 软件延时MCS51的工作频率为212MHZ,我们选用的AT89C51单片机的工作频率为12MHZ。机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12(1/12M)=1us.我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。 具体的延时程序分析:DEL: MOV R7,40 ; ;延时10msDEL1: MOV R6,#123 NOPDEL2: DJNZ R6,DEL2 DJNZ R7,DEL1 RET 5 、Proteus软件仿真5。1交通灯控制系统正常运行时仿真图(见下图)5。2 交通灯东西方向向南北方向转变,黄灯亮5。3应急
23、情况下,东西南北方向都为红灯,如下图6、设计心得体会通过这次课程设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步.本次课程设计的过程是艰辛的,不过收获却是很大的.在设计过程中,会出现了一些问题,但都是常见的小问题,如:代码中双引号的使用并不是在英语书写状态下,输入字母出错等,在调试时出现异常,不过这些都是经常性错误,经过调试修改都一一解决,程序顺利完成,并实现了其功能。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更进一步的
24、理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流.由于使用的是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大,而且可以随时的更新系统,进行不同状态的组合。但是在我们设计和调试的过程中,也发现了一些问题,譬如红灯和绿灯的切换还不够迅速,红绿灯规则不效率还不是很高等等,这需要在实践中进一步完善.当然,通过这次课程设计,我也发现了自身的很多不足之处,在以后的学习中,我会不断的完善自我。附录1: 源程序代码 ORG 0000H ;伪指令、程序开始、中断入口地址 LJMP MAIN ORG 0003H LJMP ZHD1 OR
25、G 000BH LJMP ZHD2 ORG 0013H LJMP ZHD3 ORG 1000H;主程序MAIN:MOV TMOD,01H ;设工作方式 MOV TL0,#0F0H ;设初值 ,单片机晶振12M,定时10ms MOV TH0,#0D8H SETB EA ;开放总中断 SETB ET0 ;开放T0中断 SETB TR0 ;启动T0定时 SETB EX0 ;开放外中断0 SETB EX1 ;开放外中断1 SETB IT0 ;设外中断0为边沿触发 CLR IT1 ;设外中断1为低电平有效 SETB PT0CYCLE:MOV R0,60 ;AB方向绿灯显示时间 MOV R1,#65 ;C
26、D方向红灯显示时间 MOV R2,25 ;为延时1秒而用;CD红灯 AB绿灯LOOP1:SETB P3.4 MOV P1,01H SETB P1.7 ;点亮红灯 SETB P1。4 ;点亮绿灯 LCALL DISPLAY ;调用显示程序 DJNZ R2,LOOP1 MOV R2,#25 DEC R1 DJNZ R0,LOOP1 MOV R0,3 ;AB方向黄灯显示时间;CD红灯 AB黄灯LOOP2:MOV P1,01H SETB P1。7 ;点亮红灯 SETB P1.3 ;点亮黄灯LLJ: LCALL DISPLAY ;调用显示程序 CPL P1。3DJNZ R2,LLJ DEC R1 MOV
27、 R2,25 DJNZ R0,LOOP2 MOV R0,40 ;AB方向红灯显示时间;CD红灯 AB红灯LOOP3:MOV P1,#01H SETB P1.7 ;点亮红灯 SETB P1。2 ;点亮红灯 LCALL DISPLAY ;调用显示程序 DJNZ R2,LOOP3 MOV R2,25 DEC R0 DJNZ R1,LOOP3 MOV R1,35 ;CD方向绿灯显示时间;CD绿灯 AB红灯LOOP4:MOV P1,01H SETB P1。5 ;点亮绿灯 SETB P1。2 ;点亮红灯 LCALL DISPLAY ;调用显示程序 DJNZ R2,LOOP4 MOV R2,25 DEC R
28、0 DJNZ R1,LOOP4MOV R1,#3 ;CD方向黄灯显示时间;CD黄灯 AB红灯LOOP5:MOV P1,01H SETB P1.6 ;点亮黄灯 SETB P1.2 ;点亮红灯LLJ1: LCALL DISPLAY ;调用显示程序 CPL P1。6DJNZ R2,LLJ1 MOV R2,#25 DEC R0 DJNZ R1,LOOP5 LJMP CYCLE;键盘中断程序ZHD1: LCALL DISPLAY JB P3。6,Q2 INC R1 INC R0 CJNE R1,99,TIAO2 MOV R1,#00HTIAO2:CJNE R0,#99,TIAO3MOV R0,00HTI
29、AO3:LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY JNB P1.0,Z2Q2: JB P3。7,WAIT1DEC R1 DEC R0 CJNE R1,#00H,TIAO MOV R1,99TIAO: CJNE R0,#00H,TIAO1MOV R0,#99TIAO1:LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAY LCALL DISPLAYWAIT1:JNB P1.0,Z2WAI
30、T: LJMP ZHD1Z2: RETI;时间中断程序ZHD2: MOV TL0,#0F0H ;重先赋值 MOV TH0,#0D8H CLR P3。4 RETI;应急通道中断程序ZHD3:MOV P1,85HMOV P0,30H MOV P2,30H JNB P3。3,ZHD3 RETI;数显显示DISPLAY:MOV A,R0 ;AB方向时间的显示 MOV B,10 DIV AB ;把要显示的数的十位存放在A中,个位存放在B中 ADD A,#10H ;位选通十位 MOV P0,A ;显示十位数字TI0: JNB P3。4,TT SJMP TI0TT: SETB P3。4 MOV A,B AD
31、D A,#20H ;位选通个位 MOV P0,A ;显示个位数字TI1: JNB P3.4,TT1 SJMP TI1TT1: SETB P3。4;CD方向的显示 MOV A,R1 ;CD方向时间的显示 MOV B,10 DIV AB ADD A,#10H ;位选通十位 MOV P2,A ;显示十位数字TI2: JNB P3。4,TT2 SJMP TI2TT2: SETB P3.4 MOV A,B ADD A,20H ;位选通个位 MOV P2,A ;显示个位数字TI3: JNB P3。4,TT3 SJMP TI3TT3: SETB P3。4 RET附录2:硬件连接图参考文献1、单片微机原理与接口技术主编:曾一红 副主编:刘虹、李寿强2、数字电子技术蒋正萍、刘虹、张松、李小平编著3、