基于AT89S51单片机控制的交通灯设计Word文档格式.docx
《基于AT89S51单片机控制的交通灯设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于AT89S51单片机控制的交通灯设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
2系统设计要求与整体规划
2.1基础设计要求
1)设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两个交叉路口的车辆交替运行,两个方向能根据车流量大小自动调节通行时间,车流量大,通行时间长,车流量小,通行时间短。
2)每次绿灯变红灯时,要求黄灯先亮5S,才能变换运行车辆。
3)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用数码管显示器进行显示(采用倒计时的方法)。
4)同步设置人行横道红、绿灯指示。
2.2系统规划
我们将系统设计成可分离单独工作的主控制机与客户端的形式,但是和传统的C/S模式不一样的是,每个终端机可以脱离主控制机而独立工作。
即使主控制机停止工作,或者由于某种原因不能正常工作,各终端机也可以照常稳定的工作。
各个终端机负责管理路口的多个信号灯。
为了方便我们称主控制机为主系统,各个终端机称为子系统。
控制系统的总框图如图2-1示
2.3方案论证和比较
1)智能交通灯的研究现状
目前设计交通灯的方案有很多,有应用CPLD设计实现交通信号灯控制器方法;
有应用PLC实现对交通灯控制系统的设计;
有应用单片机实现对交通信号灯设计的方法。
目前,国内的交通灯一般设在十字路门,在醒目位置用红、绿、黄三种颜色的指示灯。
加上一个倒计时的显示计时器来控制行车。
对于一般情况下的安全行车,车辆分流尚能发挥作用,但根据实际行车过程中出现的情况,还存在缺点:
两车道的车辆轮流放行时间相同且固定,在十字路口,经常一个车道为主干道,车辆较多,放行时间应该长些;
另一车道为副干道,车辆较少,放行时间应该短些
2)智能交通灯的设计方案及改进措施
针对道路交通拥挤,交叉路口经常出现拥堵的情况。
利用单片机控制技术,提出了软件和硬件设计方案及改进措施:
根据各道路路口车流量的大小自动调节通行时间。
由于AT89S51单片机自单带有2计数器,6个中断源,能满足系统的设计要求。
用单片机设计不但设计简单,而且成本低,用其设计的交通灯也满足了要求,所以本文采用单片机设计交通灯。
系统构图如图2-2所示:
图2-2系统结构框图
3AT89S51单片机简介
3.1单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:
中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
3.2AT89S51单片机的主要性能参数和主要引脚
3.2.1主要性能参数
与单片机产品兼容8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
3.2.2AT89S51芯片内部结构简介
·
中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·
数据存储器(内部RAM):
数据存储器用于存放变化的数据。
AT89S51中数据存储器的地址空间为256个RAM单元,但其中能作为数据存储器供用户使用的仅有前面128个,后128个被专用寄存器占用。
程序存储器(内部ROM):
程序存储器用于存放程序和固定不变的常数等。
通常采用只读存储器,且其又多种类型,在89系列单片机中全部采用闪存。
AT89S51内部配置了4KB闪存。
定时/计数器(ROM):
定时/计数器用于实现定时和计数功能。
AT89S51共有2个16位定时/计数器。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
每个口都由1个锁存器和一个驱动器组成。
它们主要用于实现与外部设备中数据的并行输入与输出,有些I/O口还有其他功能。
全双工串行口:
A89S51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
时钟电路:
时钟电路的作用是产生单片机工作所需要的时钟脉冲序列。
中断系统:
中断系统的作用主要是对外部或内部的终端请求进行管理与处理。
AT89S51共有5个中断源,其中又2个外部中断源和3个内部中断源。
图3-2是AT89S51系列单片机的内部结构示意图。
图3-2AT89S51系列单片机的内部结构示意图
3.2.3主要引脚功能
AT89S51引脚图如图3-1所示:
VCC:
电源电压
GND:
地
P0口:
P0口是一组8位漏极开路型双向I/0口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“l”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
P1口:
Pl是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“l”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,Pl接收低8位地址。
表1具有第二功能的P1口引脚
端口引脚
第二功能:
P1.5
MOSI(用于ISP编程)
P1.6
P1.7
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/0口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“l”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如下表所示:
表2具有第二功能的P1口引脚
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外中断0)
P3.3
/INT1(外中断1)
P3.4
T0(定时/计数器0外部输入)
P3.5
T1(定时/计数器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD外部数据存储器读选通)
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRT0位(地址8EH)可打开或关闭该功能。
DISRT0位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
程序储存允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的
信号。
/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
F1ash存储器编程时,该引脚加上+12V的编程电压Vpp。
XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
4智能交通灯方案的实现
根据设计任务和要求,可画出该控制器的原理框图,为确保十字路口的交通安全,往往都采用交通灯自动控制系统来控制交通信号。
其中红灯(R)亮,表示禁止通行;
黄灯(Y)亮表示暂停;
绿灯(G)亮表示允许通行。
4.1系统总框图如图4-1:
图4-1系统总框图
4.2智能交通灯系统的组成
交通灯系统由四部分组成:
车检测电路,信号灯电路,时间显示电路,紧急转换开关。
4.3智能交通灯系统的工作原理
大家都明白,绿灯的放行时间与车辆通过数量不成正比。
比如说20秒内每车道可以通过20辆车,40秒内每车道却可以通过45辆车。
因为这有一个起步的问题,还有一个黄灯等待问题。
也就是说,绿灯放行时间越长,单位时间通过车辆的数量就越多。
我们来计算一下,每车道通行20秒内可以通过20辆车,一个红绿灯循环是40秒(单交叉路口),加上每次状态转换的黄灯5秒(一个循环要两次转换),即一个红绿黄灯循环要50秒,即50秒内通行的车辆为40辆。
通过一辆车的平均时间是1.25秒。
如果每次车辆通行的时间改为40秒,40秒内每车道可以通过45辆,一个红绿灯循环是80秒(单交叉路口),加上每次状态转换的黄灯5秒(一个循环要两次转换),即一个红绿黄灯循环要90秒,即90秒内通行的车辆为90辆。
通过一辆车的平均时间只需1秒。
显然在车辆拥挤的情况下绿灯的通行时间越长,单位时间内通行的车辆越多,可以有效缓解车辆拥堵问题。
当然绿灯时间也不可能无限长,要考虑到让另一路口的等待时间不能过长。
人们总是希望在交通灯前等候的时间越短越好。
所以笔者设定了绿灯通行时间的上限为40秒。
在非拥挤时段绿灯的通行时间的下限为20秒,当交叉路口双方车辆较少时通行时间设为20秒,这样可以大大缩短车辆在红灯面前的等待时间。
当交叉路口双方车辆较多时通行时间设为40秒。
4.3.1车检测电路
用来判断各方向车辆状况,比如:
20秒内可以通过的车辆为20辆,当20秒内南往北方向车辆通过车辆达不到20辆时,判断该方向为少车,当20秒内北往南方向车辆通过车辆也达不到20辆时,判断该方向也为少车,下一次通行仍为20秒,当20秒时间内南往北或北往南任意一个方向通过的车辆达20辆时证明该状态车辆较多,下一次该方向绿灯放行时间改为40秒,当40秒内通过的车辆数达45辆时车辆判断为拥挤,下一次绿灯放行时间改仍为40秒,当40秒车辆上通过车辆达不到45辆时,判断为少车,下次绿灯放行时间改为20秒,依此类推。
绿灯下限时间为20秒,上限值为40秒,初始时间为20秒。
这样检测,某次可能不准确,但下次肯定能弥补回来,累积计算是很准确的,这就是人们常说的“模糊控制”。
因为路上的车不可能突然增多,塞车都有一个累积过程。
这样控制可以把不断增多的车辆一步一步消化,虽然最后由于每个路口的绿灯放行时间延长而使等候的时间变长,但比塞车等候的时间短得多。
本系统的特点是成本低,控制准确。
十字路口车辆通行顺序如图4-2所示:
图4-2十字路口车辆通行顺序
由于南往北,北往南时间显示相同,所以只要一个方向多车,下次时间就要加长东往西,西往东也一样,显示时间选择如表3。
表3显示时间选择
车辆情况
本次该方向通行时间
下次该方向通行时间
南往北少车,北往南少车
20秒
40秒
南往北少车,北往南多车
南往北多车,北往南少车
南往北多车,北往南多车
东往西少车,西往东少车
东往西少车,西往东多车
东往西多车,西往东少车
东往西多车,西往东多车
4.3.2信号灯电路
信号灯用来显示车辆通行状况,下面以一个十字路口为例,说明一个交通灯的四种状态见图4-3。
每个路口的信号的的转换顺序为:
绿——>
黄——>
红绿灯表示允许通行,黄灯表示禁止通行,但已经驶过安全线的车辆可以继续通行,是绿灯过渡到红灯提示灯。
红灯表示禁止通行。
绿灯的最短时间为20秒,最长时间为40秒,红红最短时间为25秒,最长时间为45秒,黄灯时间为5秒。
图4-3交通信号灯运行状态
4.3.3时间显示电路
在交通信号灯的正上方安装一个可以显示绿灯通行时间,红灯等待时间的显示电路,采用数码管显示电路是一种很好的方法。
由于东往西方向和西往东方向显示的时间相同,南往北方向和北往南方向显示的时间也相同,所以只需要考虑四位数码管显示电路,其中东西方向两位,南北方向两位,两位数码管可以时间的时间为0-99秒完全可以满足系统的要求,数码管连接方法如图4-4所示。
图4-4数码管连接方法
4.4交通灯控制线路如上图所示
5.系统软件设计
5.1控制器的软件设计
5.1.1每秒钟的设定
延时方法可以有两种一中是利用MCS-51内部定时器产生溢出中断来确定1秒的时间,另一种是采用软件延时的方法。
计数器硬件延时
.a计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为213;
在方式1时M的值为216;
在方式2和3为28
.b计算公式
T=(M-TC)T计数
或TC=M-C/T计数
T计数是单片机时钟周期TCLK的12倍;
TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.912毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
5.1.21秒的方法
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返回到输出时间显示程序。
相应程序代码
(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)中断服务子程序
ORG00BH
AJMP BRT0
ORG 00BH
BRT0:
DJNZR0,NEXT
AJMPTIME;
跳转到时间及信号灯显示子程序
DJNZ:
MOVR0,#14H ;
恢复R0值
MOVTH0,#3CH;
重装入定时器初值
MOVIE, #82H
RET1
END
5.1.3软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8031单片机的工作频率为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秒由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
5.2流程图如图5-1所示
图5-1交通灯的软件设计流程图
5.3程序源代码
ORG0000H
A_BITEQU20H;
用于存放南北十位数
B_BITEQU21H;
C_BITEQU22H;
用于存放东西十位数
D_BITEQU23H;
用于存放东西