实验三交通灯控制实验.docx
《实验三交通灯控制实验.docx》由会员分享,可在线阅读,更多相关《实验三交通灯控制实验.docx(14页珍藏版)》请在冰豆网上搜索。
实验三交通灯控制实验
D南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合□设计□创新实验日期:
实验成绩:
实验三交通灯控制实验
掌握十字路口交通灯控制方法。
.实验内容
利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4位LED数码管显示时间,LED显示红绿灯状态。
3.实验要求
根据实验内容编写一个程序,并在实验仪上调试和验证。
4.实验说明和电路原理图
交通信号灯控制逻辑如下:
假设一个十字路口为东西南北走向。
开始为四个路口的红灯
全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20秒),东西路口的绿灯,闪烁若干次后(3秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20秒),南北路口的绿灯闪烁若干次后(3秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。
双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
本实验需要用到CPU模块(F3区)、静态数码管/双色LED显示模块(B4区)实验框图如图:
5.实验预习要求
学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
6.实验步骤
1)系统各跳线器处在初始设置状态。
P10同时接G1、G3;P11同时接R1、R3;P1.2同时接G2、G4;P1.3同时接R2、
R4;P1.6、P1.7分别接静态数码显示的DIN、CLK。
2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。
编译无误后,下载程序运行。
3)观察十字路口交通灯效果。
七.实验程序
//*
******************************************************************
SECOND1
EQU
30H
;东西秒寄存器
SECOND2
EQU
31H
;南北秒寄存器
DBUF
EQU
40H
;显示缓冲1
TEMP
EQU
44H
;显示缓冲2
LED_G1
BIT
P1.0
;东西绿灯
LED_R1
BIT
P1.1
;东西红灯
LED_G2
BIT
P1.2
;南北绿灯
LED_R2
BIT
P1.3
;南北红灯
Din
BIT
P1.6
;串行显示数据
CLK
BIT
P1.7
;串行显示时钟
ORG
0000H
LJMP
START
ORG
0100H
START:
LCALL
STATE0
;调用状态0
LCALL
DELAY
;调用延时
MOV
TMOD,#01H
;置T0工作方式1
MOV
TH0,#3CH
;置T0定时初值50mS
MOV
TL0,#0B0H
SETB
TR0
;启动T0
CLR
EA
LOOP:
MOV
MOV
MOV
MOV
R2,#20
R3,#20
SECOND1,#25
SECOND2,#25
;置1S计数初值
;红灯20S
;东西秒显示初值
;南北秒显示初值
50mS*20=1S
25S
25S
LCALLDISPLAY
LCALL
STATE1
;调用状态1
WAIT1:
JNB
TF0,WAIT1
;查询50mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值50mS
MOV
TL0,#0B0H
SETB
TR0
;启动T0
DJNZ
R2,WAIT1
;判1S到否?
未到继续状态1
MOV
R2,#20
;置50mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT1
;状态1维持20S
・***************************************************
MOV
R2,#5
;置50mS计数初值
5*4=20
MOV
R3,#3
;绿灯闪3S
MOV
R4,#4
;闪烁间隔200mS
MOV
SECOND1,#5
;东西秒显示初值
5S
MOV
SECOND2,#5
;南北秒显示初值
5S
LCALLDISPLAY
WAIT2:
LCALL
STATE2
;调用状态2
JNB
TF0,WAIT2
;查询50mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值50mS
MOV
TL0,#0B0H
DJNZ
R4,WAIT2
;判200mS到否?
未到继续状态2
CPL
LED_G1
;东西绿灯闪
MOV
R4,#4
;闪烁间隔200mS
DJNZ
R2,WAIT2
;判1S到否?
未到继续状态2
MOV
R2,#5
;置50mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT2
;状态2维持3S
・***************************************************
MOVR2,#20;置50mS计数初值
MOVR3,#2;黄灯2S
MOV
SECOND1,#2
;东西秒显示初值
2S
MOV
SECOND2,#2
;南北秒显示初值
2S
LCALL
DISPLAY
WAIT3:
LCALL
STATE3
;调用状态3
JNB
TF0,WAIT3
;查询30mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值
50mS
MOV
TL0,#0B0H
DJNZ
R2,WAIT3
;判1S到否?
未到继续状态3
MOV
R2,#20
;置50mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT3
;状态3维持2S
・***************************************************
MOVR2,#20
;置50mS计数初值
MOV
R3,#20;红灯20S
MOV
SECOND1,#25;东西秒显示初值
25S
MOV
SECOND2,#25;南北秒显示初值
25S
LCALL
DISPLAY
WAIT4:
LCALL
STATE4
;调用状态4
JNB
TF0,WAIT4
;查询50mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值50mS
MOV
TL0,#0B0H
DJNZ
R2,WAIT4
;判1S到否?
未到继续状态4
MOV
R2,#20
;置50mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT4
;状态4维持20S
・***************************************************
MOV
R2,#5
;置50mS计数初值
5*4=20
MOV
R4,#4
;闪烁间隔200mS
MOV
R3,#3
;绿灯闪3S
MOV
SECOND1,#5
;东西秒显示初值
5S
MOV
SECOND2,#5
;南北秒显示初值
5S
LCALL
DISPLAY
WAIT5:
LCALL
STATE5
;调用状态5
JNB
TF0,WAIT5
;查询50mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值100mS
MOV
TL0,#0B0H
DJNZ
R4,WAIT5
;判200mS到否?
未到继续状态5
CPL
LED_G2
;南北绿灯闪
MOV
R4,#4
;闪烁200mS
DJNZ
R2,WAIT5
;判1S到否?
未到继续状态5
MOV
R2,#5
;置100mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT5
;状态5维持3S
・***************************************************
MOV
R2,#20
;置50mS计数初值
MOV
R3,#2
;黄灯2S
MOV
SECOND1,#2
;东西秒显示初值
2S
MOV
SECOND2,#2
;南北秒显示初值
2S
LCALL
DISPLAY
WAIT6:
LCALL
STATE6
;调用状态6
JNB
TF0,WAIT6
;查询100mS到否
CLR
TF0
MOV
TH0,#3CH
;恢复T0定时初值100mS
MOV
TL0,#0B0H
DJNZ
R2,WAIT6
;判1S到否?
未到继续状态6
MOV
R2,#20
;置100mS计数初值
DEC
SECOND1
;东西秒显示减一
DEC
SECOND2
;南北秒显示减一
LCALL
DISPLAY
DJNZ
R3,WAIT6
;状态6维持2S
LJMP
LOOP
;大循环
STATE0:
;状态0
MOV
P1,#0
CLR
LED_G1
SETB
LED_R1
;东西红灯亮
CLR
LED_G2
SETB
LED_R2
;南北红灯亮
RET
STATE1:
;状态1
SETB
LED_G1
;东西绿灯亮
CLR
LED_R1
CLR
LED_G2
SETB
LED_R2
;南北红灯亮
RET
STATE2:
;状态2
CLR
LED_R1
CLR
LED_G2
SETB
LED_R2
;南北红灯亮
RET
STATE3:
;状态3
SETB
LED_G1
SETB
LED_R1
;东西黄灯亮
CLR
LED_G2
SETB
LED_R2
;南北红灯亮
RET
STATE4:
;状态4
CLR
LED_G1
SETB
LED_R1
;东西红灯亮
SETB
LED_G2
;南北绿灯亮
CLR
LED_R2
RET
STATE5:
;状态5
CLRLED_G1
SETBLED_R1;东西红灯亮
CLRLED_R2
RET
STATE6:
;状态6
CLRLED_G1
SETBLED_R1;东西红灯亮
SETBLED_G2
SETBLED_R2;南北黄灯亮
RET
DISPLAY:
;数码显示
MOV
A,SECOND1
;东西秒寄存器
MOV
B,#10
;16进制数拆成两个10进制数
DIV
AB
MOV
DBUF+1,A
MOV
A,B
MOV
DBUF,A
MOV
A,SECOND2
;南北秒寄存器
MOV
B,#10
;16进制数拆成两个
DIV
AB
MOV
DBUF+3,A
MOV
A,B
MOV
DBUF+2,A
MOV
R0,#DBUF
MOV
R1,#TEMP
MOV
R7,#4
MOV
DPTR,#LEDMAP
MOV
A,@R0
MOVC
A,@A+DPTR
MOV
@R1,A
INC
R0
INC
R1
DJNZ
R7,DP10
MOV
R0,#TEMP
DP10:
10进制数
MOV
R1,#4
DP12:
MOV
R7,#8
MOV
A,@R0
DP13:
RLC
A
MOV
DIN,C
CLR
CLK
SETB
CLK
DJNZ
R7,DP13
INC
R0
DJNZ
R1,DP12
RET
LEDMAP:
DB
3FH,6,5BH,4FH,66H,6DH;0
,1,2,3,4,5
DB
7DH,7,7FH,6FH,77H,7CH;6
,7,8,9,A,B
DB
58H,5EH,7BH,71H,0,40H;C
,D,E,F,,-
Delay:
mov
r5,#5
DLoop0:
mov
r6,#0
DLoop1:
mov
r7,#0
DLoop2:
NOP
NOP
djnz
r7,DLoop2
djnz
r6,DLoop1
djnz
r5,DLoop0
ret
END
八.实验现象及小结
当程序开始运行时,东西绿灯亮,南北红灯亮,且持续的时间为25秒,数码管显示计数器的当前值,当还剩三秒的时候,绿灯开始闪烁。
计时到0时,东西转黄灯,时间为5秒,计满之后东西红灯,南北绿灯。
南北方向上的情况与之前东西的情况一致。
当南北黄灯状态的计数值计满时,转回初始状态,完成一个循环。
通过这次实验,我了解到了用单片机实现综合功能的例子了。
很强大,交通灯利用计数器和控制LED灯,以及数码管的显示来实现交通灯的功能。
程序中包含咧很多子程序,逐一调用,并且按照一定的顺序调用,使得整个程序变得有条有理。
在单片机的学习中,程序的编辑也是很有必要掌握的。
要做到利用最简洁的语言来实现最复杂的功能,这是我们的目标。
而我们还需要更多的去练习。
-可编辑修改-
-可编辑修改-
THANKS!
!
!
学习课件等等
致力为企业和个人提供合同协议,策划案计划书,
打造全网一站式需求