南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□√设计□创新实验日期:实验成绩:实验三交通灯控制实验一.实验目的掌握十字路口交通灯控制方法。
二.实验内容利用系统提供的双色LED 显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。
4 位LED 数码管显示时间,LED 显示红绿灯状态。
三.实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。
四.实验说明和电路原理图交通信号灯控制逻辑如下:假设一个十字路口为东西南北走向。
开始为四个路口的红灯全部亮之后,东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车,延时一段时间后(20 秒),东西路口的绿灯,闪烁若干次后(3 秒),东西路口的绿灯熄灭,同时东西路口的黄灯亮,延时一段时间后(2 秒),东西路口的红灯亮,南北路口的绿灯亮,南北路口方向通车,延时一段时间后(20 秒),南北路口的绿灯闪烁若干次后(3 秒),南北路口的绿灯熄灭,同时南北路口的黄灯亮,延时一段时间后(2 秒),再切换到东西路口的绿灯亮,南北路口的红灯亮,之后重复以上过程。
双色LED 是由一个红色LED 管芯和一个绿色LED 管芯封装在一起,共用负极,当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
本实验需要用到CPU 模块(F3 区)、静态数码管/双色LED 显示模块(B4 区)实验框图如图:五.实验预习要求学习教材的相关内容,根据实验要求画出程序流程图,写出实验程序。
六.实验步骤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 ;显示缓冲1TEMP EQU 44H ;显示缓冲2LED_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 0000HLJMP STARTORG 0100HSTART:LCALL STATE0 ;调用状态0LCALL DELAY ;调用延时MOV TMOD,#01H ;置T0工作方式1MOV TH0, #3CH ;置T0定时初值50mSMOV TL0, #0B0HSETB TR0 ;启动T0CLR EALOOP: MOV R2,#20 ;置1S计数初值50mS*20=1SMOV R3,#20 ;红灯20SMOV SECOND1,#25 ;东西秒显示初值25SMOV SECOND2,#25 ;南北秒显示初值25SLCALL DISPLAYLCALL STATE1 ;调用状态1WAIT1: JNB TF0,WAIT1 ;查询50mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值50mSMOV TL0, #0B0HSETB TR0 ;启动T0MOV R2,#20 ;置50mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT1 ;状态1维持20S;***************************************************MOV R2,#5 ;置50mS计数初值5*4=20MOV R3,#3 ;绿灯闪3SMOV R4,#4 ;闪烁间隔200mSMOV SECOND1,#5 ;东西秒显示初值5SMOV SECOND2,#5 ;南北秒显示初值5SLCALL DISPLAYWAIT2: LCALL STATE2 ;调用状态2JNB TF0,WAIT2 ;查询50mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值50mSMOV TL0, #0B0HDJNZ R4,WAIT2 ;判200mS到否?未到继续状态2CPL LED_G1 ;东西绿灯闪MOV R4,#4 ;闪烁间隔200mSDJNZ R2,WAIT2 ;判1S到否?未到继续状态2MOV R2,#5 ;置50mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT2 ;状态2维持3S;***************************************************MOV R2,#20 ;置50mS计数初值MOV R3,#2 ;黄灯2SMOV SECOND1,#2 ;东西秒显示初值2SMOV SECOND2,#2 ;南北秒显示初值2SLCALL DISPLAYWAIT3: LCALL STATE3 ;调用状态3JNB TF0,WAIT3 ;查询30mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值50mSMOV TL0, #0B0HMOV R2,#20 ;置50mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT3 ;状态3维持2S;***************************************************MOV R2,#20 ;置50mS计数初值MOV R3,#20 ;红灯20SMOV SECOND1,#25 ;东西秒显示初值25SMOV SECOND2,#25 ;南北秒显示初值25SLCALL DISPLAYWAIT4: LCALL STATE4 ;调用状态4JNB TF0,WAIT4 ;查询50mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值50mSMOV TL0, #0B0HDJNZ R2,WAIT4 ;判1S到否?未到继续状态4MOV R2,#20 ;置50mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT4 ;状态4维持20S;***************************************************MOV R2,#5 ;置50mS计数初值5*4=20MOV R4,#4 ;闪烁间隔200mSMOV R3,#3 ;绿灯闪3SMOV SECOND1,#5 ;东西秒显示初值5SMOV SECOND2,#5 ;南北秒显示初值5SLCALL DISPLAYWAIT5: LCALL STATE5 ;调用状态5JNB TF0,WAIT5 ;查询50mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值100mSMOV TL0, #0B0HDJNZ R4,WAIT5 ;判200mS到否?未到继续状态5CPL LED_G2 ;南北绿灯闪MOV R4,#4 ;闪烁200mSMOV R2,#5 ;置100mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT5 ;状态5维持3S;***************************************************MOV R2,#20 ;置50mS计数初值MOV R3,#2 ;黄灯2SMOV SECOND1,#2 ;东西秒显示初值2SMOV SECOND2,#2 ;南北秒显示初值2SLCALL DISPLAYWAIT6: LCALL STATE6 ;调用状态6JNB TF0,WAIT6 ;查询100mS到否CLR TF0MOV TH0, #3CH ;恢复T0定时初值100mSMOV TL0, #0B0HDJNZ R2,WAIT6 ;判1S到否?未到继续状态6MOV R2,#20 ;置100mS计数初值DEC SECOND1 ;东西秒显示减一DEC SECOND2 ;南北秒显示减一LCALL DISPLAYDJNZ R3,WAIT6 ;状态6维持2SLJMP LOOP ;大循环STA TE0: ;状态0MOV P1,#0CLR LED_G1SETB LED_R1 ;东西红灯亮CLR LED_G2SETB LED_R2 ;南北红灯亮RETSTA TE1: ;状态1SETB LED_G1 ;东西绿灯亮CLR LED_R1CLR LED_G2SETB LED_R2 ;南北红灯亮RETSTA TE2: ;状态2CLR LED_R1CLR LED_G2SETB LED_R2 ;南北红灯亮RETSTA TE3: ;状态3SETB LED_G1SETB LED_R1 ;东西黄灯亮CLR LED_G2SETB LED_R2 ;南北红灯亮RETSTA TE4: ;状态4CLR LED_G1SETB LED_R1 ;东西红灯亮SETB LED_G2 ;南北绿灯亮CLR LED_R2RETSTA TE5: ;状态5CLR LED_G1SETB LED_R1 ;东西红灯亮CLR LED_R2RETSTA TE6: ;状态6CLR LED_G1SETB LED_R1 ;东西红灯亮SETB LED_G2SETB LED_R2 ;南北黄灯亮RETDISPLAY: ;数码显示MOV A, SECOND1 ;东西秒寄存器MOV B, #10 ;16进制数拆成两个10进制数DIV ABMOV DBUF+1,AMOV A,BMOV DBUF, AMOV A, SECOND2 ;南北秒寄存器MOV B, #10 ;16进制数拆成两个10进制数DIV ABMOV DBUF+3, AMOV A,BMOV DBUF+2, AMOV R0,#DBUFMOV R1,#TEMPMOV R7,#4DP10: MOV DPTR,#LEDMAPMOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0INC R1DJNZ R7,DP10MOV R0,#TEMPMOV R1,#4DP12: MOV R7,#8MOV A,@R0DP13: RLC AMOV DIN,CCLR CLKSETB CLKDJNZ R7,DP13INC R0DJNZ R1,DP12RETLEDMAP: 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,BDB 58H,5EH,7BH,71H,0,40H ;C,D,E,F,, -Delay: mov r5, #5DLoop0:mov r6, #0DLoop1:mov r7, #0DLoop2:NOPNOPdjnz r7, DLoop2djnz r6, DLoop1djnz r5, DLoop0retEND八.实验现象及小结当程序开始运行时,东西绿灯亮,南北红灯亮,且持续的时间为25秒,数码管显示计数器的当前值,当还剩三秒的时候,绿灯开始闪烁。