单片机课程设计交通灯模拟控制系统.docx
《单片机课程设计交通灯模拟控制系统.docx》由会员分享,可在线阅读,更多相关《单片机课程设计交通灯模拟控制系统.docx(24页珍藏版)》请在冰豆网上搜索。
单片机课程设计交通灯模拟控制系统
摘要
在现代城市中,红绿交通灯成为交管部门管理交通的重要手段。
为了确保十字路口行人跟车辆顺利、畅通的通过,往往采用电子控制的交通信号来进行指挥。
本课程设计用8051单片机扩展一片8255,用12个发光二极管模拟一个十字交叉路口的红、绿、黄灯,并设置二个紧急放行按键。
绿灯是通行信号,红灯是禁行信号,黄灯是警告信号,而当紧急信号灯被按下时,将改变通行的方向跟时间。
关键词:
8051单片机交通信号紧急放行键
目录
第一章设计要求……………………………………………………………………1
第二章芯片简介
2.1MSC-51芯片简介……………………………………………………………2
2.28255芯片简介………………………………………………………………4
2.374LS373简介………………………………………………………………5
第三章交通控制灯的设计方案……………………………………………………6
第四章程序设计流图………………………………………………………………7
第五章系统硬件设计
5.1硬件元器件………………………………………………………………………8
5.2系统总框图………………………………………………………………………8
5.3交通灯硬件线路图………………………………………………………………8
第六章控制器的软件设计
6.1每秒钟的设定………………………………………………………………9
6.2计数器硬件延时
6.2.1计数器初值计算………………………………………………………9
6.2.21秒的方法……………………………………………………………10
6.2.3相应程序代码…………………………………………………………10
6.3软件延时……………………………………………………………………10
6.4时间及信号灯的显示
6.4.18051并行口的扩展…………………………………………………11
6.4.2显示原理………………………………………………………………11
6.4.38255PA口输出信号接信号灯………………………………………11
6.4.48255输出信号与数码管的连接……………………………………11
6.4.58255与8051的连接…………………………………………………12
第七章系统工作原理………………………………………………………………13
第八章程序源代码…………………………………………………………………14
第九章调试与检测
7.1硬件检测……………………………………………………………………21
7.2软件调试……………………………………………………………………21
第十章结论…………………………………………………………………………22
参考文献……………………………………………………………………………23
附录A………………………………………………………………………………24
第一章设计要求
本课程设计用8051单片机扩展一片8255,用12个发光二极管模拟一个十字交叉路口的红、绿、黄灯,并设置二个紧急放行按键;正常行驶时,东西或南北方向的灯按绿灯亮10秒,黄灯闪烁3秒,红灯亮12秒控制;当东西或南北方向的紧急放行按键按下时,如果禁行方向为红灯,则红灯继续维持12秒;如果禁行方向为绿灯,则立即变为黄灯闪烁3秒;如果禁行方向为黄灯,则黄灯继续维持。
第二章芯片简介
2.1MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
下图是MCS-51系列单片机的内部结构示意图如图2-2所示。
图2-1MCS-51结构框图
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
图如下
图2-2MCS-51引脚图
Pin9:
RESET/Vpd复位信号的输入端,高电平有效。
此引脚保持两个机器周期(24个时钟周期)以上的高电平时,就可以完成复位操作。
图2-3时钟方式
·Pin30:
ALE/地址锁存允许信号端。
在访问外部存储器时,ALE用来锁存P0口扩展地址低8位的地址信号;在不访问外部存储器时,ALE以时钟振荡频率的1/6的固定速度输出,因此可通过查看ALE端是否有脉冲信号输出来判断单片机是否工作。
·Pin29:
片外程序存储器读选通信号输出端。
当访问片外程序存储器时,此脚输出负脉冲作为读选通信号。
·Pin31:
EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
在编程时,EA/Vpp脚还需加上21V的编程电压。
2.28255芯片简介
8255可编程并行接口芯片简介:
8255可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7~PA0、PB7~PB0和PC7~PC0。
其内部还有一个控制寄存器,即控制口。
通常A口、B口作为输入输出的数据端口。
C口作为控制或状态信息的端口,它在方式字的控制下,可以分成4位的端口,每个端口包含一个4位锁存器。
它们分别与端口A/B配合使用,可以用作控制信号输出或作为状态信号输入。
8255可编程并行接口芯片方式控制字格式说明:
8255有两种控制命令字;一个是方式选择控制字;另一个是C口按位置位/复位控制字。
其中C口按位置位/复位控制字方式使用较为繁难,说明也较冗长,故在此不作叙述,需要时用户可自行查找有关资料。
方式控制字格式说明如表1:
表2.1方式控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
D7:
设定工作方式标志,1有效。
D6、D5:
A口方式选择
00—方式0
01—方式1
1×—方式2
D4:
A口功能(1=输入,0=输出)
D3:
C口高4位功能(1=输入,0=输出)
D2:
B口方式选择(0=方式0,1=方式1)
D1:
B口功能(1=输入,0=输出)
D0:
C口低4位功能(1=输入,0=输出)
8255可编程并行接口芯片工作方式说明:
方式0:
基本输入/输出方式。
适用于三个端口中的任何一个。
每一个端口都可以用作输入或输出。
输出可被锁存,输入不能锁存。
方式1:
选通输入/输出方式。
这时A口或B口的8位外设线用作输入或输出,C口的4条线中三条用作数据传输的联络信号和中断请求信号。
方式2:
双向总线方式。
只有A口具备双向总线方式,8位外设线用作输入或输出,此时C口的5条线用作通讯联络信号和中断请求信号。
2.374LS373简介
74LS373是一种带三态门的8D锁存器,其管脚示意图如下示:
图2-574LS373
1D~8D为8个输入端。
1Q~8Q为8个输出端。
G是数据锁存控制端;当G=1时,锁存器输出端同输入端;当G由“1”变为“0”时,数据输入锁存器中。
OE为输出允许端;当OE=“0”时,三态门打开;当OE=“1”时,三态门关闭,输出呈高阻状态。
(1).1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态);
(2).当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态.
锁存端LE由高变低时,输出端8位信息被锁存,直到LE端再次有效。
当三态门使能信号OE为低电平时,三态门导通,允许Q0~Q7输出,OE为高电平时,输出悬空。
第三章交通控制灯的设计方案
东西、南北两干道交于一个十字路口,各干道有一组红、黄、绿三色的指示灯,指挥车辆和行人安全通行。
红灯亮禁止通行,绿灯亮允许通行。
黄灯亮提示人们注意红、绿灯的状态即将切换,且黄灯燃亮时间为东西、南北两干道的公共停车时间。
设东西道比南北道的车流量大,指示灯燃亮的方案如表2.1。
表3.1指示灯燃亮的方案表
方向
10S
3S
13S
南北道
绿灯亮
黄灯亮
红灯亮
东西道
红灯亮
黄灯亮
绿灯亮
表3.1说明:
1.用单片机及12个发光二极管模拟一个十字交叉路口的红、绿、黄灯,并设置二个紧急放行按键;
2.正常行驶时,东西或南北方向的灯按绿灯亮10秒,黄灯闪烁3秒,红灯亮13秒控制;
3.当东西或南北方向的紧急放行按键按下时:
(1)对于放行方向若为红灯,则红灯维持3秒后变绿灯;若为绿灯,则继续维持10秒;若为黄灯,则立即变绿灯;
(2)对于禁行方向若为红灯,则红灯继续维持13秒;若为绿灯,则立即变为黄灯闪烁3秒;若为黄灯,则黄灯继续维持;
第四章程序设计流图
程序流程图
第五章系统硬件设计
5.1硬件元器件
选用设备8051单片机一片选用设备:
8051单片机一片,8255并行通用接口芯片一片,74LS372两片,共阴极的七段数码管两个双向晶闸管若干,7805三端稳压电源一个,红、黄、绿交通灯各两个,开关键盘、连线若干。
5.2系统总框图如下:
图3-2-1系统总框图
5.3交通灯硬件线路图(见附图1)
第六章控制器的软件设计
6.1每秒钟的设定
延时方法可以有两种一中是利用MCS-51内部定时器才生溢出中断来确定1秒的时间,另一种是采用软延时的方法。
6.2计数器硬件延时
6.2.1计数器初值计算
1)定时器原理
定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。
它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。
因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC可得到如下计算通式:
TC=M-C
式中,M为计数器模值。
计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。
计算通式变为:
T=(M-TC)T0
模值和计数器工作方式有关。
在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。
就此可以算出各种方式的最大延时。
如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。
若使用软件则会耽搁程序流程,显然不可行。
相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。
(2)软件延时原理
MCS-51的工作频率为12MHZ,机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12MHZ)=1us。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间,但同时由于单片机的运行速度很快其他的指令执行时间可以忽略不计。
T计数是单片机时钟周期TCLK的12倍;TC为定时初值
如单片机的主脉冲频率为TCLK12MHZ ,经过12分频
方式0 TMAX=213 *1微秒=8.192毫秒
方式1 TMAX=216 *1微秒=65.536毫秒
显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.
6.2.21秒的方法
我们采用在主程序中设定一个初值TH0=#0FCH;TL0=#18H,T0定时1毫秒.这样每当T0到1毫秒时CPU就响应它的溢出中断请求,进入他的中断服务子程序。
在中断服务子程序中,利用软件延时则可产生1秒,1秒到可以返回到输出时间显示程序。
6.2.3相应程序代码
(1)主程序
定时器需定时1秒,故T0工作于方式1。
初值:
TC=65536-1000=64536
ORG1000H
SMOVTMOD,#01H;对方式寄存器TMOD赋初值,T0为16位的定时器
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOVIE,#82H;中断初始化
6.3软件延时
MCS-51的工作频率为2-12MHZ,我们选用的8051单片机的工作频率为12MZ。
机器周期与主频有关,机器周期是主频的12倍,所以一个机器周期的时间为12*(1/12)=1s。
我们可以知道具体每条指令的周期数,这样我们就可以通过指令的执行条数来确定1秒的时间。
具体的延时程序分析:
DELAY:
MOVR5,#46;0.5s延时子程序
DEL1:
MOVR6,#155
DEL2:
MOVR7,#50
DJNZR7,$
DJNZR6,DEL2
DJNZR5,DEL1
RET
MOVTH0,#0FCH;归还定时器延时常数
MOVTL0,#18H;归还定时器延时常数
DJNZ34H,DELAY;如果34H单元-1的值不为0,就跳转到显示子程序
MOV34H,#250;归还34H单元内容,做为延时常数
DJNZ35H,DELAY;如果35H单元内容-1不为0,就跳转到显示子程序
MOV35H,#6;归还35H单元内容,作为延时常数
;//34H,35H的存在是为了是本来1MS的中断延时延长为1S,
6.4时间及信号灯的显示
6.4.18051并行口的扩展
8051虽然有4个8位I/O端口,但真正能提供借用的只有P1口,因为P2和P0口通常用于传送外部传送地址和数据,P3口也有它的第二功能。
因此,8051通常需要扩展。
由于我们用外部输入设定红绿灯倒计时初值、数码管的输出显示、红绿黄信号灯的显示都要用到一个I/O端口,显然8051的端口是不够,需要扩展。
扩展的方法有两种:
(1)借用外部RAM地址来扩展I/O端口;
(2)采用I/O接口新片来扩充。
我们用8255并行接口信片来扩展I/O端口。
6.4.2显示原理:
当定时器定时为1秒,时程序跳转到时间显示及信号灯显示子程序,它将依次显示信号灯时间,同时一直显示信号灯的颜色,这时在返回定时子程序定时一秒,在显示黄灯的下一个时间,这样依次把所有的灯色的时间显示完后在重新给时间计数器赋初值,重新进入循环。
6.4.38255PA口输出信号接信号灯:
由于发光二极管为共阳极接法,输出端口为低电平,对应的二极管发光,所以可以用置位方法点亮红,绿,黄发光二极管。
6.4.48255输出信号与数码管的连接
LED灯的显示原理:
通过同名管脚上所加电平的高低来控制发光二极管是否点量而显示不同的字形如SP,g,f,e,d,c,b,a管角上加上7FH所以 SP上为0伏,不亮其余为TTL高电平,全亮则显示为8
采用共阴级连接:
其中PC0\PB0-a,
PC1\PB1-b,
PC2\PB2-c,
PC3\PB3-d,
PC4\PB4-e,
PC5\PB5-f,
PC6\PB6-g
PC7\PB7-SP接地
表4.1驱动代码表
显示数值
dopgfedcba
驱动代码(16进制)
0
00111111
3FH
1
00000110
06H
2
01011011
5BH
3
01001111
4FH
4
01100110
66H
5
01101100
6DH
6
01111100
7DH
7
00000111
07H
8
01111111
7FH
6.4.58255与8051的连接:
用8051的P0口的P0.7连接8255的片选信号CS我们用8031的地址采用全译码方式,当P0.7=0时片选有效,其他无效,P0.1用于选择8255端口
P0.7p0.6p0.5p0.4p0.3p0.2P0.1P0.0
A7A6A5A4A3A2A1A0
1XXXXX0000H为8255的PA口
1XXXXX0101H为8255的PB口
1XXXXX1002H为8255的PC口
1XXXXX1103H为8255的控制口
由于8051是分时对8255和储存器进行访问所以8051的P0口不会发生冲突
第七章系统工作原理
(1)开关键盘输入交通灯初始时间,通过8051单片机P1输入到系统
(2)由8051单片机的定时器每秒钟通过P0口向8255的数据口送信息,由8255的PA口显示红、绿、黄灯的燃亮情况;由8255的PC口显示每个灯的燃亮时间。
(3)8051通过设置各个信号等的燃亮时间、通过8051设置,绿、红时间分别为10秒、13秒循环由8051的P0口向8255的数据口输出。
(4)在定时交通信号灯控制的基础上,增加允许急救车、警车优先通过的要求。
当有急救车、警车到达时,如果路口的信号灯是红灯,则立即变为黄灯闪烁3秒后转为绿灯以便让急救车、警车通过。
设定以按键K1,K2代表有急救车到来,并以中断方式进行处理。
在P3.0,P3.1连接按键K1,K2。
当按键K按下,表示急救车到来,此信号申请中断。
转为对应道路的绿灯。
绿灯时间倒计时完毕,重新循环。
第八章程序源代码
ORG0000H
LJMPSTART
ORG000BH
LJMPDS0
START:
MOVA,#80H;8255初始化
MOVDPTR,#0FF23H
MOVX@DPTR,A
MOVTMOD,#01H;对方式寄存器TMOD赋初值,T0为16位的定时器
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOVIE,#82H;中断初始化
MOV7EH,#00H
MOV7DH,#00H
MOV40H,#13
MOV34H,#250
MOV35H,#6
CLRIT0
SETBEA
SETBTR0
N1:
ACALLST1
N2:
ACALLST2
N3:
ACALLST3
N4:
ACALLST4
SJMPN1
ST1:
MOVR4,#10
NEXT1:
MOVP1,#0DDH;东西绿,南北红
JBP3.0,K1;判断是否按下东西禁行键
JBP3.1,K2;判断是否按下南北禁行键
LCALLDELAY;延时0.5S
MOVP1,#0DDH
JBP3.0,K1
JBP3.1,K2
LCALLDELAY
DJNZR4,NEXT1
RET
ST2:
MOVR4,#03;送闪烁次数
MOVR0,#10
MOVR3,#10
NEXT2:
MOVP1,#0DEH;东西黄,南北红
JBP3.0,ST2
JBP3.1,ST2
CLRTR0
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOV7EH,R3
MOV7DH,R0
INCR0
INCR3
MOV40H,#1
MOV34H,#250
MOV35H,#6
SETBTR0
LCALLDELAY;延时0.5S
MOVP1,#0DFH;东西黄灯灭,南北红
JBP3.0,ST2
JBP3.1,ST2
LCALLDELAY
DJNZR4,NEXT2
RET
K2:
CLRTR0
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOV7EH,#00H
MOV7DH,#00H
MOV40H,#13
MOV34H,#250
MOV35H,#6
SETBTR0
ACALLST1;东西方向绿灯10S,黄灯闪烁3S
ACALLST2;南北方向按下禁行键,红灯维持13S
JBP3.1,K2
AJMPN3
K1:
CLRTR0
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOV7EH,#00H
MOV7DH,#00H
MOV40H,#13
MOV34H,#250
MOV35H,#6
AcallST2
SETBTR0
ACALLST3;东西方向按下禁行键,红灯维持13S
ACALLST4;南北方向绿灯10S,黄灯闪烁3S
JBP3.0,K1
AJMPN1
K4:
CLRTR0
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOV7EH,#00H
MOV7DH,#00H
MOV40H,#13
MOV34H,#250
MOV35H,#6
AcallST4
SETBTR0
ACALLST1;东西方向绿灯10S,黄灯闪烁3S
ACALLST2;南北方向按下禁行键,红灯维持13S
JBP3.1,K4
AJMPN3
K3:
CLRTR0
MOVTH0,#0FCH;T0产生1MS的定时中断
MOVTL0,#18H
MOV7EH,#00H
MOV7DH,#00H
MOV40H,#13
MOV34H,#250
M