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

📄 scan.asm

📁 使用汇编语言进行编程
💻 ASM
字号:
DATAS SEGMENT
    BUF DB ?
DATAS ENDS

STACKS SEGMENT
       DW 256 DUP(?)
TOP    LABEL WORD 
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,OFFSET TOP
    
    
    MOV DX,0EE03H
    MOV AL,10000010B                ;初始8255,a出b入
    OUT DX,AL
    MOV BH,4                        ;置行数
    MOV CL,4                        ;置列数
    MOV BL,0FFH                     ;置键值初值为-1
DO1:
    MOV DX,0EE00H
    MOV AL,0
    OUT DX,AL                       ;置行线为0
    MOV DX,0EE01H
    IN  AL,DX                       ;读列线
    CMP AL,0FFH
    JZ  NONE                        ;无键值
    MOV DX,0EE00H
    MOV AL,11111110B                
    OUT DX,AL                       ;置行值为1110
    MOV CH,AL
DO2:
    MOV AL,CH
    MOV DX,0EE00H
    OUT DX,AL
    MOV DX,0EE01H
    IN  AL,DX                       ;读列值
    CMP AL,0FFH
    JNZ YOU                         ;不为零则有按键
    ADD BL,CL                       ;键值加4
    ROL CH,1                        ;否则改变行号
    DEC BH
    JNZ DO2                         ;再一次     
    JMP NONE
YOU:
    CALL FAR PTR DISPLAY                ;调用display,消抖
DO3:
    MOV AH,AL
    MOV DX,0EE01H
    IN  AL,DX                       ;读列值
    CMP AL,0FFH
    JNZ DO3                         ;不为零则说明未放手
    CALL FAR PTR DISPLAY                ;调用display,消抖
KEY:
    INC BL
    ROR AH,1
    JC  KEY                         ;计算键值
    MOV BUF,BL 
    CMP BL,0H
    JB NONE
    CMP BL,9H
    JBE N1
    CMP BL,0AH
    JZ N2          
    CMP BL,0BE
    JZ N2
    CMP BL,0CH
    JZ N3
    CMP BL,0DH
    JZ N2
    CMP BL,0EH
    JZ N4                              ;将键值存入buf中
    CMP BL,0FH                                 ;JMP DONE  
    JZ N5
    CMP BL,OFH
    JA NONE
    
N1:ADD BUF,3OH
   JMP DONE 
N2:ADD BUF,20H
   JMP DONE
N3:ADD BUF,23H
   JMP DONE
N4:ADD BUF,4FH
   JMP DONE
N5:ADD BUF,2EH
   JMP DONE 

NONE:
    MOV BL,0FFH
    MOV BUF,BL

DONE:
    MOV AH,02H
    MOV DL,0DH
    INT 21H                           ;回车
                                  ;ADD BUF,30H
    MOV AL,BUF
    MOV AH,02H
    MOV DL,AL
    INT 21H                       ;显示buf中的内容
    MOV AH,4CH
    INT 21H
CODES ENDS  
CODE1 SEGMENT 
	ASSUME CS:CODE1
DISPLAY PROC FAR
     PUSH BX
     PUSH CX
DELAY:
     MOV BX,1000
AGAIND:
     MOV CX,65000
 DLP:
     LOOP DLP
     DEC BX
     CMP BX,0
     JNZ AGAIND                  ;延时段
     POP BX
     POP CX
     RET
DISPLAY ENDP
CODE1 ENDS      
    END MAIN

⌨️ 快捷键说明

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