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

📄 p3.asm

📁 本设计是用8255实现模拟交通灯的工作 同时以4*4点阵键盘控制其状态
💻 ASM
字号:

;8255交通灯显示实验

;****************根据查看端口资源修改下列符号值*******************
        IOY0  EQU       0C400H      ;片选IOY0对应的端口始地址
;*****************************************************************
    MY8255_A  EQU       IOY0+00H*4  ;8255的A口地址
    MY8255_B  EQU       IOY0+01H*4  ;8255的B口地址
    MY8255_C  EQU       IOY0+02H*4  ;8255的C口地址
 MY8255_MODE  EQU       IOY0+03H*4  ;8255的控制寄存器地址

      STACK1  SEGMENT   STACK
              DW        256 DUP(?)
      STACK1  ENDS

        DATA  SEGMENT
       MESS1  DB        'ENTER ANY KEY TO BEGIN!',0DH,0AH,'$'
       SATA1  DB        'ALL RAD',0AH,0DH,'$'
       SATA2  DB        'N AND S:GREEN,E AND W:RED',0AH,0DH,'$'
       SATA3  DB        'GREEN OFF',0AH,0DH,'$'
       SATA4  DB        'GREEN ON',0AH,0DH,'$'
       SATA5  DB        'N AND S:YELLOW',0AH,0DH,'$'
       SATA6  DB        'N AND S:RED,E AND W:GREEN',0AH,0DH,'$'
       SATA7  DB        'E AND W:YELLOW',0AH,0DH,'$'

        DATA  ENDS

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA

      START:  MOV       AX,DATA
              MOV       DS,AX
              MOV       AH,09H
              LEA       DX,MESS1
              INT       21H

  
              MOV       DX,MY8255_MODE          ;定义8255工作方式
              MOV       AL,81H      ;工作方式0,A口和B口为输出 .c口低四位是输出
              OUT       DX,AL

      BEGIN:                        ; CALL      DIS         ;显示刷新
              CALL      CLEAR       ;清屏
              CALL      CCSCAN      ;扫描按键
              JNZ       H1          ;有键按下则跳置H1
              JMP       BEGIN
         H1:  CALL      LOOP1





        
       QUIT:    MOV  AH,1
                   INT 16H
                   JZ  QUIT
               MOV       AX,4C00H    ;结束程序退出
              INT       21H

      CCSCAN  PROC      NEAR        ;扫描是
              MOV       AL,00H      ;否有按键闭合子程序

              MOV       DX,MY8255_B ;将4列全选通,X1~X4置0
              OUT       DX,AL
              MOV       DX,MY8255_C
              IN        AL,DX       ;读Y1~Y4
              NOT       AL
              AND       AL,0FH      ;取出Y1~Y4的反值 ,延迟20MS
              MOV       CX,16EAH
      DELAY:  LOOP      DELAY

              RET
      CCSCAN  ENDP

       CLEAR  PROC      NEAR        ;清除数码管显示子程序
              MOV       DX,MY8255_A ;段位置0即可清除数码管显示
              MOV       AL,00H
              OUT       DX,AL
              RET
       CLEAR  ENDP


       LOOP1  PROC      NEAR


              MOV       AL,10001000B            ;全红灯
              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA1

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
     
              CALL      DALLY5

      LOOP2:  MOV       AL,01001000B
              OUT       DX,AL       ;南北绿,东西红
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA2

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       DX,MY8255_A

              MOV       BX,200H
             CALL      DLY
               MOV       CX,03H
         D0:  MOV       AL,00001000B            ;绿灯灭

              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA3

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H

              MOV       BX, 20H
              CALL      DLY
            
              MOV       AL,01001000B            ;绿灯亮
              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA4

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX,20H

            CALL      DLY

              LOOP      D0
              MOV       AL,00101000B

              MOV       DX,MY8255_A ;黄灯亮
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA5

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX, 100H
              CALL      DLY
   
    
     
              MOV       AL,10000100B            ;东西绿,南北红

              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA6

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX,200H
              CALL      DLY
            
              MOV       CL,03H
         C0:  MOV       AL,10000000B            ;绿灯灭

              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA3

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX,20H
               CALL      DLY
           

      
              MOV       AL,10000100B            ;绿灯亮

              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA4

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX,20H

             CALL      DLY
            
              LOOP      C0
              MOV       AL,10000010B            ;黄灯亮
     

              MOV       DX,MY8255_A
              OUT       DX,AL
              MOV       AH,09H      ;显示信息
              LEA       DX,SATA7

              INT       21H
              MOV       DL,0DH      ;回车,置光标到行首
              MOV       AH,02H
              INT       21H
              MOV       BX,20H

              CALL      DLY

              PUSH      AX
              PUSH      DX




              CALL      CCSCAN      ;扫描按键
              JNZ       DSS         ;有键按下则跳置DSS



              POP       DX
              POP       AX
              JMP       LOOP2
        DSS:  JMP  QUIT
             RET
       LOOP1  ENDP
   


         DLY  PROC      NEAR
              PUSH      CX
        DDD:  MOV       CX,0FFFFH
        CCC:  LOOP      CCC
              DEC       BX
                PUSH      AX
              PUSH      DX




              CALL      CCSCAN      ;扫描按键
              JNZ       DSS         ;有键按下则跳置DSS



              POP       DX
              POP       AX
              CMP       BX,0
              JNE       DDD
              POP       CX
              RET
         DLY  ENDP
DALLY5 PROC NEAR                   ;软件延时子程序  Y
       PUSH CX
       PUSH AX
       MOV  CX, 1FFFH
D9:    MOV  AX,0FFFFH
D10:    DEC  AX
       JNZ  D10
       LOOP D9
       POP  AX
       POP  CX
       RET
DALLY5  ENDP
        CODE  ENDS
              END       START

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -