📄 122.asm
字号:
;******************************************************************
; 电信二班 郑尹铭 2005309214
; 电信一班 胡庆在 2005309123
;
; 交通灯控制程序
;******************************************************************
ORG 0000H
LJMP 0030H
ORG 0030H
MOV SP,#60H
MOV TMOD,#01H ;定时方式设置
MOV TH0,#3CH ;装入初值
MOV TL0,#0B0H
;******************************************************************
; 初始化红绿灯,全亮
;******************************************************************
MOV DPTR,#0FFD8H ;东西入口地址
MOV A,#0C0H
MOVX @DPTR,A ;东西灯全亮
INC DPTR ;FFD9南北入口地址
MOV A,#0C0H
MOVX @DPTR,A ;南北灯全亮
SETB TR0 ;开定时
;******************************************************************
; 东西绿灯,南北红灯段
;******************************************************************
JOD3: MOV DPTR,#0FFD8H
MOV A,#0EDH ;东西绿灯
MOVX @DPTR,A
INC DPTR
MOV A,#0F6H ;南北红灯
MOVX @DPTR,A
MOV R2,#15H ;绿灯秒数装入
MOV R3,#20H ;红灯秒数装入
CLR 00H ;标志位
LJMP LOOP0 ;跳转到数码管扫描,等待定时
;******************************************************************
; 东西黄灯闪烁段
;******************************************************************
JOD1: MOV R4,#05H ;闪烁次数
MOV R2,#05H ;闪烁秒数
SETB 01H ;闪烁标志位
JOD5: SETB 02H ;黄灯亮标志位
MOV DPTR,#0FFD8H
MOV A,#0DBH ;东西黄灯亮
MOVX @DPTR,A
INC DPTR
MOV A,#0F6H ;南北红灯亮
MOVX @DPTR,A
DEC R4 ;闪烁次数减一
DJNZ R4,DX1 ;判断是否中止闪烁
LJMP LOOP0 ;调转到扫描
DX1: CLR 01H ;停止闪烁标志位
LJMP LOOP0 ;调转到扫描
JOD6: CLR 02H ;黄灯灭标志位
MOV DPTR,#0FFD8H
MOV A,#0FFH ;东西黄灯灭
MOVX @DPTR,A
INC DPTR
MOV A,#0F6H ;南北红灯亮
MOVX @DPTR,A
DEC R4 ;闪烁次数减一
DJNZ R4,DX2 ;判断是否中止闪烁
LJMP LOOP0 ;调转到扫描
DX2: CLR 01H ;停止闪烁标志位
LJMP LOOP0 ;调转到扫描
;******************************************************************
; 东西红灯,南北绿灯段
;******************************************************************
JOD4: MOV DPTR,#0FFD8H
MOV A,#0F6H ;东西红灯亮
MOVX @DPTR,A
INC DPTR
MOV A,#0EDH ;南北绿灯亮
MOVX @DPTR,A
MOV R2,#20H
MOV R3,#15H
SETB 00H
LJMP LOOP0 ;延时
;******************************************************************
; 南北绿灯闪烁段
;******************************************************************
JOD7: MOV R4,#05H ;闪烁次数
MOV R3,#05H ;黄灯秒数
SETB 01H ;黄灯标志位
JOD2: MOV DPTR,#0FFD8H
MOV A,#0F6H ;东西红灯亮
MOVX @DPTR,A
INC DPTR
MOV A,#0DBH ;南北黄灯亮
MOVX @DPTR,A
DEC R4 ;闪烁次数减一
DJNZ R4,DX3 ;判断是否中止闪烁
LJMP LOOP0 ;调转到扫描
DX3: CLR 01H ;停止闪烁标志位
LJMP LOOP0 ;调转到扫描
JOD8: MOV DPTR,#0FFD8H
MOV A,#0F6H ;东西红灯亮
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH ;南北黄灯灭
MOVX @DPTR,A
DEC R4 ;闪烁次数减一
DJNZ R4,DX4 ;判断是否中止闪烁
LJMP LOOP0 ;调转到扫描
DX4: CLR 01H ;停止闪烁标志位
LJMP LOOP0 ;调转到扫描
LOOP0: MOV DPTR,#TAB ;装入字段表首地址
;******************************************************************
; 东西个位数码管扫描
;******************************************************************
LOOP1: MOV A,R2 ;秒数装入A
ANL A,#0FH ;取出个位数
MOVC A,@A+DPTR ;查表
MOV P0,A ;设置字位码
MOV P2,#11110111B ;送字位码
MOV P2,#0FFH
;******************************************************************
; 东西十位数码管扫描
;******************************************************************
LOOP2: MOV A,R2 ;秒数装入A
SWAP A ;交换个位与十位
ANL A,#0FH ;取出十位数
MOVC A,@A+DPTR ;查表
MOV P0,A ;送字段
MOV P2,#11111011B ;送字位码
MOV P2,#0FFH ;避免影响,关字段
;******************************************************************
; 南北个位数码管扫描
;******************************************************************
LOOP3: MOV A,R3 ;秒数装入A
ANL A,#0FH ;取出个位数
MOVC A,@A+DPTR ;查表
MOV P0,A ;送字段
MOV P2,#11111101B ;送字位码
MOV P2,#0FFH ;避免影响,关字段
;******************************************************************
; 南北十位数码管扫描
;******************************************************************
LOOP4: MOV A,R3 ;秒数装入A
SWAP A ;交换个位与十位
ANL A,#0FH ;取出十位数
MOVC A,@A+DPTR ;查表
MOV P0,A ;送字段
MOV P2,#11111110B ;送字位码
MOV P2,#0FFH ;避免影响,关字段
JBC TF0,TIME0
SJMP LOOP1 ;循环扫描数码管
;******************************************************************
; 中断响应程序
;******************************************************************
TIME0: MOV TH0,#3CH ;装入初值
MOV TL0,#0B0H
DJNZ 32H,DS1 ;判断中断循环次数
;CLR TR0 ;循环结束停定时器
SJMP JISHU ;跳转到计数多分支程序
DS1: LJMP LOOP1 ;循环未继续,继续扫描数码管
;******************************************************************
; 计数多分支段
;******************************************************************
JISHU: MOV 32H,#14H ;定时循环重装初值
MOV A,R2
SUBB A,#01H ;30H整形
MOV R2,A
JNB AC,DP1
MOV A,R2
SUBB A,#06H
MOV R2,A
DP1: MOV A,R3
SUBB A,#01H
MOV R3,A ;31H整形
JNB AC,DP4
MOV A,R3
SUBB A,#06H
MOV R3,A
DP4: ;SETB TR0
JB 00H,DP5 ;东西 OR 南北判断
;******************************************************************
; 东西
;******************************************************************
JB 01H,DP6 ;判断黄灯是否开始闪烁
CJNE R2,#00H,LOOP1 ;秒数未到,继续扫描数码管
CJNE R3,#00H,DP8 ;绿灯秒数到,红灯未到,跳转到黄灯初启化
LJMP JOD4 ;红灯时间到,转绿灯
DP8: LJMP JOD1 ;
DP6: JB 02H,DP7 ;黄灯闪烁分支
LJMP JOD5
DP7: LJMP JOD6
;******************************************************************
; 南北
;******************************************************************
DP5: JB 01H,DP10 ;南北
CJNE R3,#00H,LOOP1
CJNE R2,#00H,DP9
LJMP JOD3
DP9: LJMP JOD7
DP10: JB 02H,DP11
LJMP JOD2
DP11: LJMP JOD8
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -