RAM试验交通灯系统.docx
- 文档编号:17871555
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:17
- 大小:60.09KB
RAM试验交通灯系统.docx
《RAM试验交通灯系统.docx》由会员分享,可在线阅读,更多相关《RAM试验交通灯系统.docx(17页珍藏版)》请在冰点文库上搜索。
RAM试验交通灯系统
综合设计实验报告
题目:
交通灯系统
系别:
计算机系
专业:
计算机科学与技术
姓名:
学号:
指导教师:
河南城建学院
年月日
目录
1前言
2任务及要求1
2.1设计要求1
2.2设计方案1
3电路设计1
3.1电路原理1
3.2单元电路设计1
4程序设计2
4.1程序流程设计2
4.2程序清单2
5系统仿真2
5.1系统仿真过程3
5.2系统仿真过程4
6设计总结15
参考文献17
前言
本系统由单片机系统、键盘、LED显示、交通灯演示系统组成。
系统包括人行道、左转、右转、以及基本的交通灯的功能。
系统除基本交通灯功能外,还具有倒计时、时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。
近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。
交通信号灯控制方式很多当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口
关键词:
单片机;交通灯;停车;89C51;交叉路口
2设计任务及要求
2.1任务
(1)在十字路口用单片机设计一交通灯,使东南西北方向车辆行驶尽然有序。
(2)控制红、绿、黄三种灯来控制车辆行驶。
(3)当南北是绿灯时,东西方向显示红灯而禁止车辆通行。
2.2要求
(1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。
(2)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。
(3)以单片机为控制核心,实现硬件电路的设计、程序设计,并实现仿真。
3电路原理与电路图
3.1电路原理
一个完整的交通灯相当于一个简单的单片机系统,该系统有交通灯设置电路、单片机、显示电路等构成。
单片机是集成的IC芯片,只需根据实际设计要求选型。
其他部分都需要根据应用要求和性能指标自行设计。
2.1交通灯硬件电路图图2.11硬件电路
3流程图与仿真结果
3.1程序流程图
图3.11程序功能接口流程图
图4.12南北方向黄灯警告仿真效果图
图4.11东西方向通车仿真效果图
分析不同仿真结果表明:
情况一,南北方向路灯亮绿灯20秒,此时东西方向的红灯亮20秒(南北方向通车)。
情况二,南北方向路灯亮黄灯5秒,此时东西方向继续亮红灯(南北方向通车,黄色警告)。
情况三,南北方向亮红灯,东西方向亮绿灯(东西方向通车)。
情况四,南北方向亮红灯,东西方向闪亮黄灯三秒(东西方向通车),当中断口响应时,所有方向全部亮红灯。
4.3算法描述
4.3.1计数器初值计算
定时器工作时必须给计数器送计数器初值,这个值是送到TH和TL中的。
他是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值设定为C和计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器摸值,该值和计数器工作方式有关。
在方式0时M为213;在方式1时M的值为216;在方式2和3为28
4.3.21秒的方法
我们采用在主程序中设定一个初值为20的软件计数器和使T0定时50毫秒.这样每当T0到50毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,CPU先使软件计数器减1,然后判断它是否为零。
为零表示1秒已到可以返回到输出时间显示程序。
4.3.3相应程序代码
(1)主程序
SECOND1EQU30H;东西路口计时寄存器
SECOND2EQU31H;南北路口计时寄存器
DBUFEQU40H;显示码缓冲区1
TEMPEQU44H;显示码缓冲区2
LED_G1BITP2.1;东西路口绿灯
LED_Y1BITP2.2;东西路口黄灯
LED_R1BITP2.3;东西路口红灯
LED_G2BITP2.4;南北路口绿灯
LED_Y2BITP2.5;南北路口黄灯
LED_R2BITP2.6;南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
(2)中断服务子程序
ORG000BH
AJMPBRT0
ORG00BH
BRT0:
DJNZR0,NEXT
AJMPTIME;跳转到时间及信号灯显示子程序
DJNZ:
MOV RO,#14H ;恢复R0值
MOVTH0,#3CH;重装入定时器初值
MOVTL0,#BOH ;
MOVIE, #82H
4.3.4软件延时
MCS-51的工作频率为2-12MHZ,我们选用的89C51单片机的工作频率为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
RET
MOVRN,#DATA字节数数为2机器周期数为1
所以此指令的执行时间为2ms,DELAY1为一个双重循坏循环次数为256*256=65536所以延时时间=65536*2=131072us约为125us,DELAYR4设置的初值为8主延时程序循环8次,所以125us*8=1秒,由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
5程序清单
SECOND1EQU30H;东西路口计时寄存器
SECOND2EQU31H;南北路口计时寄存器
DBUFEQU40H;显示码缓冲区1
TEMPEQU44H;显示码缓冲区2
LED_G1BITP2.1;东西路口绿灯
LED_Y1BITP2.2;东西路口黄灯
LED_R1BITP2.3;东西路口红灯
LED_G2BITP2.4;南北路口绿灯
LED_Y2BITP2.5;南北路口黄灯
LED_R2BITP2.6;南北路口红灯
ORG0000H
LJMPSTART
ORG0100H
START:
MOVTMOD,#01H;置T0为工作方式1
MOVTH0,#3CH;置T0定时初值50ms
MOVTL0,#0B0H
CLRTF0
SETBTR0;启动T0
CLRA
MOVP1,A;关闭不相关的LED
LOOP:
MOVR2,#20
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
LCALLSTATE1;调用状态1
WAIT1:
JNBTF0,WAIT1;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR2,WAIT1;判断1s到否?
未到继续状态1
MOVR2,#20;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT1;状态1维持20s
MOVR2,#5;置50ms计数初值
MOVR3,#3;绿灯闪3s
MOVR4,#4;闪烁间隔200ms
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT2:
LCALLSTATE2;调用状态2
JNBTF0,WAIT2;查询50ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值50ms
MOVTL0,#0B0H
DJNZR4,WAIT2;判断200ms到否?
未到继续状态2
CPLLED_G1;东西绿灯闪
MOVR4,#4;闪烁间隔200ms
DJNZR2,WAIT2;判1s到否?
未到继续状态2
MOVR2,#5;置50ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT2;状态2维持3s
MOVR2,#20;置50ms计数初值
MOVR3,#2;黄灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT3:
LCALLSTATE3;调用状态3
JNBTF0,WAIT3;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT3;判断1s到否?
未到继续状态3
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT3;状态3维持2s
MOVR2,#20;置50ms计数初值
MOVR3,#20;红灯闪20s
MOVSECOND1,#25;东西路口计时显示初值25s
MOVSECOND2,#25;南北路口计时显示初值25s
LCALLDISPLAY
WAIT4:
LCALLSTATE4;调用状态4
JNBTF0,WAIT4;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT4;判断1s到否?
未到继续状态4
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1S
LCALLDISPLAY
DJNZR3,WAIT4;状态4维持20s
MOVR2,#5;置50ms计数初值
MOVR4,#4;红灯闪20ms
MOVR3,#3;绿灯闪3s
MOVSECOND1,#5;东西路口计时显示初值5s
MOVSECOND2,#5;南北路口计时显示初值5s
LCALLDISPLAY
WAIT5:
LCALLSTATE5;调用状态5
JNBTF0,WAIT5;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR4,WAIT5;判断200ms到否?
未到继续状态5CPLLED_G2;南北绿灯闪
MOVR4,#4;闪烁200ms
DJNZR2,WAIT5;判断1s到否?
未到继续状态5
MOVR2,#5;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT5;状态5维持3s
MOVR2,#20;置50ms计数初值
MOVR3,#2;红灯闪2s
MOVSECOND1,#2;东西路口计时显示初值2s
MOVSECOND2,#2;南北路口计时显示初值2s
LCALLDISPLAY
WAIT6:
LCALLSTATE6;调用状态6
JNBTF0,WAIT6;查询100ms到否
CLRTF0
MOVTH0,#3CH;恢复T0定时初值100ms
MOVTL0,#0B0H
DJNZR2,WAIT6;判断1s到否?
未到继续状态6
MOVR2,#20;置100ms计数初值
DECSECOND1;东西路口显示时间减1s
DECSECOND2;南北路口显示时间减1s
LCALLDISPLAY
DJNZR3,WAIT6;状态6维持2s
LJMPLOOP;大循环
STATE1:
;状态1
SETBLED_G1;东西路口绿灯亮
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE2:
;状态2
CLRLED_Y1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
RET
STATE3:
;状态3
CLRLED_G1
CLRLED_R1
CLRLED_G2
CLRLED_Y2
SETBLED_R2;南北路口红灯亮
SETBLED_Y1;东西路口绿灯亮
RET
STATE4:
;状态4
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
SETBLED_G2;南北路口绿灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE5:
;状态5
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_Y2
CLRLED_R2
RET
STATE6:
;状态6
CLRLED_G1
CLRLED_Y1
SETBLED_R1;东西路口红灯亮
CLRLED_G2
CLRLED_R2
SETBLED_Y2;南北路口红灯亮
RET
DISPLAY:
;数码显示
MOVA,SECOND1;东西路口计时寄存器
MOVB,#10;16进制数拆成两个10进制
DIVAB
MOVDBUF,A
MOVDBUF+2,A
MOVA,SECOND2;南北路口计时寄存器
MOVB,#10;16进制数拆成两个10进制
DIVAB
MOVDBUF+1,A
MOVA,B
MOVDBUF,A
MOVR0,#DBUF
MOVR1,#TEMP
MOVR7,#4
DP10:
MOVDPTR,#LEDMAP
MOVA,@R0
MOVCA,@A+DPTR
MOV@R1,A
INCR0
INCR1
DJNZR7,DP10
MOVR0,#TEMP
MOVR1,#4
DP12:
MOVR7,#8
MOVA,@R0
MOVR7,#7
DJNZR6,#7
DP13:
RLCA
MOVP3.0,C
CLRP3.1
SETBP3.1
DJNZR7,DP13
INCR0
DJNZR1,DP12
RET
6设计总结
6.1设计体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近四星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在江世明老师的辛勤指导下,终于游逆而解。
同时,在江世明老师那里我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
6.2存在的问题及建议
本系统就是充分利用了各芯片的I/O引脚。
系统统采用MSC-51系列单片机Intel89C51,并行I/O接口芯片89C1为中心器件来设计交通灯控制器,实现了芯片的P1口、p3口设置红、绿灯燃亮时间的功能;红绿灯循环点亮,倒计时剩5秒时黄灯闪烁警示(交通灯信号通过PA口输出,显示时间直接通过芯片的PC口输出至双位数码管);系统不足之处不能控制车的左、右转、以及自动根据车流改变红绿灯时间等。
这是由于本身地理位子以及车流量情况所定,如果有需要可以设计扩充原系统来实现。
设计虽存在一定的不完美之处,但基本能实现车辆行驶的控制。
参考文献
【1】张俊谟.单片机中级教程—原理与用应,北京寒天出版社.2006.6
【2】余锡存曹国华.单片机原理及接口技术[M].陕西:
西安电子科技大学出版社,2000.7
【3】雷丽文等.微机原理与接口技术[M].北京:
电子工业出版社.1997.2
【4】张毅坤.单片微型计算机原理及应用,西安电子科技大学出版社.1998
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RAM 试验 交通灯 系统