模拟交通指示灯的控制研究报告书.docx
《模拟交通指示灯的控制研究报告书.docx》由会员分享,可在线阅读,更多相关《模拟交通指示灯的控制研究报告书.docx(16页珍藏版)》请在冰豆网上搜索。
模拟交通指示灯的控制研究报告书
目录
1.技术要求1
2.设计方案1
3.设计总体框图2
4.设计单元电路2
4.1交通指示灯电路2
4.2紧急通车及复位电路...4
4.3倒计时数显电路5
5.电路原理说明6
6.调试报告8
7.心得体会9
8.参考文献10
附录:
11
附录1:
源程序代码11
附录2:
系统整体实现电路图14
附录3:
元器件清单15
模拟交通指示灯的控制
1.技术要求
假设十字路口有东南两个方向的交通信号指示灯,每个方向各有3个指示灯(用发光二极管模拟),这三个指示灯分别用来标识前行、暂停、左拐,要求如下:
A、每个方向的指示灯按照要求点亮不同的时间,前行指示灯点亮10秒熄灭,接着暂停指示灯点亮2秒熄灭,然后左拐指示灯点亮8秒熄灭,按照这种方式进行循环;
B、当向东方向的前行指示灯点亮的时候,向南方向的前行指示灯熄灭,暂停指示灯和左拐指示灯分别点亮;
C、当向南方向的前行指示灯点亮的时候,向东方向的前行指示灯熄灭,暂停指示灯和左拐指示灯点亮。
2.设计方案
十字路口有东西南北四个方向的交通信号指示灯,每个方向各有3个指示灯,分别用绿色、红色、黄色的发光二极管来模拟,其中绿色指示灯用来标识前行,红色指示灯用来标识暂停,黄色指示灯用来标识左拐。
指示灯的亮灭规律如下:
当东西方向的绿色指示灯点亮10秒时,东西方向的红色指示灯和黄色指示灯以及南北方向的绿色指示灯熄灭,与此同时,在南北方向上,红色指示灯先点亮2秒后熄灭,接着黄色指示灯点亮8秒,10秒结束后,东西方向的绿色指示灯、南北方向的红色指示灯和黄色指示灯熄灭,南北方向的绿色指示灯点亮10秒,与此同时,在东西方向上,红色指示灯先点亮2秒后接着黄色指示灯点亮8秒。
东西和南北方向的指示灯就这样循环交替进行点亮和熄灭。
为了更贴近生活,我还考虑了紧急通车情况,通过外部中断请求信号来响应,当紧急通车结束后或者指示灯的规律出现错误后,需要复位来重新回到正常状态。
为了看到指示灯清晰地变化情况,我还添加了倒计时数显部分,让数码管的数字显示和指示灯的点亮情况同步。
整个过程通过AT89c51芯片来控制,利用proteus来仿真模拟。
3.设计总体框图
设计的总体框图如图1所示,由AT89c51芯片来控制指示灯的循环点亮和倒计时电路,并且响应外部中断信号进行处理。
倒计时显示
指示灯循环
芯片控制
紧急通车以及复位操作
图1设计总体框图
4.设计单元电路
4.1交通指示灯电路
东西、南北两干道交于一个十字路口,各干道有一组红、绿、黄三色的指示灯,指挥车辆和行人的安全通行。
绿色指示灯点亮表示前行,红色指示灯点亮表示暂停,黄色指示灯点亮表示左拐。
下图2即为十字路口的交通指示灯的分布示意图。
北
西东
南
图2十字路口的交通指示灯的分布示意图。
表1交通指示灯点亮规律表
2s
8s
2s
8s
东西方向
绿色灯点亮
绿色灯点亮
红色灯点亮
黄色灯点亮
南北方向
红色灯点亮
黄色灯点亮
绿色灯点亮
绿色灯点亮
表1说明东西方向绿色指示灯点亮时,开始进行10s倒计时,同时南北方向的红色指示灯亮2s后接着黄色指示灯点亮8s。
完成一次这样的循环要10s,10s结束后,东西方向红色指示灯点亮2s,接着黄色指示灯点亮8s,同时南北方向的绿色指示灯点亮10s,并重新10s倒计时,东西和南北就这样交替,依次循环。
由于东西方向一致,南北方向一致,因此在电路图中只画了东南方向的交通指示灯,电路图如图3所示。
图3交通指示灯电路图
4.2紧急通车及复位电路
利用AT89c51芯片中断以及硬件复位达到目的。
AT89c51芯片中断源有三类,即:
外部中断、定时中断、串行中断。
在此我采用的是外部中断,通过一个手动按钮开关接至AT89c51芯片的引脚
同时在软件设计时将其设置为最高优先级。
当有紧急按键按下时,东南方向均亮红色指示灯,此时,所有普通车辆都被禁止通行,只有特殊车辆可以通行。
单片机响应中断后,转向中断服务程序执行,中断服务程序执行完后,即紧急通车结束后,需要解除紧急通车情况,让指示灯恢复正常工作状态。
此时需要对电路进行复位,AT89c51芯片的RST引脚是复位信号的输入端。
复位方式有三种,即:
上电自动复位、按键电平复位和外部脉冲复位。
在此我采用的是上电自动复位。
上电自动复位是通过外部复位电路的电容充电来实现的,如图3所示,先将单刀双掷开关拨向电源端,紧接着再拨向接地端,在电源接通后就完成了系统的复位初始化。
当交通指示灯的显示情况出现紊乱的情况时,也可以通过此方式对系统进行复位初始化,让系统再次回归到正常工作状态。
紧急通车及复位电路图如图4所示。
图4紧急通车及复位电路图
4.3倒计时数显电路
倒计时数显电路图如图5所示,P0端口的低四位接了一个七段数码管,用一个排阻作为上拉电阻保证P0口的正确输出状态,P0端口对应的是东方向的倒计时数码管显示,P1端口的低四位接的数码管用来显示南方向的倒计时。
倒计时的功能是利用延时程序来完成的,通过延时程序将数码管的显示和交通指示灯的点亮同步,具体的程序代码见附录1。
图5倒计时数显电路图
5.电路原理说明
图6为AT89c51芯片功能结构图,它内部集成了中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和并行I/O口P0~P3、串行口、中断系统以及定时控制逻辑电路等,这些部件通过内部总线连接在一起。
中央处理器CPU是单片微机的核心,它包括算术逻辑单元ALU和控制器等,主要完成运算和控制功能;数据存储器RAM集成在单片微机内,以提高单片机的运行速度;程序存储器ROM用来存储单片微机的应用程序;定时器/计数器用来精确的定时或者对外部事件进行计数;并行I/O口P0~P3用于监测和控制,还可用作数据总线的数据线、地址总线的地址线、控制总线的控制线灯;串行口用以实现与某些终端设备进行串行通信或者和一些特殊功能的器件相连的能力,甚至用多个单片微机相连构成多机系统;中断系统的功能较强,具有内、外共五个中断源,两个中断优先级;定时控制逻辑电路外接振荡元件即可工作,使计算机按照严格的时序有规律的执行各种操作。
图6AT89c51芯片功能结构图
图7是AT89c51芯片的引脚图,它有40个引脚,各个引脚的功能将如下所述。
●VCC——运行和程序校验时接电源正端。
●GND——接地。
●XTAL1——输入到单片微机内部振荡器的反相放大器。
当采用外部振荡器时,对HMOS单片微机,此引脚应接地;对CHMOS单片微机,此引脚作驱动端。
●XTAL2——反相放大器的输出,输入到内部时钟发生器。
当采用外部振荡器时,XTAL2接收振荡器信号,对CHMOS单片微机,此引脚应悬浮。
●P0——8位、漏极开路的双向I/O口。
能驱动8个LSTTL负载。
●P1——8位、准双向I/O口。
在编程/校验期间,用作输入低位字节地址。
P1口可以驱动4个LSTTL负载。
●P2——8位、准双向I/O口。
在编程/校验期间,接收高位字节地址。
P2口可以驱动4个LSTTL负载。
●P3——8位、准双向I/O口,具有内部上拉电阻。
P3.0——RXD串行输入口;P3.1——TXD串行输出口;P3.2——
外部中断0输入;P3.3——
外部中断1输入;P3.4——T0定时器/计数器0的外部输入;P3.5——T1定时器/计数器1的外部输入;P3.6——
低电平有效,输出,片外数据存储器或I/O端口写选通;P3.7——
低电平有效,输出,片外数据存储器或I/O端口读选通。
●RST——复位输入信号,高电平有效。
●
——片外程序存储器访问允许信号,低电平有效。
●ALE/PROG——地址锁存允许信号,输出。
●
——片外程序存储器读选通信号,低电平有效。
图7AT89c51芯片的引脚图
完整的电路图见附录2所示,交通指示灯接芯片的P2端口进行输出显示,东南方向的数码管显示分别接在芯片的P0和P1端口进行输出显示,紧急按钮接在芯片的P3.2端口进行外部中断控制,复位电路接在芯片的RST端口通过上电复位进行复位。
6.调试报告
利用proteus软件进行仿真模拟。
点击51芯片添加hex文件后,点击运行按钮,在电路模块上会看到东方向的绿色指示灯点亮,同时数码管从9~0秒进行倒计时显示,而在南方向,红色指示灯先点亮2秒并相应的数码管进行1~0秒倒计时,接着黄色指示灯点亮8秒并且数码管进行7~0秒倒计时显示,10秒结束之后东南方向的状态交换,点亮及显示规律不变。
当点击紧急按键按钮时,两个方向只有红色指示灯点亮,表示禁止一切普通车辆通过,并且两个方向的数码管都停止倒计时工作。
紧急通车结束后,对电路进行复位操作,先将单刀双掷开关接电源然后接地,整个系统又恢复到开始的状态进行正常工作。
调试结果正确,达到了预期的效果和目的。
7.心得体会
在这次课程设计中,我又学习了一次单片机,虽然觉得单片机很头疼,要记的东西很多,但是有时又觉得很有趣,尤其是在能够做一些简单设计程序看到成果之后。
由于之前做了一些与AT89c51芯片有关的实验,所以对这个课程设计也不是很陌生。
利用proteus软件搭建硬件电路很顺利,但是在写程序方面的困难还是挺大的。
这一次没有在网上查很多关于模拟交通指示灯的控制的直接报告,而是先从课本入手,在课本上看到一个相关的应用AT89c2051的交通灯智能管理系统,然后想到以前实验做的一些关于循环彩灯显示的实验以及数码管显示的实验,于是慢慢模仿研究,虽然很多地方还是不是很清楚,但是通过和周围的同学交流沟通,软件部分的代码慢慢的也有了进展。
但是在复位模块上仍然不知道怎么写,因为从以前的单片机上级的实验中所了解的复位程序在这里总是出问题,但是由于时间紧迫,没有办法再从软件方面解决,而是采用了硬件复位的方式。
按照一些熟悉的电路图在AT89c51的RST引脚接入了由一个电阻和一个电容以及电源和接地端组合而成的复位电路,但是这样连接之后依然没有办法完成复位操作。
有一天早晨在去自习室的路上,我突然间想到了大三上学期做的一次光电实验,也是利用AT89c51芯片来完成LED显示频的显示,当时是手动来复位的,先将并联电阻和电容的一端(另一端接在AT89c51芯片的RST引脚)接上电源然后再接地,于是我想到了利用一个单刀双掷开关来完成此任务,按照电路图4连接所示,先将开关接通电源,接着接地,就完成了复位。
这个问题解决了,又想给电路加上数码管显示,这样可以更清晰地看到变化,但是在程序调试的当天,没有将数码管的显示同步,虽然可以进行倒计时显示,但是显示得有点奇怪,一边是9~0倒计时10s,一边又是8~1倒计时8s。
虽然调试结束了,但依然想将程序完善一下,后来想到DEC指令和DJNZ指令的区别,于是想到了把DJNZ指令改成DEC指令,对实现同步显示的帮助更大,于是通过调整,后来又完成了同步显示的功能。
虽然和其他同学做的比较,我的方案很简单,没有什么出色的地方,但是通过这次课程设计还是学会了很多东西,原来以前的上机实验以及一些课程实验在关键时刻还是挺有作用的。
虽然调试的时候答辩不是很理想,但是我努力做了,也重新收获了很多知识和经验。
8.参考文献
[1]高锋.单片微型计算机原理与接口技术(第二版).北京:
科学出版社,2007
[2]《微处理器与微控制器应用》实验指导书.武汉理工大学理学院物理科学与技术系,2011.01
附录:
附录1:
源程序代码
ORG0000H
LJMPSTART
ORG0003H
LJMPTT0
ORG0030H
START:
MOVP2,#00010001B
MOVR4,#00H
MOVIE,#85H
MOVTCON,#00H
LJMPS1
TT0:
MOVP2,#00010010B
MOVP0,#00H
MOVP1,#00H
HERE:
JMPHERE
RETI
S1:
MOVR7,#2
MOVR4,#9
LP1:
MOVP0,R4
DECR4
DECR7
MOVP1,R7
LCALLDELAY
MOVA,R7
JNZLP1
CPLP2.4
CPLP2.5
MOVR7,#8
MOVR4,#7
LP2:
MOVP0,R4
DECR4
DECR7
MOVP1,R7
LCALLDELAY
MOVA,R7
JNZLP2
CPLP2.0
CPLP2.1
CPLP2.3
CPLP2.5
MOVR7,#2
MOVR4,#9
LP3:
MOVP1,R4
DECR4
DECR7
MOVP0,R7
LCALLDELAY
MOVA,R7
JNZLP3
CPLP2.1
CPLP2.2
MOVR7,#8
MOVR4,#7
LP4:
MOVP1,R4
DECR4
DECR7
MOVP0,R7
LCALLDELAY
MOVA,R7
JNZLP4
CPLP2.0
CPLP2.2
CPLP2.3
CPLP2.4
LJMPSTART
RET
DELAY:
MOVR1,#100
LOOP3:
MOVR2,#100
LOOP1:
MOVR3,#47
LOOP0:
DJNZR3,LOOP0
NOP
DJNZR2,LOOP1
MOVR3,#46
LOOP2:
DJNZR3,LOOP2
NOP
DJNZR1,LOOP3
MOVR3,#48
LOOP4:
DJNZR3,LOOP4
RET
END
附录2:
系统整体实现电路图
附录3:
元器件清单
AT89c51芯片1个
LED-GREEN2个
LED-RED2个
LED-YELLOW2个
SW-SPDT单刀双掷开关1个
10K电阻1个
10uF电容1个
RESPACK-8排阻1个
7SEG-BCD数码管2个
BUTTON开关1个