⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trafficlight.asm

📁 在PC机上
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.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 + -