📄 lcd.a51
字号:
MOV COOE,#08H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV O_XL,#16H ;屏
MOV O_YL,#8FH
MOV COOE,#09H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV TOTAL,#32D
MOV WIDTH,#2D
MOV HEIGH,#16D
MOV LAYER,#40H
MOV O_XL,#06H ;欢
MOV O_YL,#0cFH
MOV COOE,#00H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#08H ;迎
MOV O_YL,#0cFH
MOV COOE,#01H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#0AH ;您
MOV O_YL,#0cFH
MOV COOE,#02H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#0CH ;的
MOV O_YL,#0cFH
MOV COOE,#03H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#0EH ;光
MOV O_YL,#0cFH
MOV COOE,#04H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#10H ;临
MOV O_YL,#0cFH
MOV COOE,#05H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV O_XL,#16H ;竭
MOV O_YL,#0cFH
MOV COOE,#06H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#18H ;诚
MOV O_YL,#0cFH
MOV COOE,#07H
MOV DPTR,#CHARTAB3
LCALL CCW2_PR
MOV O_XL,#1AH ;为
MOV O_YL,#0cFH
MOV COOE,#08H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV O_XL,#1CH ;您
MOV O_YL,#0cFH
MOV COOE,#02H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV O_XL,#1EH ;服
MOV O_YL,#0cFH
MOV COOE,#09H
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
MOV O_XL,#20H ;务
MOV O_YL,#0cFH
MOV COOE,#0AH
MOV DPTR,#CHARTAB2
LCALL CCW2_PR
sjmp $
;--------延时子程序--------------------------
DELAY: MOV R2,#01H ; 延时子程序
MOV R3,#01H
DEL1: NOP
DJNZ R3,DEL1
DJNZ R2,DEL1
RET
; 写指令代码子程序
PR1: PUSH DPL
PUSH DPH
MOV DPTR,#CWADD1
MOV A,COM
MOVX @DPTR,A
POP DPH
POP DPL
RET
;---------------------------
; 写参数及显示数据子程序
PR2: PUSH DPL
PUSH DPH
MOV DPTR,#DWADD1
MOV A,DAT1
MOVX @DPTR,A
POP DPH
POP DPL
RET
;---------------------------
; 读参数及显示数据子程序
PR3: PUSH DPL
PUSH DPH
MOV DPTR,#DRADD1
MOVX A,@DPTR
MOV DAT1,A
POP DPH
POP DPL
RET
;=====================================
; 初始化子程序INT
; 内部调用子程序:PR1,PR2
; 程序调用入口:INT
; 程序参数库:SYSTAB,SCRTAB
; 程序调用变量:无
;=====================================
INT: MOV COM,#40H ; SYSTEM SET 代码
LCALL PR1 ; 写入指令代码
MOV COUNT1,#00H ; 设置计数器COUNT=0
INT3: MOV DPTR,#SYSTAB ; 设置指令参数表地址
MOV A,COUNT1 ; 取参数
MOVC A,@A+DPTR
MOV DAT1,A
LCALL PR2 ; 写入参数
INC COUNT1 ; 计数器加一
MOV A,COUNT1
CJNE A,#08H,INT3 ; 循环
MOV COM,#44H ; SCROLL 代码
LCALL PR1 ; 写入指令代码
MOV COUNT1,#00H ; 设置计数器COUNT=0
INT2: MOV DPTR,#SCRTAB ; 设置指令参数表地址
MOV A,COUNT1 ; 取参数
MOVC A,@A+DPTR
MOV DAT1,A
LCALL PR2 ; 写入参数
INC COUNT1
MOV A,COUNT1 ; 计数器加一
CJNE A,#0AH,INT2 ; 循环
MOV COM,#5AH ; HDOT SCR 代码
LCALL PR1 ; 写入指令代码
MOV DAT1,#07H ; 设置参数P1
LCALL PR2 ; 写入参数
MOV COM,#5BH ; OVLAY 代码
LCALL PR1 ; 写入指令代码
MOV DAT1,#10H ; 设置参数:显示一,三区为文本属性
LCALL PR2 ; 三重"或"合成
MOV COM,#59H ; DISP ON/OFF 代码
LCALL PR1 ; 写入指令代码
MOV DAT1,#0a4H ; 设置参数:显示一~四区开显示0101 0100
LCALL PR2 ; 光标关显示
RET
;=====================================================
; 显示字符子程序
; 参数:TOTAL,WIDTH,HEIGH, O_XL,O_YL,LAYER
;=====================================================
CCW2_PR:MOV A,COOE ; 计算汉字字模数据首地址
MOV B,TOTAL
MUL AB
ADD A,DPL
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
MOV TEMP1,DPL
MOV TEMP2,DPH
MOV A,O_YL ; 计算光标地址
MOV B,#PARA1 ; PARA1值等于SYSTEM SET 指令P9
MUL AB ; 而P10=0
ADD A,O_XL
MOV O_XL,A ; 存光标地址低字节
MOV A,B
ADDC A,LAYER ; 加入显示二区起始地址SAD2H
MOV O_YL,A ; 存光标地址高字节
MOV COM,#4FH ; CSRDIR 代码(右移)
LCALL PR1
MOV COUNT1,WIDTH ; 设置计数器1=2
CCW2_1: MOV COM,#46H ; CSRW 代码
LCALL PR1
MOV DAT1,O_XL ; 设置光标地址CSR
LCALL PR2
MOV DAT1,O_YL
LCALL PR2
MOV COM,#42H ; MWRITE 代码
LCALL PR1
MOV COUNT2,HEIGH ; 设置计数器2=16
CCW2_2: CLR A
MOVC A,@A+DPTR ; 取字模数据
MOV DAT1,A
INC DPTR ; 指针加一
MOV A,WIDTH
CJNE A,#4D,AAA
INC DPTR
INC DPTR
INC DPTR
AJMP AA
AAA: CJNE A,#2D,AA
INC DPTR
AA: LCALL PR2 ; 写入数据
DJNZ COUNT2,CCW2_2 ; 循环
MOV A,O_XL ; 修正光标地址
ADD A,#01H ; (加一)
MOV O_XL,A
MOV A,O_YL
ADDC A,#00H
MOV O_YL,A
MOV DPL,TEMP1
MOV DPH,TEMP2
INC DPTR
MOV TEMP1,DPL
MOV TEMP2,DPH
DJNZ COUNT1,CCW2_1 ; 循环
RET
;====================================
; 清显示RAM 区(清屏)子程序CLEAR
; 占用内部寄存器:COM,DAT1,A,R3,R4
; 内部调用子程序:PR1,PR2
; 程序输入变量:无
; 程序调用入口:CLEAR
;====================================
CLEAR: MOV COM,#4CH ; CSRDIR 代码
LCALL PR1 ; 写入指令代码
MOV COM,#46H ; CSRW 代码
LCALL PR1 ; 写入指令代码
MOV DAT1,#00H ; 设置参数光标指针低8位
LCALL PR2 ; 写入参数CSRL
LCALL PR2 ; 写入参数CSRH
MOV COM,#42H ; MWRITE 代码
LCALL PR1 ; 写入指令代码
MOV R3,#00H ; 设置循环量0000H
MOV R4,#00H
MOV DAT1,#00H ; 设置显示数据=0
CLR1:
LCALL PR2 ; 写入数据
DJNZ R3,CLR1 ; 循环
DJNZ R4,CLR1
RET
;==============================================================================================
SYSTAB: DB 30H,87H,07H,29H,42H,0FFH,30H,00H ; P1-P8参数
SCRTAB: DB 00H,00H,0F0H,00H,40H,0F0H,00H,80H,00H,00H ; P1-P10参数
CHARTAB1:
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x60,0x00 ;北
DB 0x00,0x00,0x60,0x00,0x00,0x00,0xE0,0x00,0x00,0x60,0xE0,0x00,0x00,0xE0,0xE0,0x00
DB 0x00,0xE0,0xC0,0x00,0x00,0xC0,0xC0,0x00,0x00,0xC0,0xC1,0x00,0x00,0xC1,0xC3,0x00
DB 0x20,0xC1,0xCF,0x80,0x3C,0xC1,0xFF,0x00,0x3E,0xC1,0xFC,0x00,0x3F,0xC1,0xF8,0x00
DB 0x1F,0xC1,0x90,0x10,0x00,0xC1,0x80,0x18,0x00,0xC1,0x80,0x18,0x00,0xE1,0x80,0x18
DB 0x01,0xE1,0x80,0x18,0x03,0xC0,0x80,0x18,0x07,0xC0,0xC0,0x3C,0x1F,0x00,0xE0,0x3C
DB 0x3E,0x00,0x7F,0xFC,0x7C,0x00,0x7F,0xFC,0x38,0x00,0x3F,0xFC,0x10,0x00,0x3F,0xF8
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00 ;京
DB 0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x01,0x80,0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -