📄 test1.asm
字号:
; 由厂家提供的 MGLS12032模块LCD演示程序,文件名TEST1.asm
; E1 A15=0 & A14=0 ; E2 A15=0 & A14=1 ; R/W A9 ; RS A8 .
CWADD1 DATA 8000H ;写指令代码地址(E1)
CRADD1 DATA 8200H ;读状态字地址(E1)
DWADD1 DATA 8100H ;写显示数据地址(E1)
DRADD1 DATA 8300H ;读显示数据地址 (E1)
CWADD2 DATA 4000H ;写指令代码地址 (E2)
CRADD2 DATA 4200H ;读状态字地址 (E2)
DWADD2 DATA 4100H ;写显示数据地址 (E2)
DRADD2 DATA 4300H ;读显示数据地址 (E2)
;;;
; 间接控制方式信号定义,根据用户平台接口修改
RS EQU P3.2 ; 寄存器选择信号
; R/W EQU P3.3 ; 读/ 写选择信号
E1 EQU P3.4 ; 使能信号1
E2 EQU P3.5 ; 使能信号2
DATBUS EQU P1 ; 数据总线
; 程序参数定义,根据用户选择的LCM型号修改
; PARA1 EQU 32H ; 模块参数 MGLS10032
;------------------
PARA1 EQU 3CH ; 模块参数 MGLS12032
; PARA1 EQU 3DH ; 模块参数 MGLS12232
; 程序变量定义,根据用户平台提供的内部资源修改
COM EQU 50H ; 指令码寄存器
DAT1 EQU 51H ; 数据寄存器
O_XL EQU 52H ; 列地址(0~77H)
O_YL EQU 53H ; 在显示字符时定义为页地址 D1,D0: 页地址
; 并且 D7: 字符体 D7=0为6x8点阵
; D7=1为8x8点阵
; 在绘点显示时定义为行地址(0-31)
; 其中 D7:为点标志 "1"为置点
; "0"为清点
CODE EQU 55H ; 字符代码
COUNT1 EQU 56H ; 计数器1
;************************************************************************
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
ANL P3,#0C3H
LCALL INT ; 初始化字程序
LCALL CLEAR ; 清显示RAM子程序
; LJMP DISTEXT ; 西文显示程序段
LCALL DISCHA ; 汉字显示程序段
; LJMP DRAW ; 绘点程序段
; LJMP S_UP ; 上滚动程序段
LJMP S_DOWN ; 下滚动程序段
SJMP $
;=========== 西文显示演示程序段 ========================
DISTEXT: MOV O_YL,#03H ; 6x8点阵字体, 第4页
MOV O_XL,#04H ; 起始列为第4列
MOV CODE,#34H ; 字符代码
LCALL CW_PR
MOV O_YL,#03H
MOV O_XL,#0CH
MOV CODE,#45H
LCALL CW_PR
MOV O_YL,#03H
MOV O_XL,#14H
MOV CODE,#4CH
LCALL CW_PR
MOV O_YL,#03H
MOV O_XL,#1CH
MOV CODE,#1AH
LCALL CW_PR
MOV R7,#00H
MOV R6,#28H
LOOP: MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV CODE,A
MOV O_YL,#83H ; 8X8点阵字体, 第4页
MOV O_XL,R6
LCALL CW_PR
INC R7
MOV A,#06H
ADD A,R6
MOV R6,A
CJNE R7,#08H,LOOP
SJMP $
TAB1: DB 16H,12H,17H,18H,10H,19H,19H,14H
;=============== 中文演示显示程序段 =======================
DISCHA: MOV O_YL,#00H
MOV O_XL,#10H
MOV CODE,#00H
LCALL CCW_PR
MOV O_YL,#00H
MOV O_XL,#20H
MOV CODE,#01H
LCALL CCW_PR
MOV O_YL,#00H
MOV O_XL,#30H
MOV CODE,#02H
LCALL CCW_PR
MOV O_YL,#00H
MOV O_XL,#40H
MOV CODE,#03H
LCALL CCW_PR
RET
SJMP $
;==============================================================
; 中文字符库
CCTAB: DB 082H,08AH,092H,0B2H,002H,0A7H,092H,05EH;蓬90 = 00H
DB 02AH,0AFH,02AH,05AH,04AH,083H,082H,000H
DB 000H,080H,040H,03FH,041H,090H,095H,095H
DB 095H,0FFH,095H,095H,095H,0D0H,040H,000H
DB 080H,064H,024H,024H,03FH,024H,0A6H,064H;勃90 = 01H
DB 020H,020H,0FFH,020H,020H,0F0H,020H,000H
DB 000H,008H,049H,089H,07DH,00BH,089H,040H
DB 030H,00EH,041H,080H,040H,03FH,000H,000H
DB 040H,042H,044H,0CCH,000H,020H,022H,0E2H;远90 = 02H
DB 022H,022H,0E2H,023H,032H,020H,000H,000H
DB 000H,040H,020H,01FH,020H,050H,04CH,043H
DB 040H,040H,047H,048H,048H,06EH,020H,000H
DB 020H,020H,020H,020H,020H,020H,0A0H,07FH;大90 = 03H
DB 0A0H,020H,020H,020H,020H,030H,020H,000H
DB 000H,040H,040H,020H,010H,00CH,003H,000H
DB 001H,006H,008H,010H,020H,060H,020H,000H
;=============== 绘点演示程序段 =================
DRAW: MOV R6,#00H ; 绘点
MOV R7,#80H
LOOP1: MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
INC R7
CJNE R7,#0A0H,LOOP1
LOOP2: DEC R7
MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
CJNE R7,#80H,LOOP2
LOOP3: MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
INC R7
CJNE R7,#0A0H,LOOP3
LCALL DELAY
LCALL DELAY
;----------------------------------------------------
MOV R6,#00H ; 消点
MOV R7,#00H
LOOP4: MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
INC R7
CJNE R7,#020H,LOOP4
LOOP5: DEC R7
MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
CJNE R7,#00H,LOOP5
LOOP6: MOV O_XL,R6 ; 列地址设置
MOV O_YL,R7 ; 行地址设置
LCALL W_DOT
INC R6
INC R7
CJNE R7,#20H,LOOP6
SJMP $
;=============== 滚动演示程序段 ======================
S_UP: MOV R7,#00H ; 向上滚动程序
S_UP1: MOV A,#0C0H ; 显示起始行设置代码
ORL A,R7
MOV COM,A
LCALL PR1
LCALL PR4
LCALL DELAY ; 调延时子程序
INC R7
CJNE R7,#20H,S_UP1
SJMP $
;------------------------------------------------------------
S_DOWN: MOV R7,#1FH ; 向下滚动程序
MOV COM,#0C0H ; 显示起始行设置代码
LCALL PR1
LCALL PR4
LCALL DELAY
S_DOWN1: MOV A,#0C0H ; 显示起始行设置代码
ORL A,R7
MOV COM,A
LCALL PR1
LCALL PR4
LCALL DELAY ; 调延时子程序
DJNZ R7,S_DOWN1
SJMP $
;---------------------------------------
DELAY: MOV R6,#00H ; 延时子程序
MOV R5,#00H
DELAY1: NOP
DJNZ R5,DELAY1
DJNZ R6,DELAY1
RET
;***************************************************
; 直接驱动子程序由6个子程序组成:
; 1. 写指令代码子程序(左屏E1)PR0
; 2. 写显示数据子程序(左屏E1)PR1
; 3. 读显示数据子程序(左屏E1)PR2
; 4. 写指令代码子程序(右屏E2)PR3
; 5. 写显示数据子程序(右屏E2)PR4
; 6. 读显示数据子程序(右屏E2)PR5
; 占用内部寄存器:A,COM,DAT1
; 占用系统接口资源: CWADD1,CRADD1,DWADD1,DRADD1,CWADD2,CRADD2,DWADD2,DRADD2
; 程序输入变量:COM 或 DAT1
;------------写指令子程序(E1)-------------------------
PR1: PUSH DPL
PUSH DPH
MOV DPTR,#CRADD1 ; 设置读状态字地址
PR11: MOVX A,@DPTR ; 读状态字
JB ACC.7,PR11 ; 判"忙"标志为"0"否, 否再读
MOV DPTR,#CWADD1 ; 设置写指令代码地址
MOV A,COM ; 取指令代码
MOVX @DPTR,A ; 写指令代码
POP DPH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -