📄 lcd_p.asm
字号:
;*******文件名:LCD_P.ASM***************************
W_C_ADD EQU 2070H ;写命令字地址
W_D_ADD EQU 2071H ;写数据地址
R_S_ADD EQU 2072H ;读状态字地址
R_D_ADD EQU 2073H ;读数据地址
;*************************************************
DATA1 EQU 30H ;存放待显示字符的ASCII码
;N EQU 31H ;
;*************************************************
ORG 0000H ;
LJMP MAIN ;
MAIN: MOV SP,#60H ;设置SP初值
LCALL INI ;调用初始化子程序
LCALL DCHAR ;调用字符显示子程序
JMP $ ;等待
;*******字符显示子程序******************************************
;第一行显示0-----9 十个数字
DCHAR: MOV DATA1,#30H ;
MOV B,#10 ;设置显示数据个数为10
MOV A,#80H ;设置显示坐标,80H对应字符的第一行第一列
LCALL CMD_LCD ;送命令
DCH0: MOV A,DATA1 ;
LCALL WRITE_LCD ;送数据
INC DATA1 ;
DJNZ B,DCH0 ;
;第二行显示A-----Q十六个字母
MOV DATA1, #41H ;
MOV B,#16 ;设置显示数据个数为16
MOV A,#90H ;设置显示坐标,90H对应字符的第二行第一列
LCALL CMD_LCD ;送命令
DCHA: MOV A,DATA1 ;
LCALL WRITE_LCD ;送数据
INC DATA1 ;
DJNZ B,DCHA ;
RET
;*******初始化子程序******************************************
INI: PUSH ACC ;
MOV A,#30H ;功能设置
LCALL CMD_LCD ;
LCALL DELAY ;
MOV A,#30H ;功能设置
LCALL CMD_LCD ;
LCALL DELAY ;
MOV A,#30H ;功能设置
LCALL CMD_LCD ;
MOV A,#0CH ;显示状态 ON
LCALL CMD_LCD ;
MOV A,#01H ;清除显示
LCALL CMD_LCD ;
MOV A,#02H ;地址归位
LCALL CMD_LCD ;
POP ACC ;
RET
;*******延时子程序***************************
;采用双重循环,延时约50毫秒
DELAY: MOV R6,#00H ;
MOV R7,#00H
DELAY1:
NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY1
RET
;*******忙状态检测子程序******************************************
CHKBUSY:PUSH DPH ;
PUSH DPL ;
PUSH PSW ;
PUSH ACC ;
MOV DPTR,#R_S_ADD ;送读状态字地址
CHK: MOVX A,@DPTR ;从液晶模块读状态
JB ACC.7,CHK ;判断状态
POP ACC ;
POP PSW ;
POP DPL ;
POP DPH ;
RET
;*******写命令到LCD子程序******************************************
CMD_LCD:PUSH DPH ;
PUSH DPL ;
LCALL CHKBUSY ;忙状态检测
MOV DPTR,#W_C_ADD ;送写命令字地址
MOVX @DPTR,A ;向液晶模块写命令
POP DPL ;
POP DPH ;
RET
;*******写数据到LCD子程序******************************************
WRITE_LCD: ;
PUSH DPH ;
PUSH DPL ;
LCALL CHKBUSY ;忙状态检测
MOV DPTR,#W_D_ADD ;送写数据地址
MOVX @DPTR,A ;向液晶模块写数据
POP DPL ;
POP DPH ;
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -