交通信号灯控制系统课程设计报告.docx
《交通信号灯控制系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《交通信号灯控制系统课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
交通信号灯控制系统课程设计报告
单片机原理及应用
课程设计报告
设计题目:
交通信号灯控制系统
班级:
11级电气三班
指导教师:
琳琳
学生姓名:
杰
远东理工学院机器人科学与技术学院
2013年5月30日
交通信号灯控制系统
[摘要]:
随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题。
因此,设计可靠、安全、便捷的多功能交通灯控制系统有极大的现实必要性。
设计中包括硬件电路的设计和程序设计两大步骤,对单片机学习中的几个重要容都有涉足。
对单片机初学者一定的帮助,同时,设计也可运用于简单的实时交通灯控制,具有一定的现实意义。
特别是街道各十字路倒计时显示通行时间,并有急车强行通过、交通异常状况判别及处理等功能,该系统具有设计周期短、可靠性高、维护方便、使用简单等优点。
更是成为交通网行能力的“隘口”和交通事故的“多发源”。
为保证交通安全,防止交通阻塞,使城市交通井然有序,交通信号灯在大多数城市得到了广泛应用。
传统的交通信号灯控制一般采用电子线路和继电器控制,结构复杂,可靠性低,故障率高,因此研究计算机与自动控制技术,设计新型的交通灯控制系统,对缓解交通阻塞,提高畅通率具有十分现实的意义。
以下通过介绍一种基于8051的交通灯控制系统,东西、南北的通行时间可调,能倒计时显示通行时间,并有急车强行通过、交通异常状况判别及处理等功能,该系统具有设计周期短、可靠性高、维护方便、使用简单等优点。
[关键词]:
交通灯;单片机;自动控制;程序设计;倒计时;急车强通控制;异常状况判别及处理。
1、交通灯系统工作原理及设计方案
1.1交通灯工作原理
采用单片机I/O口P1直接和交通灯连接,控制程序放在8051单片机ROM中。
十字路口4组红、黄、绿交通灯中,东西方向的交通灯工作状态相同,可以用同一组I/O控制;南北方向的交通灯工作状态也相同,也可以用同一组I/O控制,所以只需要用到单片机的P1.0到P1.5控制。
由于交通灯为发光二极管且阳极通过限流电阻和电源正极连接,因此I/O输出低电平时与之相连接的相应指示灯会亮,I/O口输出高电平时相应指示灯会灭.紧急车请求通过的信号由人工控制,以中断方式输入单片机.无紧急车通过时,中断引脚INT0(P3.2)通过电阻和电源正极连接为高电平,不产生中断,单片机执行主程序;有紧急车通过时,中断引脚INT0(P3.2)采用人工方法接地为低电平,产生中断请求,单片机执行中断程序,紧急通过,之后,中断引脚INT0(P3.2)采用人工方法恢复高电平,返回主程序执行。
2计原理分析
2.1单片机交通控制系统设计
1.首先了解实际交通灯的变化情况和规律。
假设一个十字路口如上图所以,为东
南西北走向。
初始状态0为东西南北都红灯亮。
然后转状态1西绿灯通车,南北红灯亮。
过一段时间后,转状态2,东西绿灯灭,黄灯闪几下,南北还是红灯。
再转状态3,南北绿灯通车,东西红灯亮。
过一段时间后转状态4,南北绿灯灭,闪几个黄灯,东西还是为红灯亮,一段时间后,又循环至状态1。
表2.1列出交通信号灯的状态表如下:
(其中,1代表灯亮,0代表灯灭)
2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。
3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。
每延
时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。
4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时
间的显示功能,实现其功能的扩展。
2.2单片机交通控制系统的功能要求
本设计能模拟基本的交通控制系统,用红绿黄灯表示禁行,通行和等待的信号发生,还能进行倒计时显示,车流量检测及调整,交通违规处理和紧急处理等功能。
2.2.1倒计时显示
倒计时显示可以提醒驾驶员在信号灯灯色发生改变的时间、在“停止”和“通过”两者间作出合适的选择。
驾驶员和行人普遍都愿意选择有倒计时显示的信号控制方式,并且认为有倒计时显示的路口更安全。
倒计时显示是用来减少驾驶员在信号灯色改变的关键时刻做出复杂判断的1种方法,它可以提醒驾驶员灯色发生改变的时间,帮助驾驶员在“停止”和“通过”两者间作出合适的选择。
2.2.2时间手动设置
除系统根据车流量自动控制调整,也可以通过键盘进行手动设置,增加了人为的可控性,避免自动故障和意外发生,并再紧急状态下,可设置所有灯变为红灯。
键盘是单片机系统中最常用的人机接口,一般情况下有独立式和行列式两种。
前者软件编写简单,但在按键数量较多时特别浪费I/0口资源,一般用于按键数量少的系统。
后者适用于按键数量较多的场合,但是在单片机I/0口资源相对较少而需要较多按键时,此方法仍不能满足设计要求。
本系统要求的按键控制不多,且I/0口足够,可直接采用独立式。
2.3单片机交通控制系统的基本构成及原理
单片机设计交通灯控制系统,可用单片机直接控制信号灯的状态变化,基本上可以指挥交通的具体通行,当然,接入LED数码管就可以显示倒计时以提醒行使者,更具人性化。
本系统在此基础上,加入了违规检测电路和车流量检测电路为单片机采集数据,单片机对此进行具体处理,及时调整控制指挥,为了超越视觉指挥的局限性,同时接上蜂鸣器,在听觉上加强了指挥提醒作用。
系统的总框图
据此,本设计系统以单片机为控制核心,连接成最小系统,由车流量检测模块,违规检测模块,和按键设置模块等产生输入,信号灯状态模块,
LED倒计时模块和蜂鸣器状态模块接受输出。
系统的总体框图如上所示。
键盘设置模块对系统输入模式选择及具体通行时间设置的信号,系统进入正常工作状态,执行交通灯状态显示控制,同时将时间数据倒计时输入到LED数码管上实时显示。
在此过程中还要实时捕捉违规检测和紧急按键信号,以达到对异常状态进行实时控制的目的。
急停按键和违规检测随时调用中断。
式选择上,若为自动模式,将不断调用车流量检测模块对车流量进行捡测统计达一定时间将修正通行时间一满足不同路况的需要。
3系统硬件电路的设计
实现本设计要求的具体功能,可以选用AT89S51单片机及外围器件构成最小控制系统,12个发光二极管分成4组红绿黄三色灯构成信号灯指示模块,8个LED东西南北各两个构成倒计时显示模块,若干按键组成时间设置和模式选择按钮和紧急按钮等。
3.2主控制部分――AT89C51单片机简介
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51单片机为40引脚双列直插芯片,有4个I/O口,P0,P1,P2,P3,单片机的最小系统如图所示,8引脚和19引脚接时钟脉冲电路,XTAL1外部晶振和微调电容的一端,在片它是震荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片她是振荡器倒相放大器的输出端,第9引脚为复位输入端,接上电容,电阻及开关后构成上电复位电路,20引脚为接地端,40引脚为电源端(图中未显示)。
如图所示:
晶振与单片机的连接
3.2.1AT89C51的部结构功能
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(部RAM):
数据存储器用于存放变化的数据。
AT89S51中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。
·程序存储器(部ROM):
序存储器用于存放程序和固定不变的常数等。
通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。
AT89C51部配置了4KB闪存。
·定时/计数器(T0):
定时/计数器用于实现定时和计数功能。
AT89C51共有2个16位定时/计数器。
·并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
每个口都由1个锁存器和一个驱动器组成。
它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。
·全双工串行口:
A89C51置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·时钟电路:
钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
·中断系统:
中断系统的作用主要是对外部或部的终端请求进行管AT89C51共有5个中断源,其中有2个外部中断源和3个部中断源。
3.2.251
单片机的串行接口工作方式51单片机的串行接口有四种工作方式。
方式0是将SBUF作为位同步移位寄存器使用(固定波特率);方式1是10位异步通信方式(可变波特率);方式2是11位异步通信方式(固定波特率);方式3是11位异步通信方式(可变波特率)。
串行接口与单片机的连接
3.3控制部分――74LS164芯片简介
3.3.174LS164
芯片的引脚图和说明
74LS164芯片图及其与51单片机的连接方式:
3.4其它器件
3.4.1发光二极管
根据本设计的特点,红绿灯的显示不可少,红绿灯的显示采用普通的发光二极管。
每个方向上设置红绿黄灯,总共4组。
如果东西红灯亮,那南北方向就是绿灯亮,反之亦然,所以在硬件上连接图上也是对称分布的,如下图所示。
信号灯的连接
在本设计中,实际控制的灯只有6个,即:
东西红灯,东西绿灯,东西黄灯,南北红灯,南北绿灯,南北黄灯,其中均是低电平有效。
共有4钟状态:
东西红灯亮,南北绿灯亮(11011101/DDH);东西红灯亮,南北黄灯亮(10111101/BDH);东西绿灯亮,南北红灯亮(11101101/EDH);东西黄灯亮,南北红灯亮(11100111/E7H)。
括号中是P1端口8个引脚值P1.7,P1.6,P1.5,P1.4,P1.3,P1.2,P1.1,P1.0以及对应的十六进制码。
在用于显示发光二极管时,直接由MOV指令将十六进制码送入P1口。
刚才的4个状态是依次变换的,这就要涉及到状态的判断和衔接了。
先把P1端口的值与所有的4个状态码比较,若相同则判断成功当前状态,再把下一状态的状态码送显P1即可。
3.4.2八段LED数码管
LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。
LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。
以八段共阴管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阴极连在一起。
这样,一个LED数码管就有I根位选线和8段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。
为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。
LED数码管
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如dp,g,f,e,d,c,b,a全亮显示为8。
(采用共阴极连接)
LED8段数码管的设置为每个方位上的一对2为显示器。
四个方位上总共用8个LED接在单片机的IO口上。
虽然路口不一样,但是显示的时间在数字上是一样的,所以两边连接的IO口是对称的。
因为输出口较少的原因,所以每个十位,个位的数据的传输必须采用动态扫描的方式,因为人眼的视觉原因,人们会认是同时点亮的。
下面我们用这种方法显示交通灯的时间,南北方向要显示20秒,东西方向要显示25秒,那么我们先给P0口送2的共阴极码即5BH,让第一位2要显示的位码GND段为低电平,其它七位的控制端都接高电平,那么第一位就显示2,其它七位不亮。
让其显示1MS后再给P0口送0的共阴极码即3FH,让第二位要显示0的位码GND段为低电平,其它七位的控制端都接高电平,那么第二位就显示0,其它七位不亮。
依此类推分别送完第一位2,第二位0,第三位2,第四位5„„每一位点亮1MS一个扫描周期为8MS,一秒时间就要扫描125次
3.5交通信号模拟控制系统原理图
本系统以单片机为核心,系统硬件电路由单片机违规,状态灯,LED显示,按键,蜂鸣器组成。
其具体的硬件电路总图如图所示。
系统原理图
3.6件资源及其分配
主要用到的硬件:
P1口、P3口、LED数码管、LED发光二极管、定时器T0
硬件分配:
1)、P1口:
做为输出口,与发光二极管相连接,其状态及对应的十六进制值如下:
2)、P3口中的P3.0(RXD)和P3.1(TXD)作特殊用途,数据(倒计时时间)从RXD端输入,TXD端输出。
3)、74LS164和LED发光二极管用来显示灯亮情况。
4)、定时/计数器T0用来产生1秒的定时。
5)、74LS164和数码管用来显示时间。
3.7运行步骤
1、接硬件图接线,为了确保东西南北红黄绿灯能够对应显示,实验时,对P1口的接线做了调整。
即,P1.0接L3,P1.1接L2,P1.2接L1,P1.3接L6,P1.4接L5,P1.5接L3
2、S/P区DATA插孔接BUS3区P3.0S/P区CLK插孔接BUS3区P3.1S/P区CLR接/SP插孔
3、从0030H单元开始连续运行,观察六个LED灯是否与交通显示情况对应,如果有偏差,则单步运行或断点运行,进行调试,直至满足设计要求。
4、的显示后,从0030H开始连续运行,观察数码管显示的是否正常,如果不正常,则运用单步运行或断点运行进行分析和调试,直至满足要求。
5、整体运行,观察灯显示和时间显示是否都符合要求,如果不符合,则再调试。
直至满足要求。
3.8检测与调试
3.81硬件调试:
硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。
硬件调试可分为静态调试与动态调试两步进行。
静态调试
静态调试是在用户系统未工作时的一种硬件检测。
第一步:
目测。
检查外部的各种元件或者是电路是否有断点。
第二:
用万用表测试。
先用万用表复核目测中有疑问的连接点,再检测各种电源线与地线之间是否有短路现象。
第三步:
加电检测。
给板加电,检测所有的插座或是器件的电源端是否符合要求的值第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
第四步:
是联机检查。
因为只有用单片机开发系统才能完成对用户系统的调试。
动态调试
动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件部故障、器件连接逻辑错误等的一种硬件检查。
动态调试的一般方法是由近及远、由分到合。
由分到合是指首先按逻辑功能将用户系统硬件电路分为若干块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障围限定在某个局部的电路上。
当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。
由分到合的调试既告完成
由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。
调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。
3.8.2软件调试:
软件调试是通过对拥护程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
程序后,编辑,查看程序是否有逻辑的错误。
4系统软件程序的简单设计
4.1程序框图
图4.1程序框图
4.2程序流程图及程序
4.2.1程序流程图:
主程序:
4.2.2程序清单:
;主程序:
SECOND1EQU30H;东西路口计时寄存器
SECOND2EQU31H;南北路口计时寄存器
DBUFEQU40H;显示码缓冲区1
TEMPEQU44H;显示码缓冲区2
LED_G1BITP2.1;东西路口绿灯
LED_Y1BITP2.2;东西路口黄灯
LED_R1BITP2.3;东西路口红灯
LED_G2BITP2.4;南北路口绿灯
LED_Y2BITP2.5;南北路口黄灯
LED_R2BITP2.6;南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
值25sSTART:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
MOVP1,A;关闭不相关的LED
LOOP:
MOVR2,#20;置1S计数初值,50ms*20=1s
MOVR3,#20;红灯亮20S
MOVSECOND1,#25;东西路口计时显示初
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;回复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1S到否未到继续状态1
MOVR2,#20;置50MS计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20s
MOVR2,#5;置50MS计时初值5*4=20
MOVR3,#3;路灯闪3s
MOVR4,#4;闪烁间隔200ms
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY;
WAIT2:
LCALLSTATE2;调用状态2
JNBTF0,WAIT2;查询50ms到否
CLRTF0;
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAIT2;判断200MS到否未到继续状态2
CPLLED_G1;东西绿灯闪
MOVR4,#4;闪烁间隔200MS
DJNZR2,WAIT2;判1S到否未到继续状态2
MOVR2,#5;置50MS计数初值
DECSECOND1;东西路口显示时间减1S
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3S
MOVR2,#20;置50MS计数初值
MOVR3,#2;黄灯闪2S
MOVSECOND1,#2;东西路口计时显示初值2S
MOVSECOND2,#2;南北路口计时显示初值2S
LCALLDISPLAY
WAIT3:
LCALLSTATE3;调用状态3
JNBTF0,WAIT3;查询100MS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100MS
MOVTL0,#0B0H
DJNZR2,WAIT3;判断1S到否未到继续状态3
MOVR2,#20;置100MS计数初值
DECSECOND1;东西路口显示时间减1S
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2S
MOVR2,#20;置50MS计数初值
MOVR3,#20;红灯闪20S
MOVSECOND1,#25;东西路口计时显示初值25S
MOVSECOND2,#25;南北路口计时显示初值25S
LCALLDISPLAY
WAIT4:
LCALLSTATE4;调用状态4
JNBTF0,WAIT4;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT4;判断1S是否未到继续状态4
MOVR2,#20;置100MS计数初值
DECSECOND1;东西路口显示时间减1S
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT4;状态4维持20S
MOVR2,#5;置50MS计数初值
MOVR4,#4;红灯闪20S
MOVR3,#3;绿灯闪3S
MOVSECOND1,#5;东西路口计时显示初值5S
MOVSECOND2,#5;南北路口计时显示初值5S
LCALLDISPLAY
WAIT5:
LCALLSTATE5;调用状态5
JNBTF0,WAIT5;查询100MS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100MS
MOVTL0,#0B0H
DJNZR4,WAIT5;判断200MS到否?
未到继续状态5
CPLLED_G2;南北绿灯闪
MOVR4,#4;闪烁200MS
DJNZR2,WAIT5;判断1S到否?
未到继续状态5
MOVR2,#5;置100MS计时初值
DECSECOND1;东西路口显示时间减1S
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT5;状态5维持3S
MOVR2,#20;置50MS计数初值
MOVR3,#2;红灯闪2S
MOVSECOND1,#2;东西路口计时显示初值2S
MOVSECOND2,#2;南北路口计时显示初值2S
LCALLDISPLAY
WAIT6:
LCALLSTATE6;调用状态6
JNBTF0,WAIT6;查询100MS到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100MS
MOVTL0,#0B0H
DJNZR2,WAIT6;判断1S到否未到继续状态6
MOVR2,#20H;置100MS计数初值
DECSECOND1;东西路口显示时间减1S
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT6;状态6维持2S
LJMPLOOP;大循环
STATE1:
;状态1
SETBLED_G1;东西路口绿灯亮
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET