COM EQU 20H ;命令存储单元
DAT EQU 21H ;数据存储单元
CW_ADR EQU 0000H ;写命令地址
CR_ADR EQU 0001H ;读命令地址
DW_ADR EQU 0002H ;写数据地址
DR_ADR EQU 0003H ;读数据地址
;**********************************************
ORG 0000H
LJMP BEGIN
ORG 0100H
BEGIN: MOV SP,#70H
MOV PSW,#00H
LCALL LCDINT
MLOP: LCALL DISPLY1
LCALL DISPLY2
LCALL DISPLY3
LCALL DISPLY4
LCALL TIME
SJMP MLOP
;*********各行显示子程序********************
DISPLY1:MOV COM,#80H ;LCD第一行字符的DDRAM首地址
LCALL WC ;送DDRAM地址,AC指向显示第一行的第一个字符
MOV DPTR,#DATA1 ;取要显示的第一行字符的首地址
MOV R6,#0 ;每行字符的当前位置
MOV R7,#16 ;R7作字符计数器
LCALL WRN
RET
DISPLY2:MOV COM,#90H ;LCD第二行字符的DDRAM首地址
LCALL WC ;送DDRAM地址,AC指向显示第二行的第二个字符
MOV DPTR,#DATA2 ;取要显示的第二行字符的首地址
MOV R6,#0 ;每行字符的当前位置
MOV R7,#16 ;R7作字符计数器
LCALL WRN
RET
DISPLY3:MOV COM,#88H ;LCD第三行字符的DDRAM首地址
LCALL WC ;送DDRAM地址,AC指向显示第三行的第三个字符
MOV DPTR,#DATA3 ;取要显示的第三行字符的首地址
MOV R6,#0 ;每行字符的当前位置
MOV R7,#16 ;R7作字符计数器
LCALL WRN
RET
DISPLY4:MOV COM,#98H ;LCD第四行字符的DDRAM首地
LCALL WC ;送DDRAM地址,AC指向显示第四行的第四个字符
MOV DPTR,#DATA4 ;取要显示的第四行字符的首地址
MOV R6,#0 ;每行字符的当前位置
MOV R7,#16 ;R7作字符计数器
LCALL WRN
RET
;*********************初始化程序*********************
LCDINT: MOV COM,#30H
MOV R7,#2
LOOP: LCALL WC
LCALL DELAY
DJNZ R7,LOOP ;写两次30h命令,软件复位
LCALL DELAY
MOV COM,#0FH ;设置开显示,光标显示,闪烁
LCALL WC
LCALL DELAY
MOV COM,#01H ;清屏
LCALL WC
LCALL DELAY
MOV COM,#06H ;设置AC加1计数,画面不动
LCALL WC
RET
;*********************写控制指令子程序******************
WC: PUSH DPH
PUSH DPL
PUSH ACC
ACALL BUSY
MOV DPTR,#CW_ADR
MOV A,COM ;写命令COM
MOVX @DPTR,A ;RS=0,R/W=0写命令
POP ACC
POP DPL
POP DPH
RET
;********************写一位字符数据子程序****************
WD: PUSH DPH
PUSH DPL
PUSH ACC
ACALL BUSY
MOV DPTR,#DW_ADR
MOV A,DAT ;写命令DAT
MOVX @DPTR,A ;RS=1,R/W=0写命令
POP ACC
POP DPL
POP DPH
RET
;******************显示子程序*****************************
WRN: MOV A,R6
MOVC A,@A+DPTR
INC R6
MOV DAT,A
LCALL WD
DJNZ R7,WRN
RET
;*********************判忙子程序*************************
BUSY: PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#CR_ADR
BF: MOVX A,@DPTR
JB ACC.7,BF
POP ACC
POP DPL
POP DPH
RET
;********************延时子程序***********************
DELAY: MOV R0,#08H
DLY0: MOV R1,#0C8H
DLY1: DJNZ R1,DLY1
DJNZ R0,DLY0
RET
;******************1S延时子程序************************
TIME:MOV R2,#5
M1:MOV R1,#200
M2:MOV R0,#248
M3:DJNZ R0,M3
DJNZ R1,M2
DJNZ R2,M1
RET
;**********************汉字表**************************
DATA1:DB' 北京时间 '
DATA2:DB' 自动化工学院 '
DATA3:DB' 李教授 '
DATA4:DB' 林教授 '
END