交通灯丁超50.docx
《交通灯丁超50.docx》由会员分享,可在线阅读,更多相关《交通灯丁超50.docx(31页珍藏版)》请在冰豆网上搜索。
交通灯丁超50
课程设计论文
题目十字路口灯火控制系统设计
院系机械工程学院
专业机械电子工程班级0901班学号50号
学生姓名丁超
导师姓名周慧黄菊生
完成日期2012年1月4日
湖南工程学院
课程设计任务书
设计题目:
十字路口灯火控制系统设计(Ⅳ)
姓名
系别
机械
专业
机械电子技术
班级
JS0901
学号
指导老师
周慧、黄菊生
教研室主任
陈小异
一、基本任务及要求
(1)硬件扩展8031、74LS373、ROM、RAM、8279(显示)、7407、74LS138、74LS240、
8255(基本I/O);PB口接彩灯,P1口接开关控制系统的启动/停止;扩展外部中断,
实现应急控制。
(2)软件
从左至右定位显示“通行时间通行道路”控制程序,其中,“E”表示东
西向;“S”表示南北向。
标准十字路口灯火控制程序(通行—绿、等待—红)。
启/停、应急控制程序。
启动时先显问候语1s“Good”再指挥交通,停止黑屏、熄灯。
应急中断—全黄灯、屏闪“日.……日.”,软件延时程序(基本时间0.5s)。
2.要求
(1)绘制硬件接线框图;绘制系统控制流程框图。
(2)撰写设计说明书(5~8千字),并附程序清单及其功能注释。
(3)控制程序必须调试通过。
二、进度安排及完成时间
1.设计时间二周(从2012年12月24日至2013年1月4日)
2.进度安排星期一~三布置任务;查阅资料;讲授相关知识;做与设计相关的实验。
第1周:
星期四设计硬件电路图;编写各功能子程序。
星期五调试各功能子程序,并记录存在的问题与解决的方法。
第2周:
星期一~二整理资料链接所有程序,进行总体调试。
星期三~四按格式撰写设计说明书。
星期五上交设计作业(纸质文档),并参加答辩。
目录
绪论4
第一章系统总体设计要求6
1.1总体结构6
1.2系统工作原理6
1.2.1系统功能分析6
第二章控制系统软件设计9
2.1主程序设计及功能9
2.2系统流程及程序设计9
2.2.1主程序流程总体设计9
2.2.2主程序设计11
2.2.3显示、倒计时子程序设计11
2.3功能子程序设计12
2.3.18279初始化子程序12
2.3.2LED显示子程序:
12
2.3.3彩灯显示子程序设计15
第三章控制系统调试17
第四章收获及体会18
参考文献19
绪论
随着社会经济的不断发展,城市交通问题也日渐严重!
人、车、路三者关系的协调,已成为交通管理部门急需解决的重要问题之一。
而作为城市交通控制系统的重要组成部分,十字路口红绿灯控制电路的得当与否对缓解城市交通压力起着至关重要的作用。
此次设计题为“十字路口灯火控制系统设计”,虽说制作过程过于繁琐,但对于了解其工作原理却有不可替代的作用。
现实中的十字路口南北方向与东西方向的车流量虽有所差异,但其红绿灯的工作状态却不失对称性。
经过认真思考与仔细分析,最终在老师的指导下终于明确了整个设计中的硬件设计和软件调试。
通过实现仿真运行,我们逐步完成了课题的要求,在设计倒计数器电路时,为了配合实物制作,减少过多的连线,我们将实际考察的控制时间按比例压缩为40秒,并应用整体循环的形式简化了电路,减少了一定的工作量。
最后经过不断努力,我们终于得到了较为理想的设计方案,并在仿真中得以实现。
可惜,在实际操作中,由于自己的大意,将极少数的线路连错进而使得不少焊点过于粗糙,导致实际与理论出现偏差,最终所得实物未能如仿真般顺利成功!
当今,红绿灯安装在个个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这个技术在19世纪就已经出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红、蓝两色的机械般手势信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的会议大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转方式玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,是警察受伤,遂被取消!
电气启动的红绿灯出现在美国,这种红绿灯由红黄绿三色圆形的投光器组成,1914年始装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
信号灯的出现,使得交通得以有效的管理,对于疏导交通流量、提高道路通行能力、减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯时通行信号灯,面对绿灯的车辆可以直行,左转弯和右转弯,除非两一种标志禁止某一种转向。
左右转弯车辆必需让合法的正在路口内行驶的车辆和过人行横线的行人优先通行。
红灯是禁行信号灯,面对红灯的车辆必需在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已经十分接近停车线而不能安全停车的可以进入交叉路口!
第一章系统总体设计要求
1.1总体结构
本设计以单片机为控制核心,模块化设计,共分以下几个功能模块:
单片机控制系统、行车方向指示灯、倒计时以及显示模块等。
单片机作为整个硬件系统的核心,它既是协调整机工作的核心控制器,又是数据处理器。
它由单片机、时钟电路、复位电路等组成。
行车方向采用双色LED发光管,由绿色显示放行,红色显示禁止通行,黄色表示紧急状况,十字路口所有车辆和行人都禁止通行。
系统采用四位数码管,分别用来显示通行状态。
(1)硬件控制:
将各功能芯片与单片机8051相连,以组成一个完整的交通灯控制系统。
(2)软件控制:
一方面,通过程序设计来实现各路口等颜色的变化;另一方面,通过程序来实现通行状态和倒计时的功能。
(3)开关控制:
一个开关用来控制整个系统的启动和停止,当K1为高电平时,系统启动,当K1为低电平时,系统关闭。
另一个开关用来处理交通灯的应急状态,(比如说119、120等急救车辆通过时)低电平是系统响应应急情况的时候,高电平为还回继续控制交通通行状态。
(4)硬件接线图见附录A
1.2系统工作原理
1.2.1系统功能分析
此次设计的课题主要是实现一个十字路口交通灯的控制情况,其控制的状态规律如表2-1所列
表2-1十字路口交通灯变化规律
交通状态与属性
南北方向交通灯
东西方向交通灯
占用时间
状态1
通行
绿灯:
允许直行通行
红灯:
禁止所有通行
40S
状态2
通行
红灯:
禁止所有通行
绿灯:
允许直行通行
40S
1.双色灯HL的功能
实验机用双色灯模拟交通灯控制,一个双色灯就能产生红、黄、绿三种不用的颜色,因此模拟十字路口交通灯控制只要四个双色灯就可以了。
由于双色灯HL1~HL4由74LS240驱动,其中输入端DG1~DG4为绿色灯管芯的正极。
控制双色灯绿色等的亮灭;DR1~DR4为红色灯管芯的正极,控制双色灯中红色的亮灭。
而74LS240为反相驱动器,因此输出的低电平控制信号,经过74LS240反相后变为高电平,能使对应的双色灯LED亮,所以,低电平控制信号为灯亮的有效控制信号。
如表2-2所示:
表2-2交通灯控制字
交通运行状态
P0口红灯控制信号
P0口绿灯控制信号
控制字
DR4
DR3
DR2
DR1
DG4
DG3
DG2
DG1
状态1
南北绿东西红
1
0
0
1
0
1
1
0
96H
状态2
南北红东西绿
0
1
1
0
1
0
0
1
69H
状态3
各路口灯全黄
0
0
0
0
0
0
0
0
00H
2.数字显示功能
单片机系统中用LED显示器显示信息,它是由8段发光二极管组成,LED显示器又叫数码管,本次的设计电路当中8段发光二极管采用的是共阴极接法,即高电平有效。
其字符显示位置与位码关系如图2-1所示:
图2-1字符显示位置与位码关系
在设计系统的时候要求从左至右显示“通行时间——通行状态”。
因此,在设置显示位置的时候在第五、四、三、二、一位无显示。
在七、六两位显示倒计时数字,零位显示通行状态E或S。
在实际应用中,数码管各管脚按一定的方法接线,8个段的管脚a、b、c、d、e、f、g、dp按顺序接一个8位的I/O口,一般a为最低位,dp为最高位,这样,一个字节的显示数据与数码管各段的对应关系如图2-2所示:
D7D6D5D4D3D2D1D0
dp
g
f
e
d
c
b
a
图2-2字节显示数据与数码管各段的对应关系
数码管各段按这样顺序排列构成的字形码如表2-3所示。
共阴极数码管COM端接地,字段数据为高电平1点亮。
共阳极则相反,字段数据为低电平0点亮。
表2-3常见字符段码值数据表
显示字符
共阴极
共阳极
dpgfedcba
控制字
dpgfedcba
控制字
0
00111111
3FH
11000000
0C0H
1
00000110
06H
11111001
0F9H
2
01011011
5BH
10100100
0A4H
3
01001111
4FH
10110000
0B0H
4
01100110
66H
10011001
99H
5
01101101
6DH
10010010
92H
6
01111101
7DH
10000010
82H
7
00000111
07H
11111000
F8H
8
01111111
7FH
10000000
80H
9
01101111
6FH
10010000
90H
因为在实验室的爱迪克实验机的数码显示管是共阴极的,所以本组用的相关段码值表如表2-4所示
表2-4相关段码值表
显示
字符
dpgfedcba
控制
字
显示
字符
dpgfedcba
控制
字
0
00111111
3FH
9
01101111
6FH
1
00000110
06H
D
01011110
5EH
2
01011011
5BH
E
01111001
79H
3
01001111
4FH
o
01011100
5CH
4
01100110
66H
日。
11111111
0FFH
5
01101101
6DH
全灭
00000000
00H
6
01111101
7DH
7
00000111
07H
8
01111111
7FH
3.延时的设定
在此次的程序设计中我们采用软件延时。
第二章控制系统软件设计
硬件平台结构一旦确定,大的功能框架即形成。
软件在硬件平台上构筑,完成各部分硬件的控制与协调。
系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。
因此,软件是本系统的灵魂,软件才用模块化设计方法,不仅易于编程和调试,也可减小软件故障和提高软件的可靠性,对软件进行全面测试也是检验错误排除故障的重要手段。
2.1主程序设计及功能
主程序满足的功能:
1、启动时先显问候语1s“Good”再指挥交通,停止黑屏、熄灯
2、NS通行状态时,车辆直行放行,禁止转弯,NS交通控制灯显示绿色,EW显示为红色,数码显示管显示倒计时40S,通行状态显示为S;
3、EW通行状态时,车辆直行放行,禁止转弯,EW交通控制灯显示绿色,NS显示为红色,数码显示管显示倒计时40S,通行状态显示为E.。
4、当紧急情况发生时(比如119、120等紧急车辆需快速通过时),按下应急开关,禁止行人和车辆通行,应急中断—全黄灯、屏闪“日.日.日.日.日.日.日.日.”
2.2系统流程及程序设计
2.2.1主程序流程总体设计
软件总体设计及流程图见图3-1,主要完成各部分的软件控制和协调。
本系统主程序模块主要完成的工作是对系统的初始化,包括对8279、显示屏的初始化,等待外部中断,以及根据所需要的功能进行相应的操作,其流程图如图3-1所示,主程序完成初始化后,启动交通指挥,循环执行中断紧急子程序是否启动检查、延时子程序、倒计时子程序、显示子程序等。
在程序中增加停止判断,实现即时停止系统控制。
N
Y
图3-1总程序流程框图
2.2.2主程序设计
START:
MOVSP,#50H;设置堆栈指针
LCALLINIT8279;调用8279初始化子程序
SETBEA;允许总中断
SETBEX0;允许外部中断0
CLRIT0;设置外部中断0位低电平触发
JBP1.0,$;判断启动开关状态
LCALLGOOD;显示GOOD
LCALLQP;调用清屏子程序
LCALLDL1S;调用延时子程序
A1:
LCALLNSJISHI;调用南北通行状态下的LED显示子程序
LCALLEWJISHI;调用东西通行状态下的LED显示子程序
SJMPA1
2.2.3显示、倒计时子程序设计
开始
8279初始化
清屏
显示初始状态
NS彩灯显示绿EW彩灯显示红
“通行时间——通行状态”
40S倒计时
循环运行
返回
图3-2显示、倒计时子程序流程图
2.3功能子程序设计
2.3.18279初始化子程序
包括:
8279状态/命令口地址、8279数据口地址、清楚显示RAM、设定的将要写入的显示RAM地址、设置堆栈指针、置8279工作方式、置键盘扫描速率、清楚LED显示字等。
Z8279EQU0FF82H;8279状态/命令口地址
D8279EQU0FF80H;8279数据口地址
LEDMODEQU10H;右边输入,八位字符显示,外部译码
LEDFEQEQU38H;扫描速率
LEDCLSEQU0D1H;清楚显示RAM
LEDWR0EQU80H;设定的将要写入的显示RAM地址
ORG0000H
AJMPSTART
ORG0003H;设置中断0入口地址
AJMPINIT0
INIT8279:
MOVDPTR,#Z8279
MOVA,#LEDMOD;置8279工作方式
MOVX@DPTR,A
MOVA,#LEDFEQ;置键盘扫描速率
MOVX@DPTR,A
MOVA,#LEDCLS;清楚LED显示字
MOVX@DPTR,A
LCALLDL1S;调用延时子程序
RET
2.3.2LED显示子程序:
1、GOOD显示:
GOOD:
MOVR5,#06H
MOVR4,#5
LCALLDISLED;第5位显示G
MOVR5,#0CH
MOVR4,#4
LCALLDISLED;第4位显示o
MOVR5,#0CH
MOVR4,#3
LCALLDISLED;第3位显示o
MOVR5,#0BH
MOVR4,#2
LCALLDISLED;第2位显示D
LCALLDL1S;调用延时子程序DL1S
LCALLDL1S;调用延时子程序DL1S
RET
2、东西倒计时显示子程序
EWJISHI:
MOVR0,#40
MOVR7,#41
EWLP:
MOVR5,#0AH;向LED输入状态字E
MOVR4,#0
LCALLDISLED
LCALLEWdeng;调用EW彩灯显示子程序EWdeng
MOVA,R0
MOVB,#10
DIVAB
MOV32H,A
MOV33H,B
DECR0
MOVR5,32H
MOVR4,#7
LCALLDISLED
MOVR5,33H
MOVR4,#6
LCALLDISLED
LCALLDL1S
LCALLDL1S
DJNZR7,EWLP
RET
3、南北倒计时显示子程序
NSJISHI:
MOVR0,#40
MOVR7,#41
NSLP:
MOVR5,#05H;向LED输入状态字S
MOVR4,#0
LCALLDISLED
LCALLNSdeng;调用EW彩灯显示子程序NSdeng
MOVA,R0
MOVB,#10
DIVAB
MOV32H,A
MOV33H,B
DECR0
MOVR5,32H
MOVR4,#7
LCALLDISLED
MOVR5,33H
MOVR4,#6
LCALLDISLED
LCALLDL1S
LCALLDL1S;1s
DJNZR7,NSLP
RET
4、中断闪屏显示子程序
SHAN:
LCALLQP;调用清屏子程序QP
MOVR5,#0DH;给显示代码位置
MOVR4,#7;给显示位置
LCALLDISLED;调用LED显示子程序DISLED
MOVR5,#0DH
MOVR4,#6
LCALLDISLED
MOVR5,#0DH
MOVR4,#5
LCALLDISLED
MOVR5,#0DH
MOVR4,#4
LCALLDISLED
MOVR5,#0DH
MOVR4,#3
LCALLDISLED
MOVR5,#0DH
MOVR4,#2
LCALLDISLED
MOVR5,#0DH
MOVR4,#1
LCALLDISLED
MOVR5,#0DH
MOVR4,#0
LCALLDISLED
LCALLHDdeng;调用黄灯子程序HDdeng
LCALLDL1S;调用延时子程序DL1S
RET
2.3.3彩灯显示子程序设计
1、南北向彩灯显示子程序
NSdeng:
MOVDPTR,#0F22BH;工作模式0
MOVA,#80H;状态字
MOVX@DPTR,A
MOVA,#10010110B
MOVDPTR,#0F229H;PB口出
MOVX@DPTR,A;点亮对应的LED
RET
2、东西向彩灯显示子程序
EWdeng:
MOVDPTR,#0F22BH;工作模式0
MOVA,#80H
MOVX@DPTR,A
MOVA,#01101001B
MOVDPTR,#0F229H;PB口出
MOVX@DPTR,A;点亮对应的LED
RET
3、黄灯灯显示子程序
HDdeng:
MOVDPTR,#0F22BH;工作模式0
MOVA,#80H
MOVX@DPTR,A
MOVA,#00H
MOVDPTR,#0F229H;PB口出
MOVX@DPTR,A;点亮对应的LED
RET
4、全灭灯显示子程序
CQdeng:
MOVDPTR,#0F22BH;工作模式0
MOVA,#82H
MOVX@DPTR,A
MOVA,#0FFH
MOVDPTR,#0F229H;PB口出
MOVX@DPTR,A;点亮对应的LED
第三章控制系统调试
子程序主要涉及到显示子程序和倒计时子程序的调试,首先进行调试的是显示子程序,在该设计题目当中显示的要求为在5432四个位显示“GOOD”这个符号。
在用相应的软件进行编程完成并且检查无错误后,即可将程序送到单片机中进行运行调试,待编译完成后按F9进行全速运行,观察显示状态是否符合要求的状态,如有显示错误,需进行相应的检查,以排除故障,达到显示要求。
在进行显示程序调试时没有发现不正常的错误,一切都比较的顺利。
所以没有做什么大的修改。
显示子程序调试完成后,并可进行下一步的工作—即倒计时的子程序的编程和调试,在该子程序的编程和调试前期步骤和显示的大同小异,唯一不同的是在调试过程中发现了一些问题,一开始的问题是:
显示了倒计时所需时间的数字,但没有按规定的跳动,于是我开始检查程序中是否含有DEC指令、正确的硬件延时程序语句、调用子程序是否正确等方法一一的排除错误。
还有一次就是时间倒计完后没有循环的运行,为此我又一段段的程序进行检查,看是否含有需要返回的程序语句,看是否少写,错写等。
在经过一次次的调试、修改,最后终于将显示和倒计时的程序合二为一,并且能正确不出错误的运行。
接下来便是整个组一起合力将所有的子程序组合起来一起运行调试,在进行整个总体程序的调试过程中我们遇到了很多的问题,以至于我们花了大量的时间在主程序上,在调试过程中我们有很多没有注意的问题,比如说,中断问题:
这对于我们来说是一个比较大的难题,首先中断是用于应急状态的,它的要求就是不管交通灯运行到什么状态,一开中断就必须要执行中断,所以中断在任意时刻都必须有效,即可以申请中断,在程序中就要包含了可以随时开中断的程序,待中断开启,又完成了应急状态后,要恢复正常的交通秩序,而在恢复的过程中我们没有开放定时器,所以在恢复的过程中时间总不跳动,而且在编程的过程中一定要注意:
定时器是不能用于子程序的跳转的,它只能是绝对跳转,在中断完成后,要返回定时器的工作,这样就必须要重新开启定时器,否则定时器将不能工作,也就是在调试过程中中断返回后为什么定时器没有跳动的原因。
第四章收获及体会
本系统就是充分利用了8051和8255芯片的I/O引脚。
系统采用MSC—51系列单片机Intel8051和可编程并行I/O接口芯片8255A为中心