📄 eyelcd9.asm
字号:
MOV R3,#00H ; 设置循环量(8K字节)
MOV R4,#20H
MOV COM,#0B0H ; 设置自动写方式
LCALL PR12
CLEAR1: LCALL ST3 ; 判状态位S2
MOV A,#00H ; 置数据"0"
LCALL PR2 ; 写入数据
DJNZ R3,CLEAR1 ; 循环
DJNZ R4,CLEAR1
MOV COM,#0B2H ; 设置自动写结束指令
LCALL PR12
RET
; 汉字写入子程序(文本方式)
; 在文本方式下显示汉字, 首先要建立汉字CGRAM,要定义汉字代码.
; 在文本方式下写汉字需要写入4 个代码以组成一个汉字
; 占用内部寄存器:O_XL,O_YL,CODE1,A,B
; 内部调用子程序:PR1
; 连接字库: CGRAM
; 程序调用入口: CCW1_PR
; 程序输入变量: O_XL,O_YL,CODE1
CCW1_PR: MOV A,O_YL ; 计算显示RAM地址
MOV B,#PARA1
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV DAT1,A
MOV A,B
ADDC A,#00H ; 文本显示区首地址为0000H
MOV O_YL,A
MOV DAT2,A ; 设置显示RAM地址
MOV COM,#24H
LCALL PR1
MOV A,CODE1 ; 取汉字代码
MOV DAT2,A ; 写入左上半部汉字代码
MOV COM,#0C0H
LCALL PR11
MOV A,CODE1
ADD A,#02H
MOV DAT2,A ; 写入右上半部汉字代码
LCALL PR11
MOV A,#PARA1 ; 显示RAM地址修正
ADD A,O_XL
MOV DAT1,A
CLR A
ADDC A,O_YL
MOV DAT2,A
MOV COM,#24H ; 设置显示RAM地址
LCALL PR1
MOV A,CODE1
INC A
MOV DAT2,A ; 写入左下半部汉字代码
MOV COM,#0C0H
LCALL PR11
MOV A,CODE1
ADD A,#03H
MOV DAT2,A ; 写入右下半部汉字代码
LCALL PR11
RET
; 汉字写入子程序(图形方式)CCW2_PR
; 占用内部资源:O_XL,O_YL,CODE1,COUNT1,A,B,DPTR
; 内部调用子程序:PR1
; 连接字库: CCTAB
; 程序调用入口: CCW2_PR
; 程序输入变量: O_XL,O_YL,CODE1
CCW2_PR: MOV A,O_YL ; 计算图形显示RAM地址
MOV B,#PARA1 ; 图形显示区宽度PARA1
MUL AB
ADD A,O_XL
MOV O_XL,A
MOV A,B
ADDC A,#08H ; 图形显示区首地址为0800H
MOV O_YL,A
MOV DPTR,#CCTAB ; 计算汉字库字符首地址
MOV A,CODE1
MOV B,#20H
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH DPH ; 存字库地址指针
PUSH DPL
MOV COUNT1,#10H ; 计数器设置为16次
CCW2_PR1:MOV DAT1,O_XL ; 设置显示RAM地址
MOV DAT2,O_YL
MOV COM,#24H
LCALL PR1
POP DPL ; 取字库地址指针
POP DPH
CLR A
MOVC A,@A+DPTR ; 取左部字模数据
MOV DAT2,A ; 设置数据
MOV A,#10H ; 偏置地址为16
MOVC A,@A+DPTR ; 取右部字模数据
MOV DAT1,A ; 暂存数据
INC DPTR ; 字库地址指针加一
PUSH DPH ; 存字库地址指针
PUSH DPL
MOV COM,#0C0H ; 设置一次写数据指令代码
LCALL PR11 ; 写入数据
MOV DAT2,DAT1 ; 设置右部数据
LCALL PR11 ; 写入数据
MOV A,#PARA1 ; 显示RAM地址修正
ADD A,O_XL
MOV O_XL,A
CLR A
ADDC A,O_YL
MOV O_YL,A
DJNZ COUNT1,CCW2_PR1 ; 计数器循环
POP ACC ; 修正栈指针
POP ACC
RET
; 西文字符写入子程序CW1_PR
; 占用内部资源:O_XL,O_YL,CODE1,A,B
; 内部调用子程序:PR1
; 程序调用入口: CW1_PR
; 程序输入变量: O_XL,O_YL,CODE1
CW1_PR: MOV A,O_YL ; 计算文本显示RAM 地址
MOV B,#PARA1 ; 文本显示区宽度为PARA1
MUL AB
ADD A,O_XL
MOV DAT1,A
MOV A,B
ADDC A,#00H
MOV DAT2,A
MOV COM,#24H ; 设置地址指针
LCALL PR1
MOV DAT2,CODE1 ; 写入字符代码
MOV COM,#0C4H
LCALL PR11
RET
; 西文字符写入子程序CW2_PR
; 占用内部资源:O_XL,O_YL,CODE1,ATTR,A,B
; 内部调用子程序:PR1
; 程序调用入口: CW1_PR
; 程序输入变量:O_XL,O_YL,CODE1,ATTR
CW2_PR: MOV A,O_YL ; 计算文本显示RAM 地址
MOV B,#PARA1 ; 文本显示区宽度为PARA1
MUL AB
ADD A,O_XL
MOV DAT1,A
MOV A,B
ADDC A,#00H
MOV DAT2,A
PUSH ACC ; 存地址的高8位
MOV COM,#24H ; 设置地址指针
LCALL PR1
MOV DAT2,CODE1 ; 写入字符代码
MOV COM,#0C4H
LCALL PR11
POP ACC ; 取地址的高8位
ADD A,#08H ; 计算相应的属性区RAM地址
MOV DAT2,A
MOV COM,#24H ; 设置地址指针
LCALL PR1
MOV DAT2,ATTR ; 写入属性参数
MOV COM,#0C4H
LCALL PR11
RET
; 直接访问方式的驱动子程序
; 程序口地址设置CWADD1,DWADD1
; 占用内部资源DAT1,DAT2,A,DPTR
; 程序输入变量: DAT1,DAT2,COM
;===============直接访问方式驱动子程序======================
; 读状态字子程序
PR0: MOV DPTR,#CWADD1 ; 设置指令通道地址
MOVX A,@DPTR
RET
;---------------------------------------------
; 判状态位S1,S0 子程序(读写指令和读写数据状态)
ST01: LCALL PR0
JNB ACC.0,ST01
JNB ACC.1,ST01
RET
;----------------------------------------------
; 判状态位S2子程序(数据自动读状态)
ST2: LCALL PR0
JNB ACC.2,ST2
RET
;----------------------------------------------
; 判状态位S3子程序(数据自动写状态)
ST3: LCALL PR0
JNB ACC.3,ST3
RET
;----------------------------------------------
; 判状态位S6子程序(屏读/屏拷贝状态)
ST6: LCALL PR0
JB ACC.6,ERR
RET
ERR: LJMP ST6 ; 出错处理程序
;======================================
; 写指令和写数据子程序
PR1: LCALL ST01 ; 双字节参数指令写入入口
MOV A,DAT1 ; 取第一参数单元数据
LCALL PR2 ; 写入参数
PR11: LCALL ST01 ; 单字节参数指令写入入口
MOV A,DAT2 ; 取第二参数单元数据
LCALL PR2 ; 写入参数
PR12: LCALL ST01 ; 无参数指令写入入口
MOV A,COM ; 取指令代码单元数据
LJMP PR21 ; 写入指令代码
PR2: MOV DPTR,#DWADD1 ; 设置数据通道地址/数据写入入口
PR21: MOVX @DPTR,A ; 写入操作
RET
;=====================================
; 读数据子程序
PR3: LCALL ST01 ; 判状态位
MOV DPTR,#DWADD1 ; 设置数据通道地址
MOVX A,@DPTR ; 读数据操作
MOV DAT1,A ; 数据存入第二参数/数据单元
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -