📄 lcd_hz.asm
字号:
;实验二、LCD 汉字显示实验
;文件名称 LCD_HZXS.ASM
;在第2行显示"欢迎使用LJD-2008" ,
;在第3行显示"WWW.LJD-2008.COM"
NAME LCD_HZ
$NOLIST
$INCLUDE(LJD_2008.INC)
$INCLUDE(LCD.INC)
$LIST
ORG 0000H
AJMP BEGIN
ORG 0030H
BEGIN: MOV SP,#60H
LCALL INITIAL_GLCD ;调用LCD初试化
;----------------------------------------------------
;设定汉字的显示行: 第一行开始地址为00H~07H
;每行可以显示8个汉字: 第二行开始地址为10H~17H
; 第三行开始地址为08H~0FH
; 第四行开始地址为18H~1FH
;-----------------------------------------------------
MOV ADDR1,#10H ;第二行显示
MOV N1,#08H ;数量 8 个
MOV DPTR,#DHZTAB1 ;需要显示的汉字位置
CALL DHZ ; 调用汉字显示子程序
MOV ADDR1,#08H ;第三行显示
MOV N1,#08 ;数量 8 个
MOV DPTR,#DHZTAB2 ;需要显示的汉字(一个汉字占2个字符)
CALL DHZ
SJMP $
DHZTAB1: DB "欢迎使用LJD-2008"
DHZTAB2: DB "WWW.LJD-2008.COM"
;--------------------------------------------------------------------
;显示汉字16X16点阵
DHZ: MOV ADDR,ADDR1 ; 开始行位置
MOV B,N1 ; 显示数量
DHZ1: MOV A,ADDR;
ORL A,#80H ; 送显示地址
LCALL COMMAND_GLCD ;调写命令子程序
DHZ2: CLR A
MOVC A,@A+DPTR ; 查找汉字的高位码
INC DPTR
LCALL WRITE_GLCD ; 送显示
CLR A
MOVC A,@A+DPTR ; 查找汉字的低位码
INC DPTR
LCALL WRITE_GLCD ; 送显示
DJNZ B,DHZ2
RET
;---------------------------------------------------------
;点阵式 LCD(128X64)模块显示实验
;以下是公共的程序:
;----------------------------------------------------------
;执行 LCD 初始化工作
INITIAL_GLCD:
PUSH ACC
MOV A,#30H ;功能设定
CALL COMMAND_GLCD
MOV A,#30H ;功能设定
CALL COMMAND_GLCD
MOV A,#30H ;功能设定
CALL COMMAND_GLCD
MOV A,#06H ;显示器控制:游标不显示;但是字会闪烁
CALL COMMAND_GLCD
MOV A,#01H ;清除显示器
CALL COMMAND_GLCD
MOV A,#0CH ;进入模式设定
CALL COMMAND_GLCD
POP ACC
RET
;---------------------------------------------------------------
;检查LCD 忙碌标志
CHKBUSY_GLCD:
PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#R_B_GLCD
CHK$: MOVX A,@DPTR
JB ACC.7,CHK$ ;判别是不是忙?
POP ACC
POP DPL
POP DPH
RET
;---------------------------------------------------------------
;写命令到 GLCD
COMMAND_GLCD:
PUSH DPH
PUSH DPL
CALL CHKBUSY_GLCD ;判别是不是忙?
MOV DPTR,#W_C_GLCD
MOVX @DPTR,A ;写入命令
POP DPL
POP DPH
RET
;---------------------------------------------------------------
;写资料到 GLCD
WRITE_GLCD:
PUSH DPH
PUSH DPL
CALL CHKBUSY_GLCD ;判别是不是忙?
MOV DPTR,#W_D_GLCD ;写入数据
MOVX @DPTR,A
POP DPL
POP DPH
RET
;--------------------------------------------------------------------
;清除 LCD 的显示幕
CLEAR_GLCD:
PUSH ACC
MOV A,#01H ;清除显示器
CALL COMMAND_GLCD
POP ACC
RET
;--------------------------------------------------------------------
;将 ACC 内容,以十六进制值显示
HEX_LCD:
PUSH DPH
PUSH DPL
PUSH ACC
PUSH ACC
SWAP A ;高低四位元交换
ANL A,#0FH ;留下低四位元
MOV DPTR,#ASCII_CODE ;DPTR 指到 ASCII_CODE
MOVC A,@A+DPTR ;取得 ASCII 码
CALL WRITE_GLCD ;写到 LCD
POP ACC
ANL A,#0FH ;留下低四位元
MOVC A,@A+DPTR ;取得 ASCII 码
CALL WRITE_GLCD ;写到 LCD
POP ACC
POP DPL
POP DPH
RET
ASCII_CODE: DB '0123456789ABCDEF'
;--------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -