📄 新建 文本文档.txt
字号:
CSLED EQU 200H ;LED输出端口
CSC1 EQU CSLED ;列1~8 273 左半屏
CSC2 EQU CSLED+1H ;列9~16 273 右半屏
CSR1 EQU CSLED+2H ;行1~8 374 上半屏
CSR2 EQU CSLED+3H ;行9~16 374 下半屏
Z8279 EQU 239H ;控口
D8279 EQU 238H ;数口
LEDFEQ EQU 99H ;扫描频率
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
data segment ;定义数据段
fade dw ? ;一个字显示停留多长时间
shift dw ? ;每个字地址相对基地址的偏移量
shift2 dw ?
shift3 dw ?
shift4 dw ?
base dw ? ;每个汉字的地址
key db ?
data ends
stack segment
sta dw 50 dup(?)
top equ length sta
stack ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
push cs
pop ds
;;;;;;;;;;;8279(按键检测)主程序
MOV DX,Z8279
MOV AL,0D1H
OUT DX,AL ;清FIFO寄存器
MOV AL,LEDFEQ
OUT DX,AL
WAIIT:
MOV DX,Z8279
NOP
NOP
nop
IN AL,DX ;从控口读数据
AND AL,0FH
JZ WAIIT ;无键按下则等待
MOV AL,0fH ;写 读FIFO RAM命令字
OUT DX,AL
MOV DX,D8279 ;读入FIFO RAM内容
IN AL,DX
NOP
LEA BX,LED
XLAT
MOV DX,D8279
OUT DX,AL ;将AL中内容写到数码管上
mov key,AL
; 调子程序
cmp key,06H
jne p2
CAll proc1 ;翻屏显示汉字
p2:
cmp key,5BH
jne p3
CALL proc2
p3:
cmp key,4FH
jne p4
CALL proc3
p4:
cmp key,66H
jne p5
CALL proc4
p5:
MOV DX,Z8279 ;清FIFO RAM寄存器
MOV AL,0C3H
OUT DX,AL
CALL DELAY
JMP WAIIT ;等待下一次键输入
LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DB 5EH,79H,71H
;-----------------------------Proc1-BEGIN----------------------------------
proc1 proc NEAR
mov shift,0 ;变量初始化必须放在push cs与pop ds之后才有效
redo:
mov fade,01FFh
MOV AL,00H ;关闭列
MOV DX,CSC1
OUT DX,AL
MOV DX,CSC2
OUT DX,AL
MOV AL,0FFH ;关闭行
MOV DX,CSR1
OUT DX,AL
MOV DX,CSR2
OUT DX,AL
D:
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ
Add bx,Shift
mov base,bx
MOV SI,base ;此处设定所要显示的字符
DISP1_1:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC1
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP1_1
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ
Add bx,Shift
mov base,bx
add base,16
MOV SI,base ;此处设定所要显示的字符
DISP1_2:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC2
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP1_2
dec fade
jz out1
JMP D
out1:
add shift,32
cmp shift,352
jne not64
mov shift,0
jmp end_p1
not64:
jmp redo
end_p1:
RET
proc1 ENDP
;-----------------------------Proc2-BEGIN----------------------------------
proc2 proc NEAR
mov shift2,0 ;变量初始化必须放在push cs与pop ds之后才有效
redo2:
mov fade,01FFh
MOV AL,00H ;关闭列
MOV DX,CSC1
OUT DX,AL
MOV DX,CSC2
OUT DX,AL
MOV AL,0FFH ;关闭行
MOV DX,CSR1
OUT DX,AL
MOV DX,CSR2
OUT DX,AL
D2:
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ2
Add bx,Shift2
mov base,bx
MOV SI,base ;此处设定所要显示的字符
DISP2_1:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC1
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP2_1
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ2
Add bx,Shift2
mov base,bx
add base,16
MOV SI,base ;此处设定所要显示的字符
DISP2_2:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC2
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP2_2
dec fade
jz out2
JMP D2
out2:
add shift2,32
cmp shift2,128
jne not128
mov shift2,0
jmp end_p2
not128:
jmp redo2
end_p2:
RET
proc2 ENDP
;-----------------------------Proc3-BEGIN----------------------------------
proc3 proc NEAR
mov shift3,0 ;变量初始化必须放在push cs与pop ds之后才有效
redo3:
mov fade,01FFh
MOV AL,00H ;关闭列
MOV DX,CSC1
OUT DX,AL
MOV DX,CSC2
OUT DX,AL
MOV AL,0FFH ;关闭行
MOV DX,CSR1
OUT DX,AL
MOV DX,CSR2
OUT DX,AL
D3:
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ3
Add bx,Shift3
mov base,bx
MOV SI,base ;此处设定所要显示的字符
DISP3_1:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC1
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP3_1
MOV CX,08H
MOV AH,01H ;每次为单行扫描
lea bx,HZ3
Add bx,Shift3
mov base,bx
add base,16
MOV SI,base ;此处设定所要显示的字符
DISP3_2:
MOV AL,[SI]
not al
MOV DX,CSR1
OUT DX,AL
INC SI
MOV AL,[SI]
not al
MOV DX,CSR2
OUT DX,AL
MOV DX,CSC2
MOV AL,AH
OUT DX,AL
SHL AH,1
INC SI
CALL DELAY
MOV AL,00H ;在设置下一列值之前关闭行扫描,以消除扫描之间的闪烁
OUT DX,AL
LOOP DISP3_2
dec fade
jz out3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -