📄 trafficlight.asm
字号:
.486
STACKA SEGMENT PARA STACK'STACK'
DB 512 DUP (0)
STACKA ENDS
DATA SEGMENT
SAN DB ?
ERWU DB ?
MS DB 0
AMS DB 2 DUP(0)
MN DB 0
NW DB 0
ANW DB 2 DUP(0)
AMN DB 2 DUP(0)
NEE DB 0
ANE DB 2 DUP(0)
KEEP_IP DW ?
KEEP_CS DW ?
COUNT1 DW 0
COUNT2 DW 0
COUNT3 DW 0
LINE1 DW 95
LINE2 DW 85
LINE3 DW 95
LINE4 DW 105
LINE5 DW 70
LINE8 DW 120
LINE9 DW 60
LINE10 DW 130
CORLUM DW 84
CORLUM0 DW 220
CORLUM1 DW 140
CORLUM2 DW 155
CORLUM3 DW 170
CORLUM4 DW 155
CORLUM5 DW 110
CORLUM6 DW 120
CORLUM7 DW 190
CORLUM8 DW 200
COUNT_TIME DW 00H
DENG_8X16DOT DB 83H,0C1H,07H,0E0H,0FH,0F0H, 0FH,0F0H
DB 0FH,0F0H,0FH,0F0H,07H,0E0H,83H,0C1H
CAR1_8X16DOT DB 3FH,0FCH, 64H,82H, 0E4H,81H ,0FFH,0FFH
DB 0FFH,0FDH ,0FFH,0FFH ,24H,24H,18H,18H
CAR2_8X16DOT DB 7EH,00H,5AH,00H,0FFH,00H,0FFH,00H
DB 7EH,00H,0FFH,00H,0FFH,00H,7EH,00H
CAR3_8X16DOT DB 7EH,00H,0FFH,00H,0FFH,00H,7EH,00H
DB 0FFH,00H,0FFH,00H,5AH,00H,7EH,00H
XIAN1_8X16DOT DB 6 DUP(00H),4 DUP(0FFH),6 DUP(00H)
XIAN2_16X8DOT DB 16 DUP(3FH)
FREQ1 DW 330,392,587,523,392,349,330,330,330,349,392,440,392
DW 330,392,587,523,392,349,330,392,392,440,494,523,523
DW 587,392,494,440,392,330,392,523,440,523,587,523,494,440,392
DW 330,392,587,523,392,349,330,392,392,440,494,523,523,0
TIME1 DW 50,25,75,50,25,75,50,4 DUP (25),2 DUP (75)
DW 50,25,75,50,25,75,50,4 DUP (25),2 DUP (75)
DW 50,4 DUP (25),50,25,75,50,25,50,25,50,25,75
DW 50,25,75,50,25,75,50,4 DUP (25),2 DUP (75)
FREQ2 DW 330,330,349,392,392,349,330,294
DW 262,262,294,330,330,294,294
DW 330,330,349,392,392,349,330,294
DW 262,262,294,330,294,262,262,0
TIME2 DW 8 DUP (25)
DW 4 DUP (25),50,2 DUP (25)
DW 8 DUP (25)
DW 4 DUP (25),50,2 DUP (25)
FREQ3 DW 783,659,523,392,0
TIME3 DW 17,17,17,17
FREQ4 DW 262,294,330,783,262,0
TIME4 DW 17,17,17,17,17
STR1 DB 'Welcome to use traffic control systerm'
STR2 DB 'Press key ENTER to start'
STR3 DB 'Press key ESC to end'
STR4 DB 'WORK OVER'
LEN_STR4 EQU $-STR4
STR5 DB 'Thanks for choose our systerm.We are the best'
STR6 DB 'Designer:/AiQiangfa//ChenLu//JiaLe/'
STR7 db '/GuoFeng//Shenyinjie/'
LEN_STR7 EQU $-STR7
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0FH
INT 10H
MOV AX,000DH
INT 10H
MOV AH,0BH
MOV BH,0
MOV BL,8
INT 10H
XOR CX,CX
MOV COUNT1,0
MOV COUNT2,0
MOV COUNT3,0
CLI
MOV AL,1CH
MOV AH,35H
INT 21H
MOV KEEP_CS,ES
MOV KEEP_IP,BX
MOV AL,1CH
MOV AH,25H
MOV DX,SEG TIMER
MOV DS,DX
MOV DX,OFFSET TIMER
INT 21H
MOV AX,DATA
MOV DS,AX
MOV AL,36H
OUT 43H,AL
MOV AX,59660D
OUT 40H,AL
MOV AL,AH
OUT 40H,AL
IN AL,21H
AND AL,0FCH
OUT 21H,AL
STI
CALL LU1
CALL MIE1
CALL MIE2
CALL MIE3
CALL MIE4
CALL MIE6
CALL XIAN01
CALL XIAN02
CALL XIAN03
CALL T_1
MOV DX,20BH
MOV AL,90H
OUT DX,AL
H0: LEA SI,FREQ1
LEA BP,TIME1
MUSIC1: MOV DI,[SI]
CMP DI,0
JE L
MOV BX,DS:[BP]
CALL SOUND
ADD SI,2
ADD BP,2
MOV AH,01H
INT 16H
JE MUSIC1
MOV AH,00H
INT 16H
CMP AL,0DH
JZ L
JMP H0
H1: JMP END1
L:STI
MOV COUNT_TIME,0D
L0: MOV AH,01H
INT 16H
JE JX
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H1
CMP AL,4DH
JNZ J1
CALL GR1
J1: CMP AL,4EH
JNZ KKK1
CALL GR2
KKK1:
CMP AL,20H
JNE JX
CALL BROKEN
JX: CALL T_2
CALL MIE1
CALL MIE2
CALL DENG3
CALL DENG4
CALL CARGANDOWN1
CALL WRITE2
MOV AH,01H
INT 16H
JE JX0
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H1
CMP AL,4DH
JNZ J2
CALL GR1
J2: CMP AL,4EH
JNZ KKK2
CALL GR2
KKK2:
CMP AL,20H
JNE JX0
CALL BROKEN
JX0: CALL CARGANDOWN2
CALL WRITE1
MOV AH,01H
INT 16H
JE JX1
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H1
CMP AL,4DH
JNZ J10
CALL GR1
J10: CMP AL,4EH
JNZ SS3
CALL GR2
SS3:
CMP AL,20H
JNE JX1
CALL BROKEN
JX1: CALL CARGANUP1
CALL WRITE2
MOV AH,01H
INT 16H
JE JX2
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H1
CMP AL,4DH
JNZ J3
CALL GR1
J3: CMP AL,4EH
JNZ KKK3
CALL GR2
KKK3:
CMP AL,20H
JNE JX2
CALL BROKEN
JX2: CALL CARGANUP2
CALL WRITE1
MOV AH,01H
INT 16H
JE JXX
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H1
CMP AL,4DH
JNZ J4
CALL GR1
J4: CMP AL,4EH
JNZ KKK4
CALL GR2
KKK4:
CMP AL,20H
JNE JXX
CALL BROKEN
JXX: CMP COUNT_TIME,450D
JL L0
CLI
MOV DX,208H
IN AL,DX
MOV AH,AL
AND AL,0F0H
CMP AL,0F0H
JE L0
MOV AL,AH
AND AL,0FH
CMP AL,0FH
JNE L0
CALL MIE3
CALL DENG2
MOV COUNT_TIME,0D
LEA SI,FREQ3
LEA BP,TIME3
MUSIC3: MOV DI,[SI]
CMP DI,0
JZ QQ2
MOV BX,DS:[BP]
CALL SOUND
ADD SI,2
ADD BP,2
JMP MUSIC3
QQ2: STI
Z_D2: CMP COUNT_TIME,54D
JL Z_D2
CLI
QQ1: JMP L7
H2: JMP END1
L7: MOV AH,01H
INT 16H
JE L90
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H2
CMP AL,4DH
JNZ J5
CALL GR1
J5: CMP AL,4EH
JNZ KKK5
CALL GR2
KKK5:
CMP AL,20H
JNE L90
CALL BROKEN
L90: CALL MIE4
CALL MIE5
CALL DENG1
CALL DENG6
STI
MOV COUNT_TIME,0D
Z_D3: MOV DX,208H
IN AL,DX
AND AL,0F0H
CMP AL,0F0H
JE L13
MOV AH,01H
INT 16H
JE JX4
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H3
CMP AL,4DH
JNZ J6
CALL GR1
J6: CMP AL,4EH
JNZ JX4
CALL GR2
JX4: CALL DAI2
MOV AH,01H
INT 16H
JE JX5
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H2
CMP AL,4DH
JNZ J7
CALL GR1
J7: CMP AL,4EH
JNZ JX5
CALL GR2
JX5: CALL CARZHIXIAN
CALL WRITE3
MOV AH,01H
INT 16H
JE JX6
MOV AH,00H
INT 16H
CMP AL,1BH
JZ H2
CMP AL,4DH
JNZ J8
CALL GR1
J8: CMP AL,4EH
JNZ KKK6
CALL GR2
KKK6: CMP AL,20H
JNE JX6
CALL BROKEN
JX6: STI
CMP COUNT_TIME,450D
JL Z_D3
JMP L113
CLI
L13: JMP L113
H3: JMP END1
L113: CALL MIE6
CALL DENG5
STI
MOV COUNT_TIME,0D
LEA SI,FREQ4
LEA BP,TIME4
MUSIC4: MOV DI,[SI]
CMP DI,0
JZ SS2
MOV BX,DS:[BP]
CALL SOUND
ADD SI,2
ADD BP, 2
JMP MUSIC4
SS2: MOV AH,01H
INT 16H
JE Z_D4
MOV AH,00H
INT 16H
CMP AL,1BH
JZ END1
CMP AL,4DH
JNZ J9
CALL GR1
J9: CMP AL,4EH
JNZ KKK7
CALL GR2
KKK7: CMP AL,20H
JNE Z_D4
CALL BROKEN
Z_D4:
CMP COUNT_TIME,54D
JL Z_D4
CLI
L16: JMP L0
END1: CALL T_3
MOV AH,00H
INT 16H
LEA SI,FREQ2
LEA BP,TIME2
MUSIC2: MOV DI,[SI]
CMP DI,0
JE END_M
MOV BX,DS:[BP]
CALL SOUND
ADD SI,2
ADD BP,2
MOV AH,01H
INT 16H
JE MUSIC2
END_M: RET
DENG1 PROC NEAR
MOV AH,0CH
MOV DX,LINE1
MOV CX,CORLUM1
MOV SI,OFFSET DENG_8X16DOT
MOV COUNT1,8
RETRY11: MOV COUNT2,2
RETRY12: MOV COUNT3,8
RETRY13: ROL BYTE PTR [SI],1
MOV AL,0
JNC NEXT11
MOV AL,4
NEXT11:PUSH AX
PUSH CX
INT 10H
POP CX
POP AX
INC CX
DEC COUNT3
JNZ RETRY13
INC SI
DEC COUNT2
JNZ RETRY12
INC DX
MOV CX,CORLUM1
DEC COUNT1
JNZ RETRY11
RET
DENG1 ENDP
MIE1 PROC NEAR
MOV AH,0CH
MOV DX,LINE1
MOV CX,CORLUM1
MOV SI,OFFSET DENG_8X16DOT
MOV COUNT1,8
RETRY14:MOV COUNT2,2
RETRY15:MOV COUNT3,8
RETRY16:ROL BYTE PTR [SI],1
MOV AL,0
JNC NEXT12
MOV AL,7
NEXT12:PUSH AX
PUSH CX
INT 10H
POP CX
POP AX
INC CX
DEC COUNT3
JNZ RETRY16
INC SI
DEC COUNT2
JNZ RETRY15
INC DX
MOV CX,CORLUM1
DEC COUNT1
JNZ RETRY14
RET
MIE1 ENDP
DENG2 PROC NEAR
MOV AH,0CH
MOV DX,LINE1
MOV CX,CORLUM2
MOV SI,OFFSET DENG_8X16DOT
MOV COUNT1,8
RETRY21:MOV COUNT2,2
RETRY22:MOV COUNT3,8
RETRY23:ROL BYTE PTR [SI],1
MOV AL,0
JNC NEXT21
MOV AL,14
NEXT21:PUSH AX
PUSH CX
INT 10H
POP CX
POP AX
INC CX
DEC COUNT3
JNZ RETRY23
INC SI
DEC COUNT2
JNZ RETRY22
INC DX
MOV CX,CORLUM2
DEC COUNT1
JNZ RETRY21
RET
DENG2 ENDP
MIE2 PROC NEAR
MOV AH,0CH
MOV DX,LINE1
MOV CX,CORLUM2
MOV SI ,OFFSET DENG_8X16DOT
MOV COUNT1,8
RETRY24:MOV COUNT2,2
RETRY25:MOV COUNT3,8
RETRY26:ROL BYTE PTR [SI],1
MOV AL,0
JNC NEXT22
MOV AL,7
NEXT22: PUSH AX
PUSH CX
INT 10H
POP CX
POP AX
INC CX
DEC COUNT3
JNZ RETRY26
INC SI
DEC COUNT2
JNZ RETRY25
INC DX
MOV CX,CORLUM2
DEC COUNT1
JNZ RETRY24
RET
MIE2 ENDP
DENG3 PROC NEAR
MOV AH,0CH
MOV DX,LINE1
MOV CX,CORLUM3
MOV SI,OFFSET DENG_8X16DOT
MOV COUNT1,8
RETRY34: MOV COUNT2,2
RETRY35: MOV COUNT3,8
RETRY36: ROL BYTE PTR [SI],1
MOV AL,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -