自动化大学方案单片机交通灯系统方案Word格式.docx
《自动化大学方案单片机交通灯系统方案Word格式.docx》由会员分享,可在线阅读,更多相关《自动化大学方案单片机交通灯系统方案Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;
另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
第二章交通管理方案论证
2.1设计任务:
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
设东西道比南北道的车流量大,指示灯燃亮的方案如表2。
表2亮灯顺序和间隔时间
60S
5S
100S
……
东西道
红灯亮
黄灯亮
绿灯亮
南北道
2.2方案介绍:
<
1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;
南北道为绿灯,此道车辆通过,行人禁止通行。
时间为60秒。
2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换。
3)当东西方向为绿灯,此道车辆通行;
南北方向为红灯,南北道车辆禁止通过,行人通行。
时间为100秒。
东西方向车流大通行时间长。
4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。
5)此表可根据车流量动态设定红绿灯初始值。
第三章交通灯系统硬件设计
3.1单片机的概述:
单片机是一块集成电路芯片上集中了控制器、存储器、运算器和输入输出端口的单片微型计算机,它体积小,耗电省,主要用于构成工业控制单元,在过程控制、智能仪表、机电一体化和家用电器等领域起着重要的控制作用,所以准确反映单片机本质的叫法应是微控制器<
MicroControllerUnit,MCU)。
通常,单片机由单个集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机自1976年由美国Inter公司推出MCS-48系列以来,从技术到应用都有了相当大的发展。
经过4个阶段的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化,以及低电压、低功耗。
可以说,二十一世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
不过,这种电脑通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
现在,单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
3.2芯片的选择与介绍
3.2.1MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM>
、数据存储器(RAM>
、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
·
中央处理器:
中央处理器(CPU>
是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作[4]。
数据存储器(RAM>
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表[4]。
图18051内部结构图
程序存储器(ROM>
:
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格[4]。
定时/计数器(ROM>
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向[4]。
并行输入输出(I/O>
口:
8051共有4组8位I/O口(P0、P1、P2或P3>
,用于对外部数据的传输[4]。
全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用[4]。
中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择[2]。
时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard>
结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton>
结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构[7]。
下图是MCS-51系列单片机的内部结构示意图
3.2.28255芯片简介
8255可编程并行接口芯片简介:
8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入[6]。
8255可编程并行接口芯片方式控制字格式说明:
8255有两种控制命令字;
一个是方式选择控制字;
另一个是C口按位置位/复位控制字。
其中C口按位置位/复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述,需要时用户可自行查找有关资料。
方式控制字格式说明如表1:
表1、方式选择控制格式
D7
D6
D5
D4
D3
D2
D1
D0
D7:
设定工作方式标志,1有效。
D6、D5:
A口方式选择
00—方式0
01—方式1
1×
—方式2
D4:
A口功能<
1=输入,0=输出)
D3:
C口高4位功能<
D2:
B口方式选择<
0=方式0,1=方式1)
D1:
B口功能<
D0:
C口低4位功能<
8255可编程并行接口芯片工作方式说明:
方式0:
基本输入/输出方式。
适用于三个端口中的任何一个。
每一个端口都可以用作输入或输出。
输出可被锁存,输入不能锁存[6]。
方式1:
选通输入/输出方式。
这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号[6]。
方式2:
双向总线方式。
只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号[6]。
2.3.374LS373简介
74LS373是一种带三态门的8D锁存器,其管脚示意图如下示:
其中:
1D-8D为8个输入端。
1Q-8Q为8个输出端。
LE为数据打入端:
当LE为“1”时,锁存器输出
状态同输入状态;
当LE由“1”变“0”时,数据打入锁存器
OE为输出允许端:
当OE=0时,三态门打开;
当OE=1时,三态门关闭,输出高阻。
第四章控制器的软件设计
4.1每秒钟的设定
延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
4.2计数器硬件延时
4.2.1计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器摸值,该值和计数器工作方式有关。
在方式0时M为213;
在方式1时M的值为216;
在方式2和3为28。
4.2.2计算公式
T=<
M-TC)T计数
或TC=M-T/T计数
T计数是单片机时钟周期TCLK的12倍;
TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.192毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题[1]。
4.2.31秒的方法
我们采用在主程序中设定一个初值为20的软件计数器和使TO定时50毫秒.这样每当TO到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零,为零表示1秒已到可以返回到输出时间显示程序[1]。
4.2.4相应程序代码
1)主程序
定时器需定时50毫秒,故T0工作于方式1。
初值:
TC=M-T/T计数 =216 -50ms/1us=15536=3CBOH
ORG1000H
START:
MOVTMOD,#01H。
令T0为定时器方式1
MOVTH0,#3CH。
装入定时器初值
MOVTL0,#BOH 。
MOVIE, #82H。
开T0中断
SEBT TRO 。
启动T0计数器
MOV RO, #14H 。
软件计数器赋初值
LOOP:
SJMP$ 。
等待中断
2)中断服务子程序
ORG000BH
AJMPBRTO
ORG00BH
BRTO:
DJNZRO,NEXT
AJMPTIME。
跳转到时间及信号灯显示子程序
DJNZ:
MOV RO,#14H 。
恢复RO值
MOVTH0,#3CH。
重装入定时器初值
MOVTL0,#BOH
MOVIE, #82H
RET1
END
4.3软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8051单片机的工作频率为6MHZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*<
1/6M)=2us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DELAY:
MOVR4,#08H。
延时1秒子程序
DE2:
LCALLDELAY1
DJNZR4,DE2
RET
DELAY1:
MOVR6,#0。
延时125ms子程序
MOVR5,#0
DE1:
DJNZR5,$
DJNZR6,DE1
MOVRN,#DATA字节数数为2。
机器周期数为1
所以此指令的执行时间为2ms
DELAY1为一个双重循坏循环次数为256*256=65536所以延时时间=65536*2=131072us约为125us
DELAYR4设置的初值为8主延时程序循环8次,所以125us*8=1秒
由于单片机的运行速度很快其他的指令执行时间可以忽略不计[4]。
4.4时间及信号灯的显示
4.4.18051并行口的扩展
8051虽然有4个8位I/O端口,但真正能提供借用的只有P1口,因为P2和P0口通常用于传送外部传送地址和数据,P3口也有它的第二功能。
因此,8031通常需要扩展。
由于我们用外部输入设定红绿灯倒计时初值、数码管的输出显示、红绿黄信号灯的显示都要用到一个I/O端口,显然8031的端口是不够,需要扩展。
扩展的方法有两种:
1)借用外部RAM地址来扩展I/O端口;
2)采用I/O接口新片来扩充。
我们用8255并行接口信片来扩展I/O端口[10]。
4.4.2显示原理:
当定时器定时为1秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值,重新进入循环。
4.4.38255PA口输出信号接信号灯
由于发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以可以用置位方法点亮红,绿,黄发光二极管。
8255输出信号与数码管的连接
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形如SP,g,f,e,d,c,b,a管角上加上7FH所以 SP上为0伏,不亮其余为TTL高电平,全亮则显示为8[10]。
采用共阴级连接:
其中PC0\PB0-a,
PC1\PB1-b,
PC2\PB2-c,
PC3\PB3-d,
PC4\PB4-e,
PC5\PB5-f,
PC6\PB6-g
PC7\PB7-SP接地
表3驱动代码表
显示数值
dopgfedcba
驱动代码<
16进制)
00111111
3FH
1
00000110
06H
2
01011011
5BH
3
01001111
4FH
4
01100110
66H
5
01101100
6DH
6
01111100
7DH
7
00000111
07H
8
01111111
7FH
4.4.48255与8051的连接
用8051的P0口的p0.7连接8255的片选信号CS我们用8031的地址采用全译码方式,当p0.7=0时片选有效,其他无效,p0.1用于选择8255端口。
P0.7p0.6p0.5p0.4p0.3p0.2P0.1P0.0
A7A6A5A4A3A2A1A0
1XXXXX0000H为8255的PA口
1XXXXX0101H为8255的PB口
1XXXXX1002H为8255的PC口
1XXXXX1103H为8255的控制口
由于8051是分时对8255和储存器进行访问所以8051的P0口不会发生冲突[10]。
4.5程序设计
4.5.1流程图如图所示[11]
图9程序流程图
4.5.2程序源代码[11]
ORG0000H。
主程序的入口地址
LJMPMAIN。
跳转到主程序的开始处
ORG0003H。
外部中断0的中断程序入口地址
ORG000BH。
定时器0的中断程序入口地址
LJMPT0_INT。
跳转到中断服务程序处
ORG0013H。
外部中断1的中断程序入口地址
MAIN:
MOVSP,#50H
MOVIE,#8EH。
CPU开中断,允许T0中断,T1中断和外部中断1中断
MOVTMOD,#51H。
设置T1为计数方式,T0为定时方式,且都工作于模式1
MOVTH1,#00H。
T1计数器清零
MOVTL1,#00H
SETBTR1。
启动T1计时器
SETBEX1。
允许INT1中断
SETBIT1。
选择边沿触发方式
MOVDPTR,#0003H
MOVA,#80H。
给8255赋初值,8255工作于方式0
MOVX@DPTR,A
AGAIN:
JBP3.1,N0。
判断是否要设定东西方向红绿灯时间的初值,若P3.1为1则跳转
MOVA,P1
JBP1.7,RED。
判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间
MOVR0,#00H。
R0清零
MOVR0,A。
存入东西方向绿灯初始时间
MOVR3,A
LCALLDISP1
LCALLDELAY
AJMPAGAIN
RED:
ANLA,#7FH。
P1.7置0
MOVR7,#00H。
R7清零
MOVR7,A。
存入东西方向红灯初始时间
。
-------------------------------------------
N0:
SETBTR0。
启动T0计时器
MOV76H,R7。
红灯时间存入76H
N00:
MOVA,76H。
东西方向禁止,南北方向通行
MOVDPTR,#0000H。
置8255A口,东西方向红灯亮,南北方向绿灯亮
MOVA,#0DDH
N01:
JBP2.0,B0
N02:
SETBP3.0
CJNER3,#00H,N01。
比较R3中的值是否为0,不为0转到当前指令处执行
------黄灯闪烁5秒程序------
N1:
MOVR3,#05H
置8255A口,东西,南北方向黄灯亮
MOVA,#0D4H
MOVX@DPTR,A
N11:
MOVR4,#00H
N12:
CJNER4,#7DH,$。
黄灯持续亮0.5秒
N13:
置8255A口,南北方向黄灯灭
N14:
黄灯持续灭0.5秒
CJNER3,#00H,N1。
闪烁时间达5秒则退出
------------------------------------------------------------
N2:
MOVR7,#00H
MOVA,R0。
东西通行,南北禁止
置8255A口,东西方向绿灯亮,南北方向红灯亮
MOVA,#0EBH
N21:
JBP2.0,T03
N22:
CJNER3,#00H,N21
N3:
MOVA,#0E2H
N31:
N32:
N33:
CJNER3,#00H,N3。
SJMPN00
------闯红灯报警程序------
B0:
MOVR2,#03H。
报警持续时间3秒
B01:
MOVA,R3
JZN1。
若倒计时完毕,不再报警
CLRP3.0。
报警
CJNER2,#00H,B01。
判断3秒是否结束
SJMPN02
------1秒延时子程序-------
N7:
RETI
T0_INT:
MOVTL0,#9AH。
给定时器T0送定时10ms的初值
MOVTH0,#0F1H
INCR4
INCR5
CJNER5,#0FAH,T01。
判断延时是否够一秒,不够则调用显示子程序
MOVR5,#00H。
R5清零
DECR3。
倒计时初值减一
DECR2。
报警初值减一
T01:
ACALLDISP。
调用显示子程序
RETI。
中断返回
------显示子程序------
DISP:
JNBP2.4,T02
DISP1:
MOVB,#0AH
M