📄 jiaotongdeng.asm
字号:
STACK SEGMENT STACK
DW 128 DUP(?)
STACK ENDS
DATA SEGMENT
MESSAGE0 DB '****************************WELCOM!TEACHER!****************',13,10,'$'
MESSAGE1 DB '--------press enter key,9 seconds delay time.--------',13,10,'$'
MESSAGE2 DB '********press Space key,5 seconds delay time.********',13,10,'$'
INPUT DB '--------INPUT YOUR KEY TO SELECT DELAY TIME:','$'
DATA ENDS
CODE SEGMENT
ASSUME SS:STACK,DS:DATA,CS:CODE
MAIN: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
;清除屏幕,卷动整个屏幕
;-------------------------------------------------------------------------------------------
MOV AX,0600H
MOV BH,04H
MOV CX,0
MOV DX,184FH
INT 10H
;定位初始光标位置:0行0列
;-------------------------------------------------------------------------------------------
MOV AH,02H
MOV BH,0
MOV DH,0
MOV DL,0
INT 10H
;输出提示信息
;-------------------------------------------------------------------------------------------
MOV BX,OFFSET MESSAGE0
MOV AH,9 ;输出提示信息MESSAGE0
MOV DX,BX
INT 21H
MOV BX,OFFSET MESSAGE1
MOV AH,9 ;输出提示信息MESSAGE1
MOV DX,BX
INT 21H
MOV BX,OFFSET MESSAGE2
MOV AH,9 ;输出提示信息MESSAGE2
MOV DX,BX
INT 21H
;提示 选择延迟时间
;------------------------------------------------------------------------------------------
MOV BX,OFFSET INPUT
MOV AH,9 ;输出提示信息INPUT
MOV DX,BX
INT 21H
;空格键:延迟5秒,回车键:延迟9秒
;------------------------------------------------------------------------------------------
MOV AH,0
INT 16H
CMP AL,20H
JZ FIVE
CMP AL,0DH
JZ NINE
FIVE: MOV AL,35H
MOV CL,AL
CALL DISPCHR
JMP Initial
NINE: MOV AL,39H
MOV CL,AL
CALL DISPCHR
JMP Initial
;交通灯 全部灯红 初始化状态
;------------------------------------------------------------------------------------------
Initial: CALL NORTH_RED
CALL WEST_RED
CALL EAST_RED
CALL SOUTH_RED
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------
DELAY1: CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CMP AL,30H
JZ STATES1
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
;状态1:南北绿灯,东西红灯
;------------------------------------------------------------------------------------------
STATES1: CALL NORTH_GREEN
CALL SOUTH_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------
DELAY2: MOV AL,CL
CALL DISPCHR
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CMP AL,30H
JZ STATES2
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
;状态2:东西绿灯,南北红灯
;------------------------------------------------------------------------------------------
STATES2: CALL NORTH_RED
CALL SOUTH_RED
CALL EAST_GREEN
CALL WEST_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------
DELAY3: MOV AL,CL
CALL DISPCHR
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CMP AL,30H
JZ STATES3
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
;状态2:东西红灯,南北绿灯
;------------------------------------------------------------------------------------------
STATES3: CALL WEST_RED
CALL EAST_RED
CALL SOUTH_GREEN
CALL NORTH_GREEN
;延迟5秒或者9秒
;------------------------------------------------------------------------------------------
DELAY4: MOV AL,CL
CALL DISPCHR
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CMP AL,30H
JZ CIRCULATION
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
CALL DELAY
DEC AL
CALL DISPCHR
;检测有没有 空格键盘输入
;------------------------------------------------------------------------------------------
MOV AH,0BH
INT 21H
CMP AL,0FFH ;检测键盘是否 有小写r键 输入?
JNZ CIRCULATION ;没有,则循环 状态
JMP MAIN ;有,则重载 程序
CIRCULATION: JMP STATES1
;下面全部为子程序
;-------------------------------------------------------------------------------------------
;*******************************************************************************************
NORTH_RED PROC NEAR ;*****北红*****
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
MOV AH,02H ;交通北方向 光标定位
MOV BH,0
MOV DH,4 ;4行40列
MOV DL,40
INT 10H
MOV AH,09H ;交通北方向图形输出
MOV AL,219
MOV BH,0
MOV BL,04H ;黑底红字(0000 0100)
MOV CX,3
INT 10H
MOV AH,02H
MOV BH,0
MOV DH,5 ;5行40列
MOV DL,40
INT 10H
MOV AH,09H
MOV AL,219
MOV BH,0
MOV BL,04H
MOV CX,3
INT 10H
POPF
POP DX
POP CX
POP BX
POP AX
RET
NORTH_RED ENDP
;*******************************************************************************************
WEST_RED PROC NEAR ;*****西红*****
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSHF
MOV AH,02H ;交通西方向 光标定位
MOV BH,0
MOV DH,10 ;10行1列
MOV DL,1
INT 10H
MOV AH,09H ;交通西方向图形输出
MOV AL,219
MOV BH,0
MOV BL,04H
MOV CX,3
INT 10H
MOV AH,02H
MOV BH,0
MOV DH,9 ;11行1列
MOV DL,1
INT 10H
MOV AH,09H
MOV AL,219
MOV BH,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -