📄 b12232.asm
字号:
; “验证式”点阵式LCD液晶显示屏
PD1 EQU 60 ; ;模块参数
COLUMN EQU 30H
PAGE1 EQU 31H ;;页地址寄存器
CODE1 EQU 32H ;;字符代码寄存器
COUNT EQU 33H ;;计数器
COM EQU 20H ;;指令寄存器
DAT EQU 21H ;;数据寄存器
CWADD1 EQU 0fa00H ;;写指令代码地址(E1)
CRADD1 EQU 0fa80H ;;读状态字地址(E1)
DWADD1 EQU 0fa40H ;;写显示数据地址(E1)
DRADD1 EQU 0fac0H ;;读显示数据地址(E1)
CWADD2 EQU 0f800H ;;写指令代码地址(E2)
CRADD2 EQU 0f880H ;;读状态字地址(E2)
DWADD2 EQU 0f840H ;;写显示数据地址(E2)
DRADD2 EQU 0f8c0H ;;读显示数据地址(E2)
ORG 0000H
MOV SP,#60H
LCALL INT ;;调用初始化子程序
LCALL CLEAR ;;调用清屏子程序
MOV PD1,#3DH ;;
MOV PAGE1,#02H ;;页地址寄存器置初值
MOV COLUMN,#0H ;;列地址寄存器置初值
MOV CODE1,#00H ;;字符代码寄存器置初值
LCALL CCW_PR ;;显示“武”
MOV PAGE1,#02H
MOV COLUMN,#0fH
MOV CODE1,#01H
LCALL CCW_PR ;;显示“汉”
MOV PAGE1,#02H
MOV COLUMN,#1eH
MOV CODE1,#02H
LCALL CCW_PR ;;显示“恒”
MOV PAGE1,#2H
MOV COLUMN,#2dH
MOV CODE1,#03H
LCALL CCW_PR ;;显示“科”
MOV PAGE1,#2H
MOV COLUMN,#61
MOV CODE1,#04H
LCALL CCW_PR ;;显示“电”
MOV PAGE1,#2H
MOV COLUMN,#76
MOV CODE1,#05H
LCALL CCW_PR ;;显示“子”
MOV PAGE1,#2H
MOV COLUMN,#91
MOV CODE1,#06H
LCALL CCW_PR ;;显示“教"
MOV PAGE1,#2H
MOV COLUMN,#106
MOV CODE1,#07H
LCALL CCW_PR ;;显示“仪"
MOV PD1,#3DH ;;
MOV PAGE1,#00H ;;页地址寄存器置初值
MOV COLUMN,#0H ;;列地址寄存器置初值
MOV CODE1,#08H ;;字符代码寄存器置初值
LCALL CCW_PR ;;显示“感”
MOV PAGE1,#00H
MOV COLUMN,#0fH
MOV CODE1,#09H
LCALL CCW_PR ;;显示“谢”
MOV PAGE1,#0H
MOV COLUMN,#1eH
MOV CODE1,#0aH
LCALL CCW_PR ;;显示“您”
MOV PAGE1,#0H
MOV COLUMN,#2dH
MOV CODE1,#0bH
LCALL CCW_PR ;;显示“使”
MOV PAGE1,#0H
MOV COLUMN,#61
MOV CODE1,#0cH
LCALL CCW_PR ;;显示“用”
MOV PAGE1,#0H
MOV COLUMN,#76
MOV CODE1,#0dH
LCALL CCW_PR ;;显示“该”
MOV PAGE1,#0H
MOV COLUMN,#91
MOV CODE1,#0eH
LCALL CCW_PR ;;显示“产"
MOV PAGE1,#0H
MOV COLUMN,#106
MOV CODE1,#0fH
LCALL CCW_PR ;;显示“品"
SJMP $
CCW_PR: MOV DPTR,#CCATB ;;确定字符字模块首地址
MOV A,CODE1 ;;取代码
MOV B,#20H ;;字模块宽度为32个字节
MUL AB ;;代码X32
ADD A,DPL ;;字符字模块首地址=字模库首地址+代码X32
MOV DPL,A
MOV A,B
ADDC A,DPH
MOV DPH,A
PUSH COLUMN ;;列地址入栈
PUSH COLUMN ;;列地址入栈
MOV CODE1,#00H ;;代码寄存器借用为间址寄存器
CCW_1: MOV COUNT,#10H ;;计数器设定为16
MOV A,PAGE1 ;;读页地址寄存器
ANL A,#03H
ORL A,#0B8H ;;“或” 页地址设置代码
MOV COM,A ;;写页地址设置指令
LCALL PR0
LCALL PR3
POP COLUMN ;;取列地址值
MOV A,COLUMN ;;读列地址寄存器
CLR C
SUBB A,#PD1 ;;列地址-模块参数
JC CCW_2 ;;<0为左半屏显示区域(E1)
MOV COLUMN,A ;;≥0为右半屏显示区域(E2)
MOV A,PAGE1
SETB ACC.3 ;;设置区域标志位
MOV PAGE1,A ;;“0”为E1,“1”为E2
CCW_2: MOV COM,COLUMN ;;设置列地址值
MOV A,PAGE1 ;;判区域标志以确定设置哪个控制器
JNB ACC.3,CCW_3
LCALL PR3 ;;区域E2
LJMP CCW_4
CCW_3: LCALL PR0 ;;区域E1
CCW_4: MOV A,CODE1 ;;取间址寄存器值
MOVC A,@A+DPTR ;;取汉字字模数据
MOV DAT,A ;;写数据
MOV A,PAGE1
JNB ACC.3,CCW_5
LCALL PR4 ;;区域E2
LJMP CCW_6
CCW_5: LCALL PR1 ;;区域E1
CCW_6: INC CODE1 ;;间址寄存器加1
INC COLUMN ;;列地址寄存器加1
MOV A,COLUMN ;;判列地址是否超出区域范围
CJNE A,#PD1,CCW_7
CCW_7: JC CCW_8 ;;未超出则继续
MOV A,PAGE1 ;;超出则判是否在区域E2
JB ACC.3,CCW_8 ;;在区域E2则退出
SETB ACC.3 ;;在区域E1则修改成区域E2
MOV PAGE1,A
MOV COM,#00H ;;设置区域E2列地址为“0”
LCALL PR3
CCW_8: DJNZ COUNT,CCW_4 ;;当页循环
MOV A,PAGE1 ;;读页地址寄存器
JB ACC.7,CCW_9 ;;判完成标志D7位,“1”则完成退出
INC A ;;否则页地址加“1”
SETB ACC.7
CLR ACC.3
MOV PAGE1,A
MOV CODE1,#10H ;;间接寄存器设置为16
LJMP CCW_1 ;;大循环
CCW_9: RET
ccAtB: DB 20H,20H,24H,24H,24H,0E4H,26H,24H ;“武”
DB 20H,0FFH,20H,22H,2CH,20H,20H,00H
DB 20H,60H,3FH,20H,20H,1FH,11H,11H
DB 10H,03H,1CH,20H,40H,80H,0E0H,00H
DB 10H,22H,64H,0CH,80H,04H,74H,84H ; “汉”
DB 04H,04H,04H,0C4H,3EH,04H,00H,00H
DB 04H,04H,7EH,01H,80H,40H,20H,11H
DB 0AH,04H,0BH,10H,60H,0C0H,40H,00H
DB 80H,70H,00H,0FFH,10H,22H,0F2H,92H ; “恒”
DB 92H,92H,92H,92H,0FBH,12H,00H,00H
DB 00H,00H,00H,0FFH,20H,20H,27H,24H
DB 24H,24H,24H,24H,27H,30H,20H,00H
DB 24H,24H,24H,0A4H,0FEH,0A3H,22H,00H ; “科”
DB 24H,48H,00H,0FFH,00H,80H,00H,00H
DB 10H,08H,06H,01H,0FFH,00H,01H,02H
DB 02H,02H,02H,0FFH,01H,01H,01H,00H
db 00h,0F8h,48h,48h,48h,48h,0FFh,48h ; "电"
db 48h,48h,48h,0FCh,08h,00h,00h,00h
db 00h,07h,02h,02h, 02h,02h,3Fh,42h
db 42h,42h,42h,47h, 40h,70h,00h,00h
db 80h,80h,82h,82h,82h,82h,82h,0E2h ; "子"
db 0A2h,92h,8Ah,86h,80h,0C0h,80h,00h
db 00h,00h, 00h,00h,00h,40h,80h,7Fh
db 00h,00h, 00h,00h,00h,00h,00h,00h
db 20h,24h,24h,0A4h,0FFh,0A4h,0B4h,0ACh ; "教"
db 20h,09Fh,10h,10h,0F0h,18h,10h,00h
db 02h,12h,51h,90h,7Eh,0Ah,89h,40h
db 20h,1Bh,04h,1Bh,60h,0C0h,40h,00h
db 80h,40h,20h,0F8h,07h,00h,38h,0C0h ; "仪"
db 02h,04h,0Ch,80h,60h,1Ch,00h,00h
db 00,00,00,0FFh,80h,40h,20h,10h
db 0Bh,04h,0Ah,11h,60h,0C0h,40h,00h
DB 00H,0FCH,14H,0D4H,54H,54H,54H,0D4H ; "感"
DB 14H,0FFH,04H,85H,66H,04H,00H,00H
DB 04H,43H,30H,07H,72H,82H,8AH,93H
DB 0B4H,82H,0E1H,12H,24H,64H,07H,00H
DB 40H,42H,0CCH,00H,0FCH,56H,55H,54H ; "谢"
DB 0FEH,24H,20H,20H,0FFH,20H,20H,00H
DB 00H,00H,3FH,52H,2BH,12H,4AH,86H
DB 7FH,01H,46H,80H,7FH,00H,00H,00H
DB 40H,20H,10H,0FCH,23H,10H,8CH,67H ; "您"
DB 04H,0F4H,04H,44H,94H,8CH,00H,00H
DB 40H,30H,00H,77H,80H,81H,88H,92H
DB 0B4H,83H,80H,0E0H,00H,11H,60H,00H
DB 40H,20H,0F8H,07H,04H,0F4H,14H,14H ; "使"
DB 14H,0FFH,14H,14H,14H,0F6H,04H,00H
DB 00H,00H,0FFH,00H,80H,43H,45H,29H
DB 19H,17H,21H,21H,41H,0C3H,40H,00H
DB 00H,00H,0FEH,22H,22H,22H,22H,0FEH ; "用"
DB 22H,22H,22H,22H,0FFH,02H,00H,00H
DB 80H,60H,1FH,02H,02H,02H,02H,7FH
DB 02H,02H,42H,82H,7FH,00H,00H,00H
DB 40H,42H,0C4H,00H,04H,84H,0C4H,0B5H ; "该"
DB 8EH,84H,84H,64H,04H,06H,04H,00H
DB 00H,00H,7FH,20H,90H,88H,50H,48H
DB 24H,13H,08H,14H,23H,0C0H,00H,00H
DB 00H,08H,08H,88H,98H,0E8H,89H,8EH ; "产"
DB 88H,0C8H,0A8H,98H,0CCH,88H,00H,00H
DB 80H,40H,30H,0FH,00H,00H,00H,00H
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 00H,00H,00H,7EH,22H,22H,0A2H,22H ; "品"
DB 22H,22H,22H,7FH,02H,80H,00H,00H
DB 00H,0FFH,41H,41H,41H,41H,0FFH,01H
DB 0FFH,41H,41H,41H,41H,0FFH,01H,00H
INT: MOV COM,#0E2H ;;初始化子程序,复位
LCALL PR0
LCALL PR3
MOV COM,#0A4H ;;关闭休闲状态
LCALL PR0
LCALL PR3
MOV COM,#0A9H ;;设置1/32占空比
LCALL PR0
LCALL PR3
MOV COM,#0A0H ;;正向排序设置
LCALL PR0
LCALL PR3
MOV COM,#0C0H ;;设置显示起始行为第一行
LCALL PR0
LCALL PR3
MOV COM,#0AFH ;;开显示设置
LCALL PR0
LCALL PR3
RET
CLEAR: MOV R4,#00H ;;清屏子程序,页面地址暂存器设置
CLEAR1: MOV A,R4 ;;取页地址值
ORL A,#0B8H ;;“或” 页面地址设置代码
MOV COM,A ;;页面地址设置
LCALL PR0
LCALL PR3
MOV COM,#00H ;;列地址设置为“0”
LCALL PR0
LCALL PR3
MOV R3,#50H ;;一页清80个字节
CLEAD2: MOV DAT,#00H ;;显示数据为“0”
LCALL PR1
LCALL PR4
DJNZ R3,CLEAD2 ;;页内字节清零循环
INC R4 ;;页地址暂存器加1
CJNE R4,#04H,CLEAR1 ;;RAM区清零循环
RET
PR0: PUSH DPL ;;写指令代码子程序(E1)
PUSH DPH
MOV DPTR,#CRADD1
PR01: MOVX A,@DPTR
JB ACC.7,PR01
MOV DPTR,#CWADD1
MOV A,COM
MOVX @DPTR,A
POP DPH
POP DPL
RET
PR1: PUSH DPL ;;写显示数据子程序(E1)
PUSH DPH
MOV DPTR,#CRADD1
PR11: MOVX A,@DPTR
JB ACC.7,PR11
MOV DPTR,#DWADD1
MOV A,DAT
MOVX @DPTR,A
POP DPH
POP DPL
RET
PR2: PUSH DPL ;;读显示数据子程序(E1)
PUSH DPH
MOV DPTR,#CRADD1
PR21: MOVX A,@DPTR
JB ACC.7,PR21
MOV DPTR,#DRADD1
MOVX A,@DPTR
MOV DAT,A
POP DPH
POP DPL
RET
PR3: PUSH DPL ;;写指令代码子程序(E2)
PUSH DPH
MOV DPTR,#CRADD2
PR31: MOVX A,@DPTR
JB ACC.7,PR31
MOV DPTR,#CWADD2
MOV A,COM
MOVX @DPTR,A
POP DPH
POP DPL
RET
PR4: PUSH DPL ;;写显示数据子程序(E2)
PUSH DPH
MOV DPTR,#CRADD2
PR41: MOVX A,@DPTR
JB ACC.7,PR41
MOV DPTR,#DWADD2
MOV A,DAT
MOVX @DPTR,A
POP DPH
POP DPL
RET
PR5: PUSH DPL ;;读显示数据子程序(E2)
PUSH DPH
MOV DPTR,#CRADD2
PR51: MOVX A,@DPTR
JB ACC.7,PR21
MOV DPTR,#DRADD2
MOVX A,@DPTR
MOV DAT,A
POP DPH
POP DPL
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -