[本文由创梦电子工作室原创,转载请注明
出处
2004.04.14]
例:再16x2的显示屏上第一行第03位开始显示
“OK”,51汇编源程序如下:
ORG 000h
AJMP START
ORG 030H
RSPIN EQU
P2.7
RWPIN EQU
P3.0
EPIN EQU
P3.1
LCM_D DATA P0
; LCM BUS
START:
SETB EPIN
;E端置1
CALL LCM_RESET
;初始化
CALL S_OK
;显示OK
JMP $
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示字符
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
S_OK:
mov
a,#03H ;字符的显示位置
03
ORL
a,#80H ;第8位置1,以符合DDRAM地址设置指令格式
call
LCM_COMMAND_00 ;设定DDRAM地址
(显示位置)
mov
a,#'O' ;读
O 字符码
call
LCM_COMMAND_10 ;设定DDRAM数据
(显示字符)
mov
a,#04H ;字符的显示位置
03
ORL a,#80H ;
80h
call
LCM_COMMAND_00 ;设定DDRAM地址
(显示位置)
mov
a,#'K' ;读
K 字符码
call
LCM_COMMAND_10 ;设定DDRAM数据
(显示字符)
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LCM初始化
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_RESET:
CALL
DELAY_10MS ;延时15MS
CALL
DELAY_10MS
CALL
DELAY_10MS
MOV
A,#00110000B ;显示模式设置(不检测忙信号)
CALL
com00_NO_BF
CALL
DELAY_10MS
MOV
A,#00110000B ;显示模式设置(不检测忙信号)
CALL
com00_NO_BF
CALL
DELAY_10MS
MOV
A,#00110000B ;显示模式设置(检测忙信号)
CALL
LCM_COMMAND_00
MOV
A,#00111000B ;显示模式设置(以后均检测忙信号)
8位数据,双行显示,5x7点阵
CALL
LCM_COMMAND_00
MOV
A,#00001000B ;显示关闭
CALL
LCM_COMMAND_00
MOV
A,#00000001B ;显示清屏
CALL
LCM_COMMAND_00
MOV
A,#00001100B ;显示光标移动设置
CALL
LCM_COMMAND_00
MOV
A,#00000110B ;显示开及光标设置
CALL
LCM_COMMAND_00
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;送控制指令程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_COMMAND_00: ;送控制指令程序(检测忙信号)
CALL
BUSY_WAIT
com00_NO_BF: ;送控制字子程序(不检测忙信号)
CLR
RSPIN ;RS=0 RW=0
CLR
RWPIN
MOV
P0,A
NOP
SETB
EPIN
NOP
CLR
EPIN
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;写字符子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCM_COMMAND_10: ;写字符子程序
CALL
BUSY_WAIT
SETB
RSPIN ;RS=1 RW=0 E=高脉冲
CLR
RWPIN
MOV
P0,A
NOP
SETB
EPIN
NOP
CLR
EPIN
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;BF查询子程序
功能:
直到BF=0才退出该程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BUSY_WAIT:
PUSH
ACC ;保护ACC数据
MOV
P0,#0FFH ;将p0口置1
CLR
RSPIN ;RS=0
SETB
RWPIN ; RW=1
SETB
EPIN ; E=高电平
NOP
WT_BF:
NOP
;
JB
P0.7,WT_BF ; DB7=0 LCD控制器空闲
, DB7=1 LCD控制器忙
CLR EPIN
POP
ACC ;释放ACC数据
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;延时程序,约10ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_10MS:
MOV R7,#100
DELAY_10MS_L0:
MOV R6,#100
DELAY_10MS_L1:
DJNZ
R6,DELAY_10MS_L1
NOP
DJNZ
R7,DELAY_10MS_L0
RET
END
;-------------------------------------------------------
1
2
3
4
|