南昌大学2014年单片机实验报告 下载本文

LCALL DISPLAY

DJNZ R3,WAIT2 ;状态2维持3S MOV R2,#20 ;置50MS计数初值 MOV R3,#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 ; MOV TL0, #0B0H

DJNZ R2,WAIT3 ; MOV R2,#20 ; DEC SECOND1 ; DEC SECOND2 ; LCALL DISPLAY

DJNZ R3,WAIT3 ; MOV R2,#20 ; MOV R3,#20 ; MOV SECOND1,#25 ; MOV SECOND2,#25 ; LCALL DISPLAY

WAIT4: LCALL STATE4 ; JNB TF0,WAIT4 ; CLR TF0

MOV TH0, #3CH ; MOV TL0, #0B0H

DJNZ R2,WAIT4 ; MOV R2,#20 ; DEC SECOND1 ; DEC SECOND2 ; LCALL DISPLAY

DJNZ R3,WAIT4 ; MOV R2,#5 ; MOV R4,#4 ; MOV R3,#3 ; MOV SECOND1,#5 ; MOV SECOND2,#5 ; LCALL DISPLAY

WAIT5: LCALL STATE5 ; JNB TF0,WAIT5 ; CLR TF0

MOV TH0, #3CH ;恢复T0定时初值50MS 判1S到否?未到继续状态3

置50MS计数初值 东西秒显示减一 南北秒显示减一 状态3维持2S 置50MS计数初值 红灯20S

东西秒显示初值25S 南北秒显示初值25S 调用状态4 查询50MS到否 恢复T0定时初值50MS 判1S到否?未到继续状态4 置50MS计数初值 东西秒显示减一 南北秒显示减一 状态4维持20S

置50MS计数初值 5*4=20 闪烁间隔200MS 绿灯闪3S

东西秒显示初值5S 南北秒显示初值5S 调用状态5

查询50MS到否 恢复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 ; MOV R2,#20 ; MOV R3,#2 ; MOV SECOND1,#2 ; MOV SECOND2,#2 ; LCALL DISPLAY

WAIT6: LCALL STATE6 ; JNB TF0,WAIT6 ; CLR TF0

MOV TH0, #3CH ; MOV TL0, #0B0H

DJNZ R2,WAIT6 ; MOV R2,#20 ; DEC SECOND1 ; DEC SECOND2 ; LCALL DISPLAY

DJNZ R3,WAIT6 ; LJMP LOOP ;STATE0: ; MOV P1,#0 CLR LED_G1

SETB LED_R1 ; CLR LED_G2

SETB LED_R2 ; RET

STATE1: ; SETB LED_G1 ; CLR LED_R1

CLR LED_G2

SETB LED_R2 ; RET

STATE2: ; CLR LED_R1

CLR LED_G2 SETB LED_R2 ;状态5维持3S 置50MS计数初值 黄灯2S

东西秒显示初值2S 南北秒显示初值2S 调用状态6

查询100MS到否 恢复T0定时初值100MS 判1S到否?未到继续状态6 置100MS计数初值 东西秒显示减一 南北秒显示减一 状态6维持2S 大循环 状态0 东西红灯亮 南北红灯亮 状态1

东西绿灯亮 南北红灯亮 状态2

南北红灯亮

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: ; CLR LED_G1

SETB LED_R1 ; CLR LED_R2 RET

STATE6: ; CLR LED_G1

SETB LED_R1 ; SETB LED_G2

SETB LED_R2 ; RET

DISPLAY: ; MOV A, SECOND1 ; MOV B, #10 ;16 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

DP10: MOV DPTR,#LEDMAP MOV A,@R0

MOVC A,@A+DPTR

MOV @R1,A

东西红灯亮 南北绿灯亮 状态5 东西红灯亮 状态6 东西红灯亮 南北黄灯亮 数码显示

东西秒寄存器

进制数拆成两个10进制数南北秒寄存器

进制数拆成两个10进制数 DP12: DP13:

INC R0 INC R1

DJNZ R7,DP10 MOV R0,#TEMP MOV R1,#4 MOV R7,#8 MOV A,@R0 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

六、实验结果

程序开始运行后,B5区模拟的东西红灯亮,南北绿灯亮,同时两个方向的数码管分别从25秒开始倒计时,当倒计时到5秒时,南北绿灯闪亮3秒后变黄,再过2秒,即倒计时到0时,变为东西绿灯亮,南北红灯亮,同时两个方向的数码管分别同时从25秒开始倒计时,但倒计时到5秒时,东西绿灯闪亮3秒后变黄,再过2秒之后又回到初始状态,继续循环运行。

七、结果分析

本实验通过双色的LED模拟交通灯的显示状态,并用静态数码管结合定时器实现定时及显示功能,将交通灯的显示分为六个不同的状态,程序运行之后进行计数显示,当计时时间到达某一个状态之后,跳转进入相应的状态执行,执行完之后继续进入下一个状态,实验通过程序模拟了交通灯的显示。