基于单片机的交通灯文档格式.docx
《基于单片机的交通灯文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的交通灯文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊,这一切要归功于城市交通控制系统中的交通灯控制系统。
交通灯控制系统对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果,使城市交通得以有效管理。
交通灯可以采用PLC、单片机等控制方法。
利用单片机实现对交通信号灯的实时控制,只要采用一块单片机,加上简单的接口与驱动放大电路,即可实现,具有成本低,可靠性高的特点。
1.2课题设计内容
本课题对基于单片机的交通灯控制系统进行设计。
以MCS-51系列单片机为控制核心,设计并制作交通灯控制系统,用于十字路口的车辆及行人的交通管理。
东西南北四个路口具有左拐、右拐、直行及行人4种通行指示灯,并分别用计时器显示路口通行转换剩余时间,在特种车辆如119、120通过路口时,系统可自动转为特种车辆放行,其他车辆禁止通行状态。
设计交通灯控制系统硬件电路与软件控制程序,对硬件电路与软件程序分别进行调试,并进行软硬件联调,要求获得调试成功的实物。
2系统设计
2.1设计方案论证
根据设计内容要求,提出了如下三种方案:
方案一:
采用AT89S52单片机作为控制核心,采用四组高亮红绿双色二极管作为东西南北四个路口的通行指示灯;
采用四组3位LED数码管作为四个路口的通行倒计时显示器,LED显示采用动态扫描方式,以节省端口数。
按以上系统构架设计,单片机端口资源刚好满足要求。
方案一设计框图如图2-1所示。
图2-1方案一:
采用LED动态扫描的交通灯控制系统
方案二:
采用AT89C2051单片机作为控制器,通行倒计时显示采用16×
16点阵LED发光管,左拐、右拐、直行及行人4种通行指示也采用16×
16点阵双色LED发光管。
方案二设计框图如图2-2所示,LED点阵的列驱动采用74LS595,用串行端口扩展实现,行驱动采用1/16译码器74LS154动态扫描,译码器74LS154生成16条行选通信号线,再经过驱动器驱动对应的行线。
每条行线上需要较大的驱动电流,应选用大功率三极管作为驱动管。
图2-2方案二:
采用16×
16点阵LED发光管设计的交通灯控制系统
方案三:
采用AT89C2051单片机作为控制器,通行倒计时及左拐、右拐、直行、行人通行指示采用单块LCD液晶点阵显示器。
三种方案的特点比较如下:
方案一具有电路简单,设计方便,显示亮度高,耗电较少,可靠性高等特点;
方案二的图案显示逼真,单片机占用端口资源少,缺点是需要大量的硬件,电路复杂,耗电量大,不太适合于模型制作;
方案三设计占用单片机的端口最少,硬件也少,耗电也最少;
虽然显示图案也很精美,但由于亮度太暗,晚上还得开背光灯,不够实用。
可见方案一优于其他两种方案,因此本设计选用方案一:
采用LED动态扫描的方案进行设计。
2.2系统硬件设计
采用LED动态扫描的交通灯控制系统电路原理图如图2-3所示。
(为排版起见,该图放在下一页)。
系统由控制模块、通行灯显示模块、时间显示模块、电源模块四部分组成。
2.2.1控制模块
控制模块电路如图2-4所示。
主控制器采用AT89S52。
AT89S52是ATMEL公司生产的一款性能稳定的8位单片机,具有1个8KB的Flash程序存储器,1个512字节的RAM,3个16的定时/计数器,4个8位的双向可位寻址I/O端口,1个串行口,6个中断源,两个中断优先级。
图2-4控制模块原理图
AT89S52的P1口用于控制南北通行灯,P2口用于控制东西通行灯,P0口用于3位LED显示器的段码控制,P3.0~P3.2口用于3位LED显示器的位码控制,手动/自动转换采用P3.7扳键。
/VPP接+5V电源端。
晶振及复位按典型电路设计,元器件参数如图2-4中所示。
晶振频率为12MHz。
2.2.2通行灯显示模块
通行灯显示模块如图2-5所示。
通行灯指示采用高亮度共阴红绿双色发光二极管,左拐、直行、右拐及行人各一个。
双色发光二极管的共阴极通过电阻接地,阳极接P1口或P2口(南北为P1口,东西为P2口),经74HC244控制。
当发光电流为6mA时,限流电阻按公式R=(5-1.8)/0.006计算,应为510Ω。
由于通行时南北双向指示牌相同,东西双向指示牌相同,因此每个端口应具有12mA的吸收电流能力,在单片机的输出口接驱动电路74HC244,以保护单片机的输出端口。
图2-5通行灯输出显示模块
2.2.3时间显示模块
通行剩余时间显示模块如图2-6所示(以北路口为例)。
路口通行剩余时间采用高亮红色7段共阳LED发光数码管显示,采用共阳数码管,如用单片机吸收电流驱动,列扫描驱动使用三级管,按每段6mA电流算,全显示字型“8”时,每个数码管需6mA×
8=48mA。
由于时间显示每个路口相同,4组需192mA,因此设计中采用功率三极管S9012驱动。
由于单片机每个段码输出口需吸收48mA电流,因此在电路设计中也使用了驱动集成块74HC244。
2.2.4电源电路
电源电路如图2-7所示。
整个系统采用的电源电压只需+5V电压,将交流电经变压器变换为15V交流电,再用整流桥得到13.5V左右的直流电,采用不可调的3端稳压器件LM7805将电源稳定在5V直流输出。
图2-6时间显示模块电路
图2-7电源电路
2.2.5硬件电路中器件选择
A.AT89S52单片机
AT89系列单片机是ATMEL公司的8位FLASH单片机。
这个系列单片机最吸引人的特点就是在片内含有FLASH存储器,不需要再外扩存储器,与80C51插座兼容,由于这些优点,使它有着十分广泛的用途,特别是在便携式和需要特殊信息保存的仪器和系统中显得更为有用。
89系列单片机典型型号有AT89C51,AT89LV51,AT89C52,AT89LV52,AT89C2051,AT89S52,AT89C1051,AT89S51和AT89S8252。
本设计选用AT89S52。
它内部具有1个8KB的Flash的程序存储器,1个512字节的RAM,4个8位的双向可位寻址I/O端口,3个16的定时/计数器、1个串行口、6个二级中断源和两个中断优先级。
引脚如图2-8所示。
图2-8AT89S52引脚
D.七段LED数码管
7段数码管是一种常用的显示器件,其外观与内部电路连接见图2-11。
它使用7个笔画显示0~9共10个数字,加上一个小数点共8个显示段,每一个笔画都是由发光二级管组成的。
LED数码管根据LED的接法不同分为共阴和共阳两类,图2-11(b)是共阳极数码管的内部电路,将八只LED的阳极连在一起,其中a~g为7个笔画的驱动端;
dp为小数点驱动端;
COM为公共引脚。
(a)外观(b)内部电路连接
图2-11LED数码管
0~9共10个字符的字形码如表2-1所示。
E.双色发光二极管
双色发光二极管是在一个封装结构内设置两只不同单色的发光二极管。
共阴红绿双色发光电气符号图与内部电路连接如图2-12所示。
有3根引出线,圆形和长方形两种封装。
其中第一只发光二极管的负(或正极)与第二只发光二极管的负(或正极)极相互连接后再向外引出。
表2-1LED数码管显示字符的字形码
字形
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
字形编码
dp
g
f
e
d
c
b
a
共阳
共阴
1
C0H
3FH
F9H
06H
2
A4H
5BH
3
B0H
4FH
4
99H
66H
5
92H
6DH
6
82H
7DH
7
F8H
07H
8
80H
7FH
9
90H
6FH
发光双色二极管的判别与检测方法:
将万用表打在电阻档,用万用表黑表笔接在双色发光二极管中间的负极上,红表笔接在双色发光二极管的正极上,每次都亮,该双色发光二极管是共阴极的,并且是好的。
2.3系统软件的设计
交通灯控制系统软件分为主程序、定时中断程序与特种车实时响应程序三部分。
2.3.1主程序
主程序主要负责总体程序管理功能,包括初始化部分与人机交互设定部分。
由于采用动态扫描方式显示时间,因此主程序大部分时间要调用扫描显示程序。
主程序流程图如图2-15所示。
图2-15主程序流程图
初始化部分主要完成内存规划,定时器的工作模式、中断方式等的设定。
由于子程序调用较多,因此初始化时堆栈指针设于80H处。
定时器T0、T1设为16位定时器模式,定时时间为50mS,T0为秒计时用,T1为通行结束闪烁用。
2.3.2定时中断服务程序
定时中断服务程序主要用于车辆与行人的通行指示,按照通行规则,红绿灯控制转换逻辑表如表2-2所示。
通行规则如下:
A.车辆南北直行、各路右拐,南北向行人通行。
南北向通行时间为1min(60S),各路右拐比直行滞后10S开放。
B.车辆南北向左拐、各路右拐,行人禁行。
通行时间为1min(60S)。
C.车辆东西直行、各路右拐,东西向行人通行。
东西向通行时间为1min(60S),各路右拐比直行滞后10S开放。
D.车辆东西向左拐、各路右拐,行人禁行。
表2-2路口通行方式控制码数据表
交通灯的4种通行规则,是以给控制红绿灯端口送控制码的方式实现的。
它的原理是,将按不同规则通行时的各路口的红绿灯亮灭情况转换为单片机端口控制码。
红绿灯指示功能通过T0定时中断服务程序实现。
定时器T0定时溢出中断周期设为50ms,中断累计20次(即1S)时对120S倒计时单元减一操作。
设计中将4种通行规则分成几种不同的亮灯方式,通过查询秒倒计时单元的数据,实现在不同的时间段给控制端口送不同的控制数据码。
控制码分为5个时间段:
120~110S、110~70S、70~60S、60~10S、10~0S。
交通管理定时功能程序流程图如图2-16所示。
图2-16交通管理定时功能程序
2.3.4算法分析
A.定时器/计数器
本设计涉及到120~110S、110~70S、70~60S、60~10S、10~0S五段计时,首先须将它们转为16进制代码。
120=7×
16+8=78H
110=6×
16+14=6EH
70=4×
16+6=46H
60=3×
16+12=3CH
10=0×
16+10=0AH
B.定时时间初值与TMOD的设置
T0、T1为16位定时器,由于定时时间大于8192μS,应选用工作方式一。
由于晶振频率为12MHz,TCY=1μS,故有
T=(65536-X)TCY=(65536-X)×
1μs=50ms
计算初值X=15536=3CB0H
即TH0=3CH,TL0=0B0H。
TMOD的格式如图2-18所示。
D7
D6
D5
D4
D3
D2
D1
D0
GATE
C/
M1
M0
图2-18TMOD的格式
TMOD各位的内容确定如下:
由于定时器/计数器0设为定时器,选用工作方式一,所以C/
(TMOD.2)=0,M1(TMOD.1)=0,M0(TMOD.0)=1,GATE(TMOD.3)=0;
定时器/计数器1没有使用,相应的D7~D4为随意状态“X”。
若取“X”为0,则(TMOD)=00000001B=01H
C.中断系统IE的取值
IE的格式如图2-19所示。
EA
---
ET2
ES
ET1
EX1
ET0
EX0
图2-19 IE的格式
IE每一位都由软件置1或清零。
本设计中CPU允许中断即EA=1,定时器/计数器0中断允许位ET0及外部中断0中断允许位EX0可申请中断,即ET0=1,EX0=1,其余不允许中断,均设为0,所以IE=H=83H
3系统调试
3.1硬件调试
3.1.1静态检查
根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好,用万用表一一测试。
3.1.2通电检查
首先调试电源部分。
整个电路只需要+5V的电压,接上电源,将220V交流电通入,测试变压器的输出端,整流桥输出,LM7805的输出电压是否和理论计算值一致,再用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。
3.2软件调试及软硬件联调
对软件先用仿真器进行了调试。
用仿真器运行正常后,再用烧写器将程序烧到AT89S52单片机中,进行了脱机调试。
对于通行灯输出程序的调试,首先看左拐灯、直行灯、右拐灯、行人灯是否能正常工作。
编制了以下测试灯亮灭的程序:
ORG0000H
START:
MOVA,#0AAH ;
让东西南北四个路口的四个红灯全亮
MOVP1,A
MOVP2,A
ACALLDELAY;
延时一段时间
MOVA,#55H;
让东西南北四个路口的绿灯全亮
MOVP1,A
MOVP2,A
ACALLDELAY;
SJMPSTART ;
到START处循环以上操作
DELAY:
MOVR7,#01H;
延时子程序
MOVR6,#81H
DL1:
NOP
DJNZR6,DL1
DJNZR7,DL1
RET
将上述程序输入电脑,经仿真器传输到系统运行后,发现有一红灯不亮,而其他指示灯都按指令运行出现正确的结果。
用万用表仔细检测,发现该灯的阳极被误接地了,没有接到单片机的并行口上。
经修改,每个指示灯均能正确的显示了,至此,说明通行灯的接线完全正确。
判断出通行灯接线正确后,对于整个电路的通行控制,根据逻辑状态表2-2编制了相应的程序(程序段见附录2中的T0中断服务程序)多次、反复调试,直到逻辑关系正确。
调试时南北方向、东西方向指示灯同时进行。
对于时间模块,首先看显示的数字是否正常,显示的亮度是否合适。
对于图2-3所示的电路,尽管LED数码管为共阳极,但是各位的位选为P3.0,P3.1,P3.2经PNP型晶体管9012后提供,P3.i(i=0,1,2)必须提供低电平才能点亮相应的显示器,须输出CLR P3.i指令(i=0,1,2)。
先编制了LED静态显示的程序,测试P3.i引脚上的LED是否可以正常显示,相应程序如下:
ORG0000H
MOVA,#01H
MOVDPTR,#TAB;
取段码表地址
MOVCA,@A+DPTR;
查显示数据对应段码
MOVP0,A
CLRP3.0;
开启P3.0口
SETBP3.1;
关闭P3.1口
SETBP3.2;
关闭P3.2口
SJMPSTART
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,
END
运行后P3.0引脚上接的显示器显示为1,同理可分别测试P3.1,P3.2引脚上的LED显示器是否可以正常显示。
经检测各位LED可以正常显示,但是发光的亮度偏暗,有些模糊,这说明电路连接没有问题,但选用的电阻过大了,以至于电流很小,显示器不太亮,在保证9012正常工作的情况下,将电阻从47K调整为10K,显示亮度合适,这部分调试成功。
将附录2中的显示子程序进行了调试,四个路口的三个数码管均可以动态显示。
至此,显示模块调试成功。
整个程序设计中采用了两种倒计时显示方式,120S倒计时适用于车流量较大的大城市,60S倒计时可用于中小型城市,两种倒计时由P3.7上的开关进行转换。
将附录3中的119、120特种车程序进行调试,所有绿灯自动关闭,红灯全亮。
用仿真器与硬件电路连接调试成功后,又将附录3的程序烧写到AT89S52中去,接上电源,发现LED不能正常显示,而通行灯输出一切正常。
经检查AT89S52的P0口需要加外部上拉电阻,在仿真器上不存在此问题,因为仿真器的P0口有外部上拉电阻。
接510Ω的上拉电阻,接通电源交通灯与倒计时显示器可以正常运行,至此调试工作全部完成。
对实验板通电后,显示器从120S开始倒计时,每秒钟自动减一,四个路口的红绿灯按通行规则正确显示。
显示图片如图3-1所示。
将S1开关打在合上的位置,显示器从60S开始倒计时,每秒钟自动减1,四个路口的红绿灯按通行规则正确显示。
按下S3按钮,所有绿灯全部关闭,红灯全亮,呈现特种车辆放行状态。
实验结果表明,本次设计并制作的交通灯可以很好地满足设计任务书的要求。
4结束语
拿到课题后,开始着手设计。
查阅了大量相关资料,结合毕业设计任务书中的指标要求,进行了方案论证,确定了设计方案:
将系统分为控制模块、通行灯显示模块、时间显示模块、电源模块四部分。
设计方案与元器件参数确定后,就开始采购元器件,然后进行硬件制作。
在制作硬件的过程中,每制作一步,都要检查这一步的正确性,可靠性。
最后硬件制作完毕后,先进行了静态调试,根据硬件电路图核对了元器件的型号,极性,安装是否正确,检查硬件电路连线是否与电路图一致。
然后是通电调试,先调试电源部分。
将220V交流电通入,测试变压器的输出端整流桥输出,LM7805的输出电压是否和理论计算值一致。
再调试单片机的复位和晶振电路。
硬件电路制作完毕后,采用仿真器进行了软件调试,这个过程相当复杂艰难,出现了很多问题,例如输出灯不按规律显示,倒计时数码管显示不正确等。
每一个问题都相当棘手,遇到这些问题后,首先检测硬件电路,对硬件电路排查完毕并确定无误后,对软件进行修改及再调试。
问题一一被解决后最后得出所需软件部分。
这个过程让我学到很多东西:
首先必须具有的是耐心和细心,问题出现后,必须分析问题,找出可能出现此种问题的原因,然后进行一一检测,进行多次修改后才得到所需结果。
最后是软硬件联调,将程序烧入到AT89S52,进行调试直到成功。
基于单片机的交通灯控制系统的PCB板已进行了设计,但是由于时间紧迫,布线还不十分合理,需进一步调整,初步设计的PCB图见附录2。
通过本次设计,本人的知识领域得到进一步扩展,专业技能得到进一步提高,同时提高了分析和解决实际问题的综合能力。
另外,也培养了自己严肃认真的科学态度和严谨求实的作风。
由于本人水平有限,本次设计还存在一些不足之处,请评阅与答辩的各位老师批评指正。
附录3基于单片机的交通灯控制系统程序清单
;
************************************************;
交通灯控制程序 ;
以下是初始化部分
TIMEEQU50H;
秒记数用
TIMESFREQU51H;
临时寄存器
CONR5EQU52H;
T1秒定时记数用
TIMED0EQU55H;
单向最大定时时间,直行开始,人行开始(120S)
TIMED1EQU56H;
各路右拐开始时间(110S)
TIMED2EQU57H;
前行结束提醒(70S)
TIMED3EQU58H;
前行结束,人行结束,左拐开始(60S)
TIMED4EQU59H;
左拐结束提醒
TIMED5EQU5AH;
左拐结束
TIMED6EQU5BH
TIMED7EQU5CH
SNEQUP1;
南北口
EWEQUP2;
东西口
SCANEQUP3;
扫描口
LEDOUTEQUP0;
段码口
SNEWFLAGBIT09H;
东西口与南北口转换标志
按键在扫描口的最高位,按一下,全红灯。
P3.7扳键开关扳向合上位置,则为60秒倒计时
定时器T0﹑T1溢出周期为50ms,T0为秒记数用
*************中断入口程序********************
ORG0000H;
程序执行开始地址
LJMPSTART;
跳到标号START执行
ORG0003H;
外中断0中断程序入口
RETI;
外中断0中断返回
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTT0执行
ORG0013H;
外中断1中断程序入口
LJMPINT11;
外中断1、119﹑120中断
ORG001BH;
定时器T1中断程序入口
LJMPINTT1
ORG