基于单片机的交通灯控制系统的设计.docx
《基于单片机的交通灯控制系统的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯控制系统的设计.docx(37页珍藏版)》请在冰豆网上搜索。
基于单片机的交通灯控制系统的设计
1引言
现如今把红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两种以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
1914年,电气启动的红绿灯出现在美国。
这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,车辆一接近红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下嗽叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
2设计思路
首先是介绍设计电路中使用到的主要元器件,单片机芯片、8255芯片和晶闸管。
十字路口分四条道,每条道有三个红绿灯,共十二个。
每个红绿灯由一块8031芯片单独控制,我们只设计一个红绿灯的燃亮情况,同理根据燃亮顺序设计其它红绿灯。
然后再组合起来,达到设计要求。
3单片机的发展概述
单片微型计算机通常由单块集成电路芯片构成,内部包含有中央处理单元CPU、存储器、定时器/计数器和I/O接口电路等主要计算机部件。
单片微型计算机简称单片机。
1974年12月,美国Fairchild公司推出了世界上第一台8位单片机F8。
该机结构独特,由两块集成电路芯片组成,具有与众不同的指令系统,深受民用电器和仪器仪表领域的欢迎和重视。
单片机的发展过程分为四个发展阶段:
第一阶段(1974-1976年)是单片机发展的起步阶段。
这个时期的单片机的制造工艺比较落后,集成度也低。
第二阶段(1976-1978年)是单片机的发展阶段。
这个时期生产的单片机已能在单块芯片内集成8位CPU、并行I/O口、8位定时器/计数器、RAM和ROM、中断源等功能。
第三阶段(1979-1982年)是8位单片机的成熟阶段。
与前两个阶段比,这一阶段的单片机不仅增大了存储量和寻址范围,而且在不同程度上增加了中断源并行I/O口和定时器/计数器的个数,甚至集成了全双工串行通信接口电路。
第四阶段(1983年以后)是16位单片机和8位高性能单片机并行发展阶段。
这一时期的单片机大力发展控制功能并提高系统运行的可靠性,逐步将测控系统要求的外部接口电路纳入片内,以真正实现“微控制器”所应具备的功能。
4芯片的选择与简介
4.1MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
1、中央处理器CPU
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
2、时钟电路
MCS-51芯片的内部有时钟电路,但石英晶体和微调电容需外接。
时钟电路为单片机产生时钟脉冲序列。
系统允许的晶振频率为12MHZ。
下面图4.1为8051内部结构:
图4.18051内部结构
3、内部程序存储器(ROM):
8051内部有4KB的ROM,用于存放程序、原始数据或表格。
因此称之为程序存储器,简称内部ROM。
地址范围为0000H~FFFFH(64KB)。
4、内部数据存储器(RAM):
8051芯片共有256个RAM单元,其中后128单元被专用寄存器占用,能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。
因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。
地址范围为00H~FFH(256B)。
是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。
5、定时器/计数器
8051共有2个16位的定时器/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。
定时时靠内部分频时钟频率计数实现。
做计数器时,对P3.4(T0)或P3.5(T1)端口的低电平脉冲计数。
6、并行I/O口
MCS-51共有4个8位的I/O口(P0、P1、P2、P3)以实现数据的输入输出。
7、串行口
MCS-51有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。
该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为移位器使用。
RXD(P3.0)脚为接收端口,TXD(P3.1)脚为发送端口。
8、中断控制系统
MCS-51单片机的中断功能较强,以满足不同控制应用的需要。
共有5个中断源,即外中断2个,定时中断2个,串行中断1个,全部中断分为高级和低级共二个优先级别。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
下图示4.2是MCS-51系列单片机的内部结构。
图4.2MCS-51结构框图
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,有正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明,如图4.3:
图4.3MCS-51芯片引脚分布
1、主电源引脚VCC和VSS
VCC——(40脚)接+5V电压;
VSS——(20脚)接地;
2、外接晶体引脚XTAL1和XTAL2
XTAL1(19脚)接外部晶体的一个引脚。
在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
当采用外部振荡器时,对HMOS制造工艺的MCS-51单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。
XTAL2(18脚)接外部晶体的另一端。
在单片机内部,接至上述振荡器的反相放大器的输出端。
采用外部振荡器时,对HMOS制造工艺的MCS-51单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS制造工艺的80C51/80C31,此引脚应悬浮。
3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/VPP
①RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。
推荐在此引脚与VSS引脚之间连接一个约1k的下拉电阻,与VCC引脚之间连接一个约22μF的电容,以保证可靠地复位。
图4.4给出了两种复位方式。
VCC掉电期间,此引脚可接备用电源,以保证内部RAM的数据不丢失。
当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。
②ALE/PROG(30脚):
当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。
因此,它可用作对外输出的时钟,或用于定时目的。
然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。
ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。
对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。
③PSEN(29脚):
此脚的输出是外部程序存储器的读选通信号。
在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。
但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。
PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。
④EA/VPP(引脚):
当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。
对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。
对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。
4、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)
①P0口(39脚至32脚):
是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用。
②P1口(1脚至8脚):
是准双向8位I/O口。
由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2捕捉、重装触发,即T2的外部控制端。
对EPROM编程和程序验证时,它接收低8位地址。
③P2口(21脚至28脚):
是准双向8位I/O口。
在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。
在对EPROM编程和程序验证期间,它接收高8位地址。
④P3口(10脚至17脚):
是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。
作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。
作为第二功能使用时,各引脚的定义如下所示。
值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
P3口线引脚第二功能:
P3.010RXD(串行输入口)
P3.111TXD(串行输出口)
P3.212INT0(外部中断0)
P3.313INT1(外部中断1)
P3.414T0(定时器0外部输入)
P3.515T1(定时器1外部输入)
P3.616WR(外部数据存储器写脉冲)
P3.717RD(外部数据存储器读脉冲)
由图我们可以看到,单片机的引脚除了电源、复位、时钟接入,用户I/O口外,其余管脚是为实现系统扩展而设置的。
这些引脚构成MCS-51单片机片外三总线结构,即:
①地址总线(AB):
地址总线宽为16位,因此,其外部存储器直接寻址为64K字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。
②数据总线(DB):
数据总线宽度为8位,由P0提供。
③控制总线(CB):
由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。
8031因内部没有ROM,31脚需接地(GND),单片机在启动后就到外面程序存储器读取指令;而8051因内部有程序存储器,31脚接高电平(VCC),单片机启动后直接在内部读取指令。
其它功能与8051基本相同。
图4.4给出了两种复位方式。
图4.4复位方式图4.5时钟方式
4.28255芯片简介
8255可编程并行接口芯片简介:
8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。
8255的内部组成框图如图4.6所示:
A组端口A
(8位)
A组控制
PA7~PA0
数据总线
缓冲器
D7~D0
A组端口C
高位(4位)
PC7~PC4
/RD
/WR
A1
A0
/CS
RET
读/写
控制逻辑
B组端口C
低位(4位)
PC3~PC0
B组端口B
(8位)
B组控制
PB7~PB0
图4.68255内部组成框图
8255可编程并行接口芯片方式控制字格式说明:
8255有两种控制命令字:
一个是方式选择控制字;另一个是C口按位置位/复位控制字。
其中C口按位置位/复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述。
方式控制字格式说明如图4.7所示:
B组
D7
D6
D5
D4
D3
D2
D1
D0
端口C(下半部)
1=输入,0=输出
端口B
1=输入,0=输出
方式选择
0=方式0,1=方式1
A组
端口C(上半部)
1=输入,0=输出
端口A
1=输入,0=输出
方式选择
00=方式0
01=方式1
1x=方式2
方式设置标志
1=有效
图4.78255方式控制字
方式0:
基本输入/输出方式。
适用于三个端口中的任何一个。
每一个端口都可以用作输入或输出。
输出可被锁存,输入不能锁存。
方式0适合于两种情况:
一种是无条件传送,另一种是查询方式传送。
方式1:
选通输入/输出方式。
这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。
方式2:
双向选通输入/输出方式。
只有A口具备双向选通输入/输出方式,8位外设线用作输入或输出。
4.374LS373以及74LS07简介
74LS373是一种带三态门的8D锁存器,其管脚示意图如4.8所示:
图4.874LS373管脚示意图
其中:
1D-8D为8个输入端。
1Q-8Q为8个输出端。
LE为数据打入端:
当LE为“1”时,锁存器输出
状态同输入状态;当LE由“1”变“0”时,数据
打入锁存器
OE为输出允许端;当OE=0时,三态门打开;
当OE=1时,三态门关闭,输出高阻。
六驱动器(OC高压输出)74LS07
Vcc 6A 6Y 5A 5Y 4A 4Y
┌┴─┴─┴─┴─┴─┴─┴┐
│14 13 12 11 10 9 8│
Y=A ) │
│1 2 3 4 5 6 7│
└┬─┬─┬─┬─┬─┬─┬┘
7805实现正电压输出,负电压截止。
4.4晶闸管
晶闸管(Thyristor)是晶体闸流管的简称,又可称做可控硅整流器,以前被简称为可控硅;1957年美国通用电器公司开发出世界上第一个晶闸管产品,并于1958年使其商业化;晶闸管是PNPN四层半导体结构,它有三个极:
阳极,阴极和门极;晶闸管工作条件为:
加正向电压且门极有触发电流;其派生器件有:
快速晶闸管,双向晶闸管,逆导晶闸管,光控晶闸管等。
它是一种大功率开关型半导体器件,在电路中用文字符号“VT”表示。
图4.9为晶闸管的结构图。
图4.10为晶闸管的电路图。
A
Ik
图4.9晶闸管的结构图
图4.10晶闸管电路图
晶闸管VT在工作过程中,它的阳极A和阴极K与电源和负载连接,组成晶闸管的主电路,晶闸管的门极G和阴极K与控制晶闸管的装置连接,组成晶闸管的控制电路。
晶闸管的工作条件:
1.晶闸管承受反向阳极电压时,不管门极承受何种电压,晶闸管都处于关断状态。
2.晶闸管承受正向阳极电压时,仅在门极承受正向电压的情况下晶闸管才导通。
3.晶闸管在导通情况下,只要有一定的正向阳极电压,不论门极电压如何,晶闸管保持导通,即晶闸管导通后,门极失去作用。
在电路中我们使用的晶闸管来控制红绿灯的亮灭。
如图4.11所示:
图4.11晶闸管控制电路
VT为双向晶闸管,当门极为高电平时晶闸管导通,该支路指示灯亮;当门极为低电平时晶闸管关断,该支路指示灯灭。
5交通灯控制原理分析与设计
5.1交通管理的方案论证
A、B、C、D干道交于一个十字路口,各干道有三组红、黄、绿三色的指示灯,指挥车辆安全通行。
图5.1所示为一个十字路口的道路示意图。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示车辆注意红、绿灯的状态即将切换。
设A、C道比B、D道的车流量大。
右
中D
左道
图5.1十字路口示意图
我们把十字路口分成四条道路,分别为A道,B道,C道和D道。
每条道路分左中右三条车道,左为左拐弯,右为右拐弯,中为直走。
设A、C道比B、D道的车流量大,设计红绿灯的燃亮顺序,如表5.1:
表5.1红绿灯燃亮顺序
3
30
3
15
3
20
3
10
3
30
……
A道
左
黄
红
黄
绿
黄
红
黄
红
黄
红
……
中
黄
绿
黄
红
黄
红
黄
红
黄
绿
……
右
黄
绿
黄
红
黄
绿
黄
红
黄
绿
……
B道
左
黄
红
黄
红
黄
红
黄
绿
黄
红
……
中
黄
红
黄
红
黄
绿
黄
红
黄
红
……
右
黄
绿
黄
红
黄
绿
黄
红
黄
绿
……
C道
左
黄
红
黄
绿
黄
红
黄
红
黄
红
……
中
黄
绿
黄
红
黄
红
黄
红
黄
绿
……
右
黄
绿
黄
红
黄
绿
黄
红
黄
绿
……
D道
左
黄
红
黄
红
黄
红
黄
绿
黄
红
……
中
黄
红
黄
红
黄
绿
黄
红
黄
红
……
右
黄
绿
黄
红
黄
绿
黄
红
黄
绿
……
此表说明:
(1)当为黄灯时A、B、C、D四条道同时为黄灯;以警示车辆下一个灯色即将到来,时间为3秒。
(2)当A、C道的中、右车道为绿灯,左车道为红灯时,B、D道的左、中车道车辆禁止通行,右车道可通过。
时间为30秒。
(3)当A、C道的左车道为绿灯,中、右车道为红灯时,B、D道的左、中、右车道车辆禁止通行。
时间为15秒。
(4)当B、D道的中、右车道为绿灯,左车道为红灯时,A、C道的左、中车道车辆禁止通行,右车道可通过。
时间为20秒。
(5)当B、D道的左车道为绿灯,中、右车道为红灯时,A、C道的左、中、右车道车辆禁止通行。
时间为10秒。
(6)此表可根据车流量动态设定。
5.2系统硬件设计
由于一片8255芯片的扩展口不能满足对红绿灯和显示时间的控制,我们采用一块8031芯片和一块8255控制一个红绿灯和其显示时间。
四个道路口有十二个红绿灯,需要十二块8031芯片和8255。
这样设置红绿灯的燃亮互不干扰,灵活性高,便于交通管理。
5.2.1交通灯系统总框图
系统总框图如下:
看门狗
图5.2系统框图
5.2.2交通灯控制线路图
图5.3控制线路图
5.2.3系统工作原理
(1)通过编写程序设置红绿灯的燃亮时间。
(2)由8031单片机的定时器每秒钟通过P0口向8255的数据口送信息,由8255的PC口显示红、绿、黄灯的燃亮情况;由8255的PA、PB口显示每个灯的燃亮时间。
(3)通过8031设置各个信号等的燃亮时间。
设置黄、绿、红时间依次为3秒、20秒、3秒、30秒、3秒循环由8031的P0口向8255的数据口输出。
(4)通过8031单片机的P3.0位来控制系统是自动工作或手动设置,当P3.0位为0系统自动工作,为1表示按键有效,由按键输入控制红绿灯燃亮和显示时间。
(5)8255的PA口用于输出时间的个位,PB口用于输出时间的十位,由74LS07驱动芯片驱动;而PC口用于输出各个灯的情况,它的末段连接双向晶闸管采用220V交流电压驱动。
(6)在交通控制程序中加入看门狗指令,当系统出现异常看门狗将发出溢出中断。
通过专用端口输入到MAX692看门狗芯片的WDI引脚将引起RESET复位信号复位系统。
(7)当出现紧急情况,我们可以手动控制红绿灯的亮灭。
P1.7为高电平,红灯亮;P1.6为高电平,绿灯亮。
P1.5—P1.0输入燃亮时间。
6.系统的软件分析与设计
6.1延时程序设计
延时方法可以有两种一种是利用MCS-51内部定时器产生溢出中断来确定延时的时间,另一种是采用软延时的方法。
下面给出延时1秒的实现方法。
6.1.1计数器硬件延时
6.1.1.1计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为213;在方式1时M的值为216;在方式2和3的M值为28。
6.1.1.2计算公式
T=(M-TC)T计数
或TC=M-T/T计数
T计数是单片机时钟周期TCLK的12倍;TC为定时初值
如单片机的主脉冲频率为TCLK=12MHZ ,经过12分频
方式0 TMAX=213*1微秒=8.192毫秒
方式1 TMAX=216*1微秒=65.536毫秒
方式2、3TMAX=28*1微秒=256微秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题。
6.1.1.3设置1秒延时
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒。
这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到,可以返回到输出时间显示程序。
6.1.1.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 TR0 ;启动T0计数器
MOV RO,