交通灯单片机程序设计.docx
《交通灯单片机程序设计.docx》由会员分享,可在线阅读,更多相关《交通灯单片机程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
交通灯单片机程序设计
学校代码:
学号:
芜湖职业技术学院
毕业论文(设计)
论文题目:
交通灯单片机程序设计
学科专业:
机电一体化
作者姓名:
____韩波______________
指导教师:
______杨静__________________
完成时间:
选题背景
由于我国经济的快速发展从而导致了汽车数量的猛增,大中型城市的城市交通,正面临着严峻的考验,从而导致交通问题日益严重,其主要表现如下:
交通事故频发,对人类生命安全造成极大威胁;交通拥堵严重,导致出行时间增加,能源消耗加大;空气污染和噪声污染程度日益加深等。
日常的交通堵塞成为人们司空见惯而又不得不忍受的问题。
在这种背景下,结合我国城市道路交通的实际情况,开发出真正适合我们自身特点的智能信号灯控制系统已经成为当前的主要任务。
对交叉口实行科学的管理与控制是交通控制工程的重要研究课题,是保障交叉口的交通安全和充分发挥交叉口的通行能力的重要措施,是解决城市交通问题的有效途径。
所以,改变和完善我国现有的交通系统已成为当务之急。
交通灯信号灯的出现是人类历史上的一次重大改革,使人类的聚居生活,产生了深远的影响。
使交通得以有效管制,对于疏导交通流量,提高道路通行能力,减少交通事故有明显效果。
如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
随着电子技术的发展,利用单片机技术对交通灯进行智能化管理,已成为目前广泛采用的方法
毕业论文进度安排:
查找资料、选定参考方案
确定方案、系统硬件和软件电路的设计、检查
调试仿真、完成设计报告
指导教师意见:
指导教师签名:
年月日
毕业论文(设计)写作提纲
一、论文题目
交通灯单片机程序设计
二、论题观点来源:
单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。
从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机
三、基本观点:
采用51单片机作为系统的MCU,基本完成控制两组交通指示灯交替亮
四、论文结构:
论文题目
中文摘要
前言
2交通管理方案论证
设计任务方案介绍
3交通灯系统硬件设计
硬件设计
4交通灯软件设计
程序设计流程图延时的设定4.2.1计数器初值计算相应程序代码程序的主控制循环调用对现有程序的扩充
5实验平台
实验平台实验步骤5.2.1编写程序代码编写程序代码按照系统硬件连线图连接好系统并调试
结论
参考文献
毕业论文(设计)工作中期检查表
系别:
自动化控制系班级:
机电
(2)班
学生姓名
韩波
学号
指导教师
杨静
职称
讲师
论文(设计)题目
交通灯单片机程序设计
选题是否有变化
否
如有,请
填写原因
是否一人一题
是
是否进行了选题背景、及写作提纲
是
是否进行了文献调研
是
本论文拟解决的关键问题
教师填写部分
论文(设计)进度情况:
提前完成
正常进行
延期滞后(请写出原因)
工作态度情况(学生对毕业论文(设计)的认真程度、完成指导教师布置任务情况):
认真
较认真
一般
不认真
中期质量评价(学生已完成部分的工作质量情况):
好
中
差
存在的问题与建议:
指导教师(签名):
年月日
系毕业论文(设计)工作领导小组意见(如被查学生为差的,请系毕业论文〈设计〉领导小组写出处理意见):
领导小组组长(签名):
年月日
论文题目
中文摘要
近年来随着科技的飞速发展,一个以微电子技术、计算机技术和通信技术为先导的信息革命正在蓬勃发展。
计算机技术作为三者之一,怎样与实际应用更有效的结合并发挥其作用。
单片机作为计算机技术的一个分支,正在不断的应用到实际生活中,同时带动传统控制检测的更新。
在实时检测和自动控制的应用系统中,单片机往往是作为一个核心部件使用,针对具体应用对象的特点,配以其它器件来加以完善。
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。
那么靠什么来实现交通的井然秩序呢?
靠的是交通信号灯的自动指挥系统,来实现交通的井然有序。
交通信号灯控制方式很多。
本系统采用美国ATMEL公司生产的单片机AT89S51,以及其它芯片来设计交通灯控制。
实现了通过AT89S51芯片的P1口设置红、绿灯点亮的功能,通过AT89S51芯片的RXD、TXD输入、输出设置显示时间。
交通灯的点亮采用发光二极管实现,时间的显示采用七段数码管实现。
单片机系统采用的直流供电。
为了系统稳定可靠,系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。
系统实用性强、操作简单、扩展性好。
关键词:
单片机、MC-51、交通灯、红绿灯
前言
今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
“1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两块以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
”
“1914年,电气启动的红绿灯出现在美国。
这种红绿灯由红绿黄三色圆形的投光器组成,安装在纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
1918年,又出现了带控制的红绿灯和红外线红绿灯。
带控制的红绿灯,一种是把压力探测器安在地下,当车辆接近时,红灯便变为绿灯;另一种是用扩音器来启动红绿灯,司机遇红灯时按一下喇叭,就使红灯变为绿灯。
红外线红绿灯当行人踏上对压力敏感的路面时,它就能察觉到有人要过马路。
红外光束能把信号灯的红灯延长一段时间,推迟汽车放行,以免发生交通事故。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
随着经济的发展,交通运输中出现了一些传统方法难以解决的问题。
道路拥挤现象日趋严重,造成的经济损失越来越大,并一直保持大比例的增长。
现在交通系统已不能满足经济发展的需求。
由于生活水平的提高,人们对交通运输的安全性及服务水平提出了更高的要求。
在交通中管理引入单片机交通灯控制代替交管人员在交叉路口服务,有助于提高交通运输的安全性、提高交通管理的服务质量。
并在一定程度上尽可能的降低由道路拥挤造成的经济损失,同时也减小了工作人员的劳动强度。
中国车辆数量不断增加,交通控制在未来的交通管理中起着越来越重要的作用。
智能交通灯的管理比重修一条马路无论在经济、交通运行速率上都有很好的效益、更加节约资源。
使交管人员有更多的精力投入到管理整个城市交通控制,带来更大的经济和社会效益,为创造美好的城市交通形象发挥更多的作用。
2交通管理方案论证
设计任务
东西(A)、南北(B)两干道交于一个十字路口,各干道有一组红、左转绿、绿三个指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
红灯的设计时间为40秒,绿灯及左转绿灯各为20秒。
设A道和B道的车流量相同。
方案介绍
把设计任务细化为四个状态,其对应状态:
如图1
图1状态转换图
整个交通灯控制由四个状态组成,可以用程序设计实现,也可用时序逻辑实现.以下方案就是分别用了这两种方法。
方案1设计思想:
于每一个模块的计数多不是相同,这里的各模块是以预置数和计数器计采用分模块设计的思想,程序设计实现的基本思想是一个计数器,选择一个单片机,其内部为一个计数,是十六进制计数器,模块化后,通过设置或程序清除来实现状态的转换,由
数共同来实现的,所以要考虑增加一个置数模块,其主要功能细分为,对不同的状态输入要产生相应状态的下一个状态的预置数,如图中A道和B道,分别为次干道的置数选择和主干道的置数选择。
以主干道为例,简述其设计思想。
如前分析,已经确定该系统有四个状态,而置数子模块可定要将下一状态的预置数准备好,所以很容易得到主干道的置数表如:
表1
状态
主干道预置数
次干道预置数
00
40
20
01
20
20(左转)
10
20
40
11
20(左转)
20
表1置数表
由该表,就可以通过程序循环的方法设计该模块,主要思想是通过数据判断指令、跳转指令实现,由主控制器计时和中断产生的四个状态去译码,从而得到不同的输出,即预置数,由上分析可用一个计数器和跳转指令去完成的预置数。
而红绿灯的显示也是一样,由状态分析可以得出红绿灯的变化表如:
表2
状态
主干道灯显示
次干道灯显示
00
红灯
绿灯
01
红灯
左转绿灯
10
绿灯
红灯
11
左转绿灯
红灯
表2红绿灯变化表
通过这张表就可以用组合电路实现该功能了,可以用数据选择器的思想,在本系统中,直接通过门电路的译码,接下来就是计数模块了,其主要的功能细分为,要从预置数开始递减计数,一个状态结束,通过判断,通知主控制模块,使之进入下一模块。
还有一个必须考虑到的就是,预置数必须在下一个状态来之前准备好,而红绿灯的状态变化,必须和计数状态同步,于是引起预置数变化的程序要超前于系统本身的状态变化,所以,系统中的两个状态转换时,在上一状态结束时设置预置数,而控制红绿灯的是随着系统本身状态的变化而变化,体现在本子电路中就是有两组电路去判断符合的状态。
方案2设计思想:
状态转换表如:
表3
状态
主干道灯显示
次干道灯显示
00(15S)
红灯
绿灯
01(05S)
红灯
黄灯
10(15S)
绿灯
红灯
11(05S)
黄灯
红灯
表3状态转换表
本方案分三步:
(1)要建立三路信号灯的控制系统,本设计采用7408芯片通过组合逻辑控制三路灯的显示关系。
(2)建立显示控制系统,本设计采用74190芯片倒计时控制,每个方向用两片相连实现,另外用74153芯片,因为分析中设置的时间末位均为5,所以只要用一片74153对高位置位,将低位的初值预置锁定为5,而高位则根据需要由反馈部分提供预置值。
(3)建立反馈和细节连接部分,本部分主要解决显示和灯控的同步问题本系统采用倒计时系统减为0,如当系统减为0时通过两个D触发器得到两个变量,即为开头分析中的状态,通过它的变化得到不同的逻辑关系,驱动74153控制哪组灯亮(对应关系如表所示),另外他还要同步反馈到显示系统的置数环节。
注意:
本实验中若采用更复杂的四片74190控制主干道的两组灯,再用八片74153分别对74190置数可实现任意数值的交通灯系统。
另外对7408片子的控制红灯的端口用一个与门将一端再接一个频率一定的方波,使一边为黄灯时,另一边的红灯在闪烁。
方案比较:
方案1(以下称1)用了模块设计,而方案2(以下称2)采用的是一般设计,相比之下1有较强的可读性和较强的可修改性,而2则在设计上显得较简单,设计纯朴,便于测试,它的优势则在于提供了一条较为便捷的解决方案。
2首先将许多逻辑关系简化到极点,而后将其一起集成用较少的芯片去完成所需功能。
我们从中可以得出的是,我们最终的设计应该尽量使用模块化设计。
对工程设计人员来说,将来的产品无论从修改还是升级考虑对有好处,但另外我们又需将设计简单化,因此我觉得在设计初期尽可能的简单化设计,而一旦设计的各项测试通过了,在有可能的条件下将设计模块化,所以本设计以第一方案为主进行。
3交通灯系统硬件设计
硬件设计
本系统主要由单片机控制系统、按键模块、串口通信模块、LED显示模块、交通灯显示模块等组成,如图4所示。
其中,单片机系统为系统的主控制器,用以控制其他模块协调工作;按键模块采用外部中断INT0的方式;串口通信模块采用RS—485接口;LED显示模块用以显示交通灯控制参数;交通灯显示模块用以显示各车道的通行情况。
图2系统硬件
(1)单片机控制系统及基本电路
本系统采用AT89C52芯片作为核心控制器件。
它的P0、P2口用于数码管显示控制,P1口用于交通灯显示控制,按键处理主要用中断的方式进行,特别加入了“看门狗”电路以保证该系统的稳定性。
单片机基本外围电路如图5所示。
(2)按键控制模块
按键控制模块由AT89C52芯片的P3口控制,电路如图5所示。
当某个键按下时,产生的负脉冲通过编码器74LS148的GS致使INT0中断,单片机响应这个中断,并读入74LS148的编码信息,从而根据按下不同键进行相应处理。
(3)LED显示模块LED显示模块包括控制参数调整显示模块和交叉口倒计时显示模块2部分,此2部分的8位LED均采用动态显示方式,即将所有数码管的段码线相应段并联在一起,接到P0口,用P2口的各位对各个LED进行控制,从而实现对LED的定时选通。
(4)交通灯显示模块
交通灯显示模块由单片机的P1口进行控制,用32个发光二极管模拟此交叉口的车道交通灯(交叉口4个方向的直行绿灯、左转绿灯、红灯和黄灯),以及各路口人行道的交通灯。
(5)串口通信模块在该模块中,采用RS—485接口完成上位机或相邻交通灯控制系统与单片机的通信,从而实现该系统的控制、调试与报警。
RS—485接口具有良好的抗噪声干扰性,较长的传输距离和多站能力,其串行口电路图如图6所示。
图3串行口电路
图4单片机基本电路及按键控制电路
4交通灯软件设计
程序设计流程图
(1)程序设计总框图:
如图4
图5程序设计框图
(2)程序详细流程图:
如图
图6程序详细流程图
流程图说明:
图中定时器在每50ms中断一下,设置为循环20次(此时为1秒),每1秒以后,R0,R1自动减1。
程序中的判断在相等情况下从右边出,不相同的情况往下
延时的设定
延时方法可以有两种一种是利用AT89C51内部定时器的溢出中断来确定1秒的时间,另一种是采用软件延时的方法。
4.2.1计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值,该值和计数器工作方式有关。
在方式0时M为213;在方式1时M的值为216;在方式2和3为28;
算法公式:
T=(M-TC)T计数或TC=M-T/T计数
T计数是单片机时钟周期TCLK的12倍;TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 ×1微秒=毫秒
方式1 TMAX=216 ×1微秒=毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
实现1秒的方法:
我们采用在主程序中设定一个初值为20的软件计数器和使T1定时50毫秒。
这样每当T1到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为0表示1秒已到可以返回到输出时间显示程序。
4.2.2相应程序代码
(1)定时器的设置
定时器需定时50毫秒,故T1工作于方式1。
初值计算:
TC=M-T/T计数 =216-50ms/1us=15536=3CBOH
START:
MOVTMOD,#10H;令TO为定时器方式1
MOVTH0,#3CH;装入定时器初值
MOVTL0,#0BOH
SETBEA ;打开总中断
SETBET1 ;开T1中断
SETBER ;启动T1计数器
CLRFLAG1
CLRFLAG2
CLRFLAG3
MOV R3, #20H ;软件计数器赋初值
(2)相应中断服务子程序
ORG 001BH
LJMP DSD
ORG0030H
DSD:
INC R3
MOVTH0,#3CH;重装入定时器初值
MOVTL0,#BOH
CJNER3,#20,FH
DECR0
DECR1
MOVR3,#00H
FH:
RETI
程序的软件延时:
AT89C52的工作频率为0—33MHZ,我们选用的AT89C52单片机的工作频率为12MHZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12M)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DELAY:
MOVR4,#08H延时1秒主程序
DE2:
LCALLDELAY1
DJNZR4,DE2
RET
DELAY1:
MOVR4,#00H;延时125us子程序
D1:
MOVR5,#00H
D2:
DJNER5,DL2
DJNER4,D1
RET
DELAY1为一个双重循坏循环次数为256*256=65536所以延时时间=65536*2=131072us约为125us
DELAYR4设置的初值为8主延时程序循环8次,所以125us*8=1秒
由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
程序的主控制循环调用
用来实现四个状态之间的转换,代码如下:
DIAOY:
;循环控制子程序
CJNER2,#01H,AA;判断不相等刚跳转
JBFLAG1,AA;FLAG1为1则跳转
LJMPSEC;跳转到SEC
AA:
CJNER2,#02H,AAA
JBFLAG2,AAA
SETBF0
LJMPTHR
AAA:
CJNER2,#03H,BB
JBFLAG3,BB
LJMPFOU
BB:
CJNER2,#04H,BBB;判断不相等则跳转
CLRF0;F0位清0
CLRFLAG1
CLRFLAG2
CLRFLAG3
LJMPFIR
BBB:
CJNER0,#00H,SGL
INCR2;R2加1
LJMPDIAOY
对现有程序的扩充
当由于紧急需要对道路进行长时间通行时,就要保持该道路更长时间的通行。
下面以东西方向为例进行紧急通行为例。
紧急通行是平常通行的特例,只要将相应的代码去掉就可以实现延长本车道的通行时间。
设置通行时间为20秒。
核心代码如下:
FIR:
MOVP1,#00H
SETB
CLR
CLR
CLR
MOVR0,#20
MOVR1,#20
SGL:
;与原程序类同
……
CJNER0,#00H,SGL
LJMPFIR
要实现东西方向的左转通行时,只需要修改FIR中的代码就可以了。
时间显示只要修改R0和R1就可以了。
要实现南北方及左转,只要把SGL换成SGL1、把FIR中代码进行相应的修改就可以了。
由于时间紧张,程序有不完善的地方。
原程序见程序实现代码。
5实验平台
实验平台
我们采用的是KeilSoftware生产的C52编译器。
运行在WindowsXP操作平台下。
开启计算机进入KeilC52编译器介面。
如图6
图7KeilC52编译器介面
实验步骤
通过上述仿真实现了预定的设计目标,证明了设计的方案可行合理.通过对AT89S51专用底座的焊接、时钟电路的焊接、复位电路的焊接、数码管和信号灯的焊接、电源电路的焊接,最后完成了本文设计的交通灯系统硬件实物如图7所示:
通电进行调试后证明该硬件系统实现了绿灯显示功能、时间倒计时显示功能、左转提示和紧急情况发生时手动控制等功能。
图8 交通灯系统实物图
5.2.1编写程序代码
程序代码分为3个模块:
中断模块,循环模块,算法模块。
(见程序实现代码)
5.2.2按照系统硬件连线图连接好系统并调试
1.调试程序
打开Keil软件,新建工程;
选择芯片;
新建文档,把编写好代码写入文档并保存了ASM文件;
把保存的文档加载到SourceGroup;
编译程序;
设置转换成16进制;
运行程序的结果;
2.把编译好的16进制文件输入单片机AT89C52仿真器和对其进行初始化。
3.给实验板进行通电,观察运行结果,不一致则跳到第一步进行反复调试,直到与预定目的一致。
以下是在程序调试过程中出现在情况:
通电以后,把程序装好,数码管是的数字不变,按复位键后重新开始还是如此。
经过和同组人的共同分析后,发现是中断系统在计时到了1秒以后,赋的初值R0,R1没有减1,修改如下:
DSD:
INCR3
MOVTH1,#3CH
MOVTL1,#0B0H
CJNER3,#20,FH;判断是否够1秒
DECR0
DECR1
MOVR3,#00H;R3清0
FH:
RETI;中断返回
通电以后,东西、南北方向的时间均递减,20秒以后,东西方向的20秒用完,变成东西左转、南北各20秒,此后,时间显示和红绿灯不再变化,一直保持这一状态。
经过老师和同组人的共同努力,终于找到原因,问题出在循环控制过程中,当经过第一次20秒判断后,寄存器R2加1,当再次运行到循环控制处时,判断R2与#01H相同,程序跳到SEC处执行,此后一直如此。
解决方法如下:
设置3个标记位:
FLAG1BIT00H;标记00H位
FLAG2BIT01H
FLAG3BIT02H
在循环控制中加入判断如:
DIAOY:
CJNER2,#01H,AA;判断不相等刚跳转
JBFLAG1,AA;FLAG1为1则跳转
LJMPSEC;跳到SEC
在跳到SEC后,在运行到该程序后加给FLAG1置数,程序如下:
SEC:
CLR
SETB