📄 sy3-3.asm
字号:
; 实验三:键盘实验
; SY3-3.ASM
PA55 EQU 280H
PB55 EQU 281H
PC55 EQU 282H
P55CTL EQU 283H
DATE SEGMENT
R2 DB ?
R4 DB ?
TABLE DB 0EEH,0DEH,0BEH,07EH,0EDH,0DDH,0BDH,07DH
DB 0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H,077H
MES DB 'Press any key on the small keyboard!',0DH,0AH
DB 'It will be display on the LED !',0DH,0AH
DB 'Press any key quit to DOS !',0dh,0ah,'$'
DCTBL DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
KEYC DB ?
KEYR DB ?
KEYLS DB ?
NUM DW ?
DATE ENDS
STAC SEGMENT
STA DW 32 DUP(?)
TOP EQU LENGTH STA
STAC ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATE,SS:STAC
START: MOV AX,DATE
MOV DS,AX
MOV DX,OFFSET MES
MOV AH,09
INT 21H
LOP1: CALL TESTKEY
CALL DISP
MOV DL,0FFH
MOV AH,06H
INT 21H
JZ LOP1
MOV AX,4C00H
INT 21H
RET
MAIN ENDP
TESTKEY PROC NEAR
KEY0: MOV AL,93H
MOV DX,P55CTL
OUT DX,AL
WAIT1: MOV AL,00
MOV DX,PC55
OUT DX,AL
MOV DX,PC55
IN AL,DX
AND AL,0F0H
CMP AL,0F0H
JE WAIT1
CALL DELAY1
MOV DX,PC55
IN AL,DX
MOV KEYC,AL
AND AL,0F0H
CMP AL,0F0H
JE WAIT1
KEY1: MOV AL,9aH
MOV DX,P55CTL
OUT DX,AL
WAIT2: MOV AL,00
MOV DX,PC55
OUT DX,AL
MOV DX,PC55
IN AL,DX
AND AL,0FH
CMP AL,0FH
JE WAIT2
CALL DELAY1
MOV DX,PC55
IN AL,DX
MOV KEYR,AL
AND AL,0FH
CMP AL,0FH
JE WAIT2
KEY3: MOV AL,KEYC
OR AL,KEYR
MOV KEYLS,AL
MOV SI,OFFSET TABLE
MOV CX,16
MOV DL,00H
KEY4: CMP AL,[SI]
JZ KEY5
DEC CX
JZ KEYEND
ADD SI,1
INC DL
JMP KEY4
KEY5: NOP
MOV AL,DL
MOV CL,04H
SHL AL,CL
OR AL,DL
MOV AH,00H
MOV NUM,AX
KEYEND: NOP
RET
TESTKEY ENDP
DISP PROC NEAR
PUSH DS
PUSH CX
PUSH AX
DISP0: MOV CX,NUM
MOV AX,CX
AND AL,0FH
MOV AH,AL
MOV AL,CL
MOV CL,04H
SHR AL,CL
MOV CH,AL
MOV CL,AH
DISPL: mov dx,288h
mov al,02h
out dx,al
mov dx,284h
mov al,cl
mov ah,0
lea bx,dctbl
mov si,ax
mov al,[bx+si]
out dx,al
CALL DELAY1
DISPH: mov dx,288h
mov al,01h
out dx,al
mov dx,284h
mov al,ch
mov ah,0
lea bx,dctbl
mov si,ax
mov al,[si+bx]
out dx,al
CALL DELAY1
POP AX
POP CX
POP DS
RET
DISP ENDP
DELAY1 PROC NEAR
PUSH CX
MOV CX,0F00H
LOOP $
POP CX
RET
DELAY1 ENDP
DELAY2 PROC NEAR
PUSH AX
PUSH CX
MOV CX,030H
DL21: CALL DELAY1
LOOP DL21
POP CX
POP AX
RET
DELAY2 ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -