📄 ccwpr.asm
字号:
; 汉字写入子程序(图形方式)CCW_PR
; 占用内部资源:O_XL,O_YL,COUNT1,CODE,A,B,DPTR
; 内部调用子程序:PR1,PR2
; 连接字库: CCTAB
; 程序调用入口: CCW_PR
; 程序输入变量: O_XL,O_YL,CODE
CCW_PR: MOV A,CODE ; 计算汉字字模的首地址
MOV DPTR,#CCTAB ; 设置汉字库的首地址
MOV B,#20H ; 一个汉字占32个字节
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV A,O_YL ; 取行坐标地址
MOV B,#PARA1 ; 设置显示域宽度
MUL AB ; 计算光标指针地址
ADD A,O_XL ; 加列坐标地址
MOV O_XL,A ; 地址低8位暂存O_XL
MOV A,B
ADDC A,#00H
MOV O_YL,A ; 地址高8位暂存O_YL
MOV COUNT1,#00H ; 计数器清零
CCW_1: MOV COM,#0AH ; 设置光标地址
LCALL PR1
MOV DAT1,O_XL
LCALL PR2
MOV COM,#0BH
LCALL PR1
MOV DAT1,O_YL
LCALL PR2
MOV COM,#0CH ; 写数据指令代码
LCALL PR1
MOV A,COUNT1
MOVC A,@A+DPTR ; 取汉字左半部字模数据
MOV DAT1,A ; 写入字模数据
LCALL CONVERT ; 调字模结构转换子程序
LCALL PR2 ; 写入字模数据
MOV A,COUNT1
ADD A,#10H ; 修改间址参数
MOVC A,@A+DPTR ; 取汉字右半部字模数据
MOV DAT1,A ; 写入字模数据
LCALL CONVERT ; 调字模结构转换子程序
LCALL PR2 ; 写入字模数据
MOV A,O_XL ; 修正光标指针地址
ADD A,#PARA1 ; 加显示域宽度
MOV O_XL,A
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
INC COUNT1 ; 计数器加一
MOV A,COUNT1
CJNE A,#10H,CCW_1 ; 循环
RET
; 汉字字模结构转换子程序
CONVERT:MOV A,COUNT1 ; 暂存COUNT1计数器
PUSH ACC
MOV COUNT1,#08H ; 借用COUNT1作为计数器
MOV A,DAT1 ; 取数据
MOV DAT1,#00H ; DAT1清零作为新数据
CONVER1:RRC A ; ACC.0→C
XCH A,DAT1 ; 新旧数据交换
RLC A ; C→ACC.0
XCH A,DAT1 ; 新旧数据交换
DJNZ COUNT1,CONVER1 ; 循环
POP ACC ; 恢复COUNT1
MOV COUNT1,A
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -