十字路口交通灯实训报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机课程设计报告实训课题:十字路口交通灯控制系统设计
学院:
班级:
学号:
姓名:
指导老师:
成绩:
2011-7-2
摘要
本设计是关于单片机控制的交通灯模拟系统的设计。
主要内容有交通灯模拟系统设计方案,主要功能,各功能模块的介绍,电路设计,硬件部分设计,软件部分设计,硬件调试,设计方法以及课程设计的心得体会等等。
该设计中用光二极管来模拟信号灯,紧急车的优先通过请求信号由外部中断技术来模拟。
要求使AT89c51定时/计数器0作为定时器,要求对通行时间进行倒计时,从P0 口输出,在LED上显示并进行递减,以此来实现十字路口交通灯的指示功能。
根据交通灯系统所需要实现的功能要求,先画出实验程序框图和主程序流程图,然后根据流程图写出其子程序。
最后将程序烧至单片机实验箱的芯片中,通过程序控制交通灯的亮灭。
关键字:单片机交通灯系统
目录
1 引言 (3)
1.1设计目的 (3)
1.2设计意义 (3)
2 设计方案 (4)
2.1方案论证 (4)
2.2方案设计 (4)
3 硬件系统设计 (5)
3.1引脚说明 (5)
3.2复位部分电路设计 (6)
3.3时钟部分电路设计 (7)
3.4显示部分电路设计 (8)
4 软件系统设计 (8)
4.1应用系统设计要求 (8)
4.2主程序模块设计 (8)
5 实验结果与分析 (10)
5.1调试分析 (10)
5.1.1软件调试 (10)
5.1.2系统功能测试 (10)
6 心得体会 (11)
参考文献 (11)
附录1 系统原理图 (9)
附录2 程序清单 (11)
附录3 原件清单 (11)
一、引言
当今,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效的手段。
但这一技术在19世纪就已出现了。
1858年,在英国伦敦主要街头安装了以燃煤气为光源的红,蓝两色的机械扳手式信号灯,用以指挥马车通行。
这是世界上最早的交通信号灯。
1868年,英国机械工程师纳伊特在伦敦威斯敏斯特区的议会大厦前的广场上,安装了世界上最早的煤气红绿灯。
它由红绿两以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。
1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
电气启动的红绿灯出现在美国,这种红绿灯由红绿黄三色圆形的投光器组成,1914年始安装于纽约市5号大街的一座高塔上。
红灯亮表示“停止”,绿灯亮表示“通行”。
信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。
1968年,联合国《道路交通和道路标志信号协定》对各种信号灯的含义作了规定。
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行。
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
1.1设计目的
本设计是《单片机原理与应用》课程综合训练,可以通过理论学习,资料查阅,软,硬件设计,系统调试等环节,巩固和提高所学的知识和应用水平。
学会提出问题,观察和分析问题,得到最终的科学方法。
培养严谨的工作作风,务实的工作态度。
为今后的毕业设计,及从事单片机控制系统的设计与维护奠定坚实的基础。
1.2设计意义
本设计的意义在于通过具体的控制系统的设计,掌握单片机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。
使我们能在实践教学环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力。
二、设计方案
2.1方案论证
利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
用红、绿、黄发光二极管作信号灯。
如图上图所示。
(1)处于常允许通行的状态,支干道有车来时才允许通行。
南北亮绿灯时,东西亮红灯;东西亮绿灯时,南北亮红灯。
(2)干道均有车时,两者交替允许通行,主干道每次放行60秒,黄灯闪烁10秒,设立60秒、10秒计时、显示电路。
2.2方案设计
单片机可选用AT89C51,它与8051系列单片机全兼容,但其内部带有4KB 的FLASH ROM ,设计时无需外接程序存储器,为设计和调试带来极大的方便。
南北向和东西向各采用2个数码管计时,同时需要对该方向的指示灯的点亮时间进行倒计时。
南
东
实验程序框图
三、硬件系统设计
3.1 MCS-51的引脚说明
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
Pin9:RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET 引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
3.2复位部分电路设计
复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
复位电路通常采用上电自动复位和按钮复位两种方式。
该设计采用加电直接复位,复位电容采用22uF,电阻1000欧,为了节省元件,没有采用上电加按键模式。
加电瞬间,RES管脚为高电平。
通过电阻回路放电,使电压逐渐降为零,从而实现了复位功能。
3.3 时钟部分电路设计
时钟电路用于产生MCS-51单片机工作时所必须的时钟控制信号。
其内部电路在时钟信号控制下,严格地按时序执行指令进行工作。
在执行指令时,CPU 首先要到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定操作。
本设计采用12MHz 晶振和两个30Pf 瓷片电容,他们构成一个稳定的自激振荡器。
该电容的大小影响振荡器频率的高低、振荡器的稳定性和起振的快速性。
为单片机提供标准时钟。
其中两个瓷片电容起微调作用。
ATMEL 公司生产的AT89C51单片机它是硬件电路的核心部分,在由多片单片机组成的系统中,为了各单片机之间的时钟信号同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲,外部脉冲信号一般不低于33MHz 的方波。
3
C1
3
晶振电路
3.4 显示部分电路设计
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
四、软件系统设计
4.1 应用系统软件设计要求
在进行应用系统的总体设计时,软件设计与硬件设计应统一考虑,相结合进行。
当系统的电路设计定型以后,软件的任务也就明确了。
一般来说,软件的功能可分为两大类。
一类是执行软件,它能完成各种实质性的功能,如测量计算、显示、打印、输出控制等;另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织协调角色。
我们设计时,应从以下几个方面考虑:
1)根据软件功能的要求,将系统软件分为若干个相对独立的部分。
设计出合理的软件总体结构,使其清晰、简捷、流程合理。
2)各功能程序实行模块化、子程序化。
3)在编写应用软件之前,应绘制出程序流程图。
4)要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。
本设计采用了模块化设计,主要由主程序模块、功能实现模块两大部分模块组成。
4.2 主程序模块设计
主程序流程图如下图所示:
交通灯控制系统设计思路
P1口:P1. 5—P1.0 红黄绿红黄绿对应口低电平灯亮
控制灯程序流程图如下:
程序见附录二:程序清单
五、实验结果与分析
1.调试分析
1.1软件调试
本程序有一个交通灯运行主程序,显示器动态扫描子程序,码表刷新子程序,紧急外中断,交通灯定时中断服务子程序,四个子程序融合调试而成。
1.2 系统单元测试
接硬件图接线,为了确保东西南北红黄绿灯能够对应显示,实验时,对P1
口的接线做了调整。
即,P1.0接L3,P1.1接L2,P1.2接L1,P1.3接L6,P1.4接L5,P1.5接L4。
本系统由单片机系统、LED 显示、交通灯演示系统组成。
最后,系统要求实现如下的交通灯的功能:
1)接通电源后,将显示模块的程序编译后烧进单片机电路板里,如若看到红灯全亮两秒后,跳转为一红一绿,码表计时60秒;
2)在绿灯转为红灯时,要求黄灯先亮,才能变换运行车道;
3)黄灯亮时,要求每秒闪亮一次,闪烁5次,计时10秒;
4)黄灯闪烁后跳转为红灯,另一方向红灯则跳为绿灯;
5)计时60秒,绿灯再次跳转为黄灯,闪烁,红灯跳转为红灯,车辆放行;
6)在交通灯运行正常的情况下,将P3.2口所接的控制开关,拨为低电平,交通灯全部跳转为红灯亮,可供紧急车辆通行;
7)照此循环下去没有问题就证明该显示模块的测试成功。
六、心得体会
为期两周的单片机十字路口交通灯系统课程设计已经接近尾声,在这两周中我的体会颇多。
最开始的工作是设计电路图,电路图大多来自网上还有各种资料书,但是在这个过程中,我们掌握了交通灯的电路图的设计理念以及方法,单片机芯片80C51各个管脚的作用,以及上电复位电路,时钟控制电路的作用及绘制方法,总体来说收获是非常的大的。
第二步则是要根据流程图将主程序编写出来,通过我们一组成员的配合,我们在第二天时写出了程序,但是在调试的过程中出现了很多意想不到的问题,将程序放到keil中编译,出现了50多处错误,但是我们都通过查阅书籍,相互之间讨论等方法对程序进行了更正。
在这个更正错误,调试程序的过程,可以说我们的收获是巨大的,我们了解到了更多汇编程序语句的用法,通过反复的阅读检查程序,也对程序的意义有了更多的体会和更熟练地理解。
主程序调试通过后,第二步就是加入个种子程序,其中包括:显示器动态扫描子程序,码表刷新子程序,紧急外中断,交通灯定时中断服务子程序,这是一
个十分困难的过程,要将各个程序相互融合在一起,并且使其正常运行,要花大量时间调试,更改程序。
此过程中典型的一次错误是:在东西红灯亮,南北绿灯亮时,二极管和码表都可显示运行的时候,当程序跳转到黄灯闪烁时,码表并未计时,检查程序,发现并未逻辑或编写错误,最后经调试,发现时二极管的扫描时间和码表的扫描时间不一致,最后将黄灯改为一秒钟亮,一秒钟灭后,码表显示正常。
通过这个调试过程,我认识到只要细心地去读程序,认真的去理解,真正将程序领悟透彻后,很多问题都可以迎刃而解,当然在这个过程中我们也应当发挥团队合作的精神,在相互讨论中共同学习。
在本次实训过程中,比较遗憾的一点就是由于实验室芯片不齐全没有能将本组的实训内容做成实验成品,但是也因为如此我们才有更多时间去理解程序内容,用心的专研其中的奥妙,也可以说是有失必有得吧。
通过这次课设,对学过的知识进行了巩固,加深了理解,提高了应用的能力,而且提高了我们的发现、分析、解决问题的能力。
经历了从最初的设计到最后在试验箱上实现,提高了我们对专业的认识及兴趣,对于我们工科来说,对以后就业有及其重大的影响。
最后,在此感谢谢辉老师在这学期对我们的帮助和关心,使我们在课程设计的过程中不只是学习到了知识,更有认真做事的态度和踏实做人品质。
参考文献:
1、杨居义《单片机课程设计实例教程》清华大学出版社
2、王义军《单片机原理及应用习题与实验指导书》中国电力出版社
3、谢辉《单片机原理及应用》化学工业出版社
附录二:程序清单
;带外中断(即紧急车辆通行)和显示的交通灯控制系统,20110628调试通过
;设计思想:系统初始化,主程序循环调用拆字子程序和显示器扫描子程序。
定时器定时50ms,定时中断服务子程序中调用显示缓冲区刷新和交通灯状态变换子程序。
;当有紧急车辆(用外中断模拟)通行时,四个路口全部红灯,定时器停止,当外中断撤销后,四个路口恢复正常状态。
;入口:(zt)=状态值
;出口:(P1)=交通灯状态值刷新
;使用资源:R6,A ,PSW ,R5,P1
ZT EQU 42H
BZ BIT 00H
TIME1 EQU 40H
TIME2 EQU 41H
ORG 0
LJMP MAIN
ORG 0003H ;外中断0(紧急车辆)处理子程序入口
LJMP JJCL
ORG 000BH
LJMP CLOCK
ORG 0030H
MAIN: MOV SP,#60H
MOV PSW , #00H
MOV P2,#0FFH
LCALL CSH
LOOP: LCALL SSEE ;调动态扫描子程序
LCALL PTDS0
SJMP LOOP
;---------系统初始化子程序
;做堆栈调整、8255初始化、定时器、中断初始化,显示缓冲区初始化、进入状态0,启动定时器
CSH: MOV 7EH,#10H
MOV 7DH,#10H
MOV 7CH,#10H
MOV 7BH,#10H
MOV 7AH,#00H
MOV 79H,#00H
MOV TIME1 , #02H ;状态0持续为2s
MOV TIME2 , #02H
MOV A,#81H ;8255初始化
MOV DPTR,#0FF23H
MOVX @DPTR,A
MOV TMOD,#01H ;定时器T0定时50ms
MOV TL0,#0B0H
MOV TH0,#3CH
CLR IT0 ;设置外中断0为电平方式工作
SETB PX0 ;设置外中断0为高级中断
ORL IE,#83H ;开放T0中断
MOV ZT, #00H ;进入状态0
MOV P1, #0F6H
MOV R6 , #00H
MOV R5, #00H ; 软件计数器初始化
SETB TR0 ;启动T0
RET
;--------------------------------
;交通灯定时中断服务子程序
ORG 0100H
CLOCK: PUSH PSW
PUSH ACC
SETB RS0
MOV TH0,#03CH
MOV TL0,#0B0H
INC R6 ;定时器计数单元加1
LCALL MBXS ; 调码表刷新判断子程序
LCALL JTDPD ;调交通灯状态判断子程序
CLR RS0
POP ACC
POP PSW
CRETUN: RETI
;----------------------------
;码表刷新子程序
;设计思想:R6为软件计数器,1s=20*50ms,判断R6单元的值能够被20整除,即为整秒到,显示器应该减1
MBXS: PUSH PSW
PUSH ACC
MOV A,R6
LCALL ZMPD ; 调整秒判断子程序
MOV A , TIME1
LCALL HBCD
MOV TIME2 , A
DONE: POP ACC
POP PSW
RET
JTDPD: MOV A,ZT
CJNE A,#00H,ZT1
CJNE R6,#40,ZT0
MOV ZT,#01H
MOV TIME1, #59
MOV P1,#0EEH ; 切换到状态1 MOV R6,#0
LJMP RTN
ZT1: MOV A,ZT
CJNE A,#01H,ZT2_1 ;东西红,南北绿 CJNE R6,#100,ZT0
MOV R6,#00
INC R5
CJNE R5,#12,ZT0
MOV TIME1, #10
MOV R5,#00H
MOV ZT,#02H
MOV P1,#0DEH ;切换到状态2_0
MOV R7,#5
CLR BZ
ZT0: SJMP RTN
ZT2_1: MOV A,ZT
CJNE A,#02H,ZT3
JB BZ,ZT2_2
CJNE R6,#20,RTN
SETB BZ
MOV R6,#00H
SJMP RTN
ZT2_2: MOV P1,#0FEH ; 切换到状态2_0 CJNE R6,#20,RTN
CLR BZ
MOV R6,#00H
MOV P1,#0DEH ; 切换到状态2-1
DJNZ R7,ZT2_1
MOV TIME1, #59
MOV R6,#00H
MOV ZT,#03H
MOV P1,#0F5H
SJMP RTN
ZT3: MOV A,ZT
CJNE A,#03H,ZT4_1
CJNE R6,#100,RTN
MOV R6,#00
INC R5
CJNE R5,#12,RTN
MOV TIME1, #5
MOV R5,#00H
MOV ZT,#04H
MOV P1,#0F3H ;切换到状态4_1
MOV R7,#5
CLR BZ
SJMP ZT0
ZT4_1: MOV A,ZT
CJNE A,#04H,ZT1
JB BZ,ZT4_2
CJNE R6,#10,ZT0
SETB BZ
MOV R6,#00H
SJMP ZT0
ZT4_2: MOV P1,#0F7H ; 切换到状态4_2 CJNE R6,#10,ZT0
CLR BZ
MOV R6,#00H
MOV P1,#0F3H ; 切换到状态4-1 DJNZ R7,ZT4_1
MOV TIME1, #59
MOV R6,#00H
MOV ZT,#01H
MOV P1,#0EEH
SJMP ZT0
RTN: RETI
;------------------------------------- ;整秒判断子程序。
;
;入口:(A)=软件计数器值
;出口:整秒到,TIME1计数单元减1
ZMPD: MOV B , #20
DIV AB ;判断整秒到否?
MOV A , B
JNZ RETN ;整秒未到,返回
DEC TIME1 ;整秒到,TIME1单元减1
RETN: RET
HBCD: MOV B , #100
DIV AB
MOV A , B
MOV B , #10
DIV AB
SWAP A
ORL A,B
RET
;---------------------------
;拆字子程序,将TIME2十进制计数单元的值拆分为高四位和低四位,分送7AH 和79H单元
PTDS0: MOV R0,#79H
MOV A,TIME2
ACALL PTDS
RET
PTDS: MOV R1,A
ACALL PTDS1
MOV A,R1
SWAP A
PTDS1: ANL A,#0FH
MOV @R0,A
INC R0
RET
;----------------------------
;显示器动态扫描子程序
ORG 0D50H
SSEE: MOV R5,#05H
SSE2: MOV 30H,#20H
MOV 31H,#7EH
MOV R7,#06H
SSE1: MOV R1,#20H
MOV A,30H
CPL A
MOVX @R1,A
MOV R0,31H
MOV A,@R0
MOV DPTR,#DDFF
MOVC A,@A+DPTR
MOV R1,#21H
MOVX @R1,A
MOV A,30H
RR A
MOV 30H,A
DEC 31H
MOV A,#0FFH
MOVX @R1,A
DJNZ R7,SSE1
DJNZ R5,SSE2
RET
DDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
;---------------------------------------
;外中断模拟紧急车辆通行,四个路口全部红灯
JJCL: PUSH ACC
PUSH PSW
PUSH P1
CLR TR0 ; 停止T0计数器
JJLOOP:MOV P1 , #0F6H
JNB p3.2 , JJLOOP ;外中断撤除否?
POP P1
POP PSW
POP ACC
SETB TR0
RETI
END。