📄 ex9-10.asm
字号:
COM EQU 50H ; LCD指令寄存器
DAT EQU 51H ; LCD数据寄存器
RS EQU P2.1 ; LCD寄存器选择信号
RW EQU P2.2 ; LCD读/写选择信号
E EQU P2.3 ; LCD使能信号
ORG 0000H
LJMP MAIN ;主程序入口
ORG 0030H ;主程序
MAIN:
MOV SP,#60H ;主程序
LCALL INT ;调LCD间接控制方式下的初始化子程序
MOV COM,#01H ;LCd清0命令
LCALL PR1 ;调写指令代码子程序
MOV COM,#06H ;输入方式命令,光标右移
LCALL PR1 ;调写指令代码子程序
MOV COM,#080H ;设置DDRAM地址
LCALL PR1 ;调写指令代码子程序
MOV DPTR,#TAB ;DPTR指向显示字符表首地址
MOV R2,#10H ;共显示16字符
MOV R3,#00H
WRIN: MOV A,R3
MOVC A,@A+DPTR ;取出显示字符
MOV DAT,A
LCALL PR2 ;调写显示数据子程序
INC R3
DJNZ R2,WRIN
SJMP $
TAB: DB "Hello Everybody!";
;LCD 间接控制方式下的初始化子程序
INT: LCALL DELAY ; 调延时子程序
MOV P0,#38H ; 工作方式设置指令代码
CLR RS ; RS=0
CLR RW ; R/W=0
MOV R2,#03 ; 循环量=3
INTT1: SETB E ; E=1
CLR E ; E=0
DJNZ R2,INTT1
MOV P0,#38H ; 设置工作方式*
SETB E ; E=1
CLR E ; E=0
MOV COM,#38H ; 设置工作方式
LCALL PR1
MOV COM,#01H ; 清屏
LCALL PR1
MOV COM,#06H ; 设置输入方式
LCALL PR1
MOV COM,#0EH ; 设置显示方式
LCALL PR1
RET
DELAY: MOV R6,#0FH ; 延时子程序
DELAY2: MOV R7,#10H
DELAY1: NOP
DJNZ R7,DELAY1
DJNZ R6,DELAY2
RET
;LCD 间接控制方式的驱动子程序如下
;1 读BF和AC值
PR0: PUSH ACC
MOV P0,#0FFH ; P0置位, 准备读
CLR RS ; RS=0
SETB RW ; R/W=1
SETB E ; E=1
LCALL DELAY
MOV COM,P0 ; 读BF和AC6-4值
CLR E ; E=0
POP ACC
RET
;2 写指令代码子程序
PR1: PUSH ACC
CLR RS ; RS=0
SETB RW ; R/W=1
PR11: MOV P0,#0FFH; P0置位, 准备读
SETB E ; E=1
LCALL DELAY
NOP
MOV A,P0
CLR E
JB ACC.7,PR11;BF=1?
CLR RW ; R/W=0
MOV P0,COM
SETB E ; E=1
CLR E ; E=0; E=0
POP ACC
RET
;3 写显示数据子程序
PR2: PUSH ACC
CLR RS ; RS=0
SETB RW ; R/W=1
PR21: MOV P0,#0FFH
SETB E ; E=1
LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值
CLR E ; E=0
JB ACC.7,PR21
SETB RS
CLR RW
MOV P0,DAT; 写入数据高4位
SETB E ; RS=1
CLR E ; R/W=0
POP ACC
RET
;4 读显示数据子程序
PR3: PUSH ACC
CLR RS ; RS=0
SETB RW ; R/W=1
PR31: MOV P0,#0FFH ; P0置位, 准备读
SETB E ; E=1
LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值
CLR E ; E=0
JB ACC.7,PR31
SETB RS ; E=1
SETB RW ; R/W=1
MOV P0,#0FFH ; 读数据
SETB E ; E=1
MOV DAT,P0
CLR E ; E=0
POP ACC
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -