📄 1616.asm
字号:
;===============16×16点阵显示实验================
HROW EQU 8a03h; ;列代码高段(字形)高八位接口地址 273(4)
LROW EQU 8a00h; ;列代码低段(字形)低八位接口地址 273(1)
HLINE EQU 8a02h; ;行扫描高段(字位)高八位接口地址 273(3)
LLINE EQU 8a01h; ;行扫描低段(字位)低八位接口地址 273(2)
ORG 0
LJMP XB13
;点阵扫描子程序
X01A: CLR A ;清列值
MOV 0EH,A ;指向零列
X023: MOV A,0EH ;取列值
CLR C
SUBB A,#16 ;减16(十进制数)
JC X0D2 ;末满16列继续扫描下一列
RET ;本次扫描完毕返回主程序
X0D2: MOV 0F0H,#2
MOV A,0EH
MUL AB ;当前列值与“2”进行十进制调正
MOV 82H,A ;调正结果送数据指针DPTR
MOV 83H,0F0H
LCALL XB1F ;取与当前列对应的扫描代码
MOV 20H,A
LCALL XB4E ;扫描代码送高八位锁存器
MOV A,0EH ;取列值
MOV 0F0H,#2 ;当前列值与“2”进行十进制调正
MUL AB
ADD A,#1 ;调正结果加1送数据指针DPTR
MOV R7,A
CLR A
ADDC A,0F0H
MOV 82H,R7
MOV 83H,A
LCALL XB1F ;取与当前列对应的扫描代码
PUSH DPH ;扫描代码送低八位锁存器
PUSH DPL
MOV DPTR,#LROW
MOVX @DPTR,A
MOV A,#1 ;代码扫描从第一行开始
MOV R6,#0
MOV R0,0EH ;取与当前代码扫描对应的列值
INC R0 ;列指针加1
SJMP X083
X07E: CLR C ;当前代码扫描对应行的查找
RLC A ;行高八位左移一位
XCH A,R6
RLC A ;行低八位带进位左移一位
XCH A,R6
X083: DJNZ R0,X07E ;不为当前代码扫描对应行返上继续调正
MOV DPTR,#HLINE ;当前行码送高八位锁存器
MOVX @DPTR,A
MOV DPTR,#LLINE ;当前行码送低八位锁存器
MOV A,R6
MOVX @DPTR,A
MOV R6,#80H ;当前行锁定显示250u秒
DJNZ R6,$
CLR A ;关闭显示
MOV DPTR,#LLINE
MOVX @DPTR,A ;行高八位锁存器清零
INC DPTR
MOVX @DPTR,A ;行低八位锁存器清零
POP DPL
POP DPH
INC 0EH ;列指针加1
AJMP X023 ;继续下1行
X097: CLR A
MOV DPTR,#LLINE
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
X0A0: CLR A ;清扫描个数寄存器
MOV R5,A ;从第一个开始扫描
X0A2: MOV A,R5 ;取当前扫描个数
CLR C
;确定要显示的汉字个数
SUBB A,#25 ;共扫描25个汉字
JNC X0A0 ;扫描个数满83个返回从第一个开始
MOV A,R5
;确定显示为循环方式(用户可自定义为移位循环方式)
MOV DPTR,#STLS ;指向汉字表首址
MOV 0F0H,#20H ;设定以完整的一个汉字为最小循环单位
MUL AB
ADD A,dpl
MOV 0ah,A
MOV A,dph
ADDC A,0F0H
MOV 09H,A
CLR A
MOV R4,A
X0BD: MOV A,R4
CLR C
SUBB A,#64H ;每个汉字扫描64次
JNC X0CF ;当前汉字扫描次数满64次转
MOV R2,09H
MOV R1,0AH
ACALL X01A
INC R4 ;扫描次数加1
SJMP X0BD
X0CF: INC R5 ;扫描个数加1指向下一个汉字
SJMP X0A2
;汉字代码表
STLS: db 00H,80H,00H,80H,0FCH,80H,04H,0FCH ;欢
db 45H,04H,46H,48H,28H,40H,28H,40H
db 10H,40H,28H,40H,24H,0A0H,44H,0A0H
db 81H,10H,01H,08H,02H,0EH,0CH,04H
db 00H,00H,41H,84H,26H,7EH,14H,44H ;迎
db 04H,44H,04H,44H,0F4H,44H,14H,0C4H
db 15H,44H,16H,54H,14H,48H,10H,40H
db 10H,40H,28H,46H,47H,0FCH,00H,00H
db 00H,40H,42H,40H,32H,48H,13H,0FCH ;选
db 02H,40H,04H,44H,0F7H,0FEH,10H,0A0H
db 10H,0A0H,10H,0A0H,11H,22H,11H,22H
db 12H,1EH,2CH,00H,44H,06H,03H,0FCH
db 00H,08H,3FH,0FCH,21H,08H,21H,08H ;用
db 21H,08H,3FH,0F8H,21H,08H,21H,08H
db 21H,08H,3FH,0F8H,21H,08H,21H,08H
db 21H,08H,41H,08H,41H,28H,80H,10H
db 01H,00H,00H,84H,1FH,0FEH,10H,04H ;启
db 10H,04H,10H,04H,1FH,0FCH,10H,00H
db 10H,04H,1FH,0FEH,18H,04H,28H,04H
db 28H,04H,48H,04H,8FH,0FCH,08H,04H
db 02H,00H,02H,00H,02H,04H,0FFH,0FEH ;东
db 04H,00H,09H,00H,09H,00H,11H,10H
db 3FH,0F8H,01H,00H,09H,40H,09H,20H
db 11H,10H,21H,18H,45H,08H,02H,00H
db 00H,80H,40H,80H,20H,80H,20H,80H ;达
db 00H,88H,0FH,0FCH,0E0H,80H,21H,00H
db 21H,40H,22H,20H,22H,10H,24H,18H
db 28H,08H,50H,06H,8FH,0FCH,00H,00H
db 00H,78H,3FH,80H,11H,10H,09H,20H ;爱
db 7FH,0FEH,42H,02H,82H,04H,7FH,0F8H
db 04H,00H,07H,0F0H,0AH,20H,09H,40H
db 10H,80H,11H,60H,22H,1CH,0CH,08H
db 00H,08H,3FH,0FCH,21H,08H,21H,08H ;思
db 21H,08H,3FH,0F8H,21H,08H,21H,08H
db 21H,08H,3FH,0F8H,20H,08H,02H,00H
db 51H,88H,50H,96H,90H,12H,0FH,0F0H
db 00H,40H,20H,40H,10H,40H,10H,40H ;计
db 00H,40H,00H,44H,0F7H,0FEH,10H,40H
db 10H,40H,10H,40H,10H,40H,12H,40H
db 14H,40H,18H,40H,10H,40H,00H,40H
db 20H,80H,3EH,0FCH,49H,20H,9FH,0F0H ;算
db 10H,10H,1FH,0F0H,10H,10H,1FH,0F0H
db 10H,10H,1FH,0F0H,08H,24H,0FFH,0FEH
db 08H,20H,08H,20H,10H,20H,20H,20H
db 10H,00H,10H,10H,11H,0F8H,11H,10H ;机
db 0FDH,10H,11H,10H,31H,10H,39H,10H
db 55H,10H,51H,10H,91H,10H,11H,10H
db 11H,12H,12H,12H,14H,0EH,18H,00H
db 02H,00H,02H,04H,0FFH,0FEH,04H,00H ;有
db 04H,10H,0FH,0F8H,08H,10H,18H,10H
db 2FH,0F0H,48H,10H,88H,10H,0FH,0F0H
db 08H,10H,08H,10H,08H,50H,08H,20H
db 00H,08H,7DH,0FCH,45H,08H,49H,08H ;限
db 49H,0F8H,51H,08H,49H,08H,49H,0F8H
db 45H,04H,45H,88H,45H,50H,69H,20H
db 51H,10H,41H,4EH,41H,84H,41H,00H
db 00H,00H,00H,80H,04H,80H,04H,40H ;公
db 08H,40H,08H,20H,11H,10H,21H,0EH
db 0C2H,04H,02H,00H,04H,00H,08H,40H
db 10H,20H,1FH,0F0H,00H,10H,00H,00H
db 00H,08H,3FH,0FCH,00H,08H,00H,48H ;司
db 0FFH,0E8H,00H,08H,00H,88H,3FH,0C8H
db 20H,88H,20H,88H,20H,88H,20H,88H
db 3FH,88H,20H,88H,00H,28H,00H,10H
db 00H,00H,7FH,0E0H,20H,10H,20H,08H ;D
db 20H,08H,20H,08H,20H,08H,20H,08H
db 20H,08H,20H,08H,20H,10H,7FH,0E0H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H ;a
db 00H,00H,0FH,80H,10H,40H,00H,40H
db 0FH,0C0H,10H,40H,10H,50H,0FH,0A0H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,01H,00H,01H,00H,00H,00H ;i
db 01H,00H,01H,00H,01H,00H,01H,00H
db 01H,00H,01H,00H,01H,00H,01H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,00H,00H,00H,00H,00H,00H,00H ;s
db 00H,00H,07H,80H,08H,40H,08H,00H
db 07H,80H,00H,40H,08H,40H,07H,80H
db 00H,00H,00H,00H,00H,00H,00H,00H
db 00H,38H,7FH,0C0H,04H,00H,04H,10H ;系
db 08H,20H,3FH,0C0H,01H,00H,02H,20H
db 04H,10H,3FH,0F8H,01H,08H,09H,20H
db 09H,10H,11H,08H,25H,08H,02H,00H
db 01H,04H,7FH,84H,10H,24H,10H,24H ;列
db 1FH,24H,21H,24H,21H,24H,52H,24H
db 8AH,24H,04H,24H,04H,24H,08H,24H
db 10H,04H,20H,04H,40H,14H,00H,08H
db 02H,00H,01H,00H,01H,08H,7FH,0FCH ;产
db 08H,10H,04H,20H,04H,48H,1FH,0FCH
db 10H,00H,10H,00H,10H,00H,10H,00H
db 20H,00H,20H,00H,40H,00H,80H,00H
db 00H,10H,1FH,0F8H,10H,10H,10H,10H ;品
db 10H,10H,1FH,0F0H,10H,10H,02H,04H
db 7FH,0FEH,42H,84H,42H,84H,42H,84H
db 42H,84H,42H,84H,7EH,0FCH,42H,84H
db 00H,00H,00H,00H,00H,00H,00H,00H ;!
db 10H,00H,10H,00H,10H,00H,10H,00H
db 10H,00H,10H,00H,10H,00H,10H,00H
db 10H,00H,00H,00H,10H,00H,00H,00H
XB13: MOV R0,#7FH
CLR A
XB16: MOV @R0,A
DJNZ R0,XB16
MOV 81H,#20H
JMP X097
;查找与当前列对应的汉字代码子程序
XB1F: MOV A,82H ;本次扫描首址与当前列值相加
ADD A,R1 ;低八位相加
MOV 82H,A ;送DPL
MOV A,83H ;高八位相加
ADDC A,R2 ;再加低八位进位位CY
MOV 83H,A ;送DPH
CLR A
MOVC A,@A+DPTR ;取汉字代码
RET ;返回
XB4E: MOV C,07H
MOV ACC.0,C
MOV C,06H
MOV ACC.1,C
MOV C,05H
MOV ACC.2,C
MOV C,04H
MOV ACC.3,C
MOV C,03H
MOV ACC.4,C
MOV C,02H
MOV ACC.5,C
MOV C,01H
MOV ACC.6,C
MOV C,00H
MOV ACC.7,C
PUSH DPH
PUSH DPL
MOV DPTR,#HROW
MOVX @DPTR,A
POP DPL
POP DPH
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -