发布者: 未知 来源:网络
;第一行第一列开始显示"Welcome!",打开光标并闪烁显示.
RS bit P2.5
RW bit P2.6
E bit P2.7
DPORT EQU P0
XPOS EQU R1 ;列方向地址指针
YPOS EQU R2 ;行方向地址指针
CUR EQU R3 ;设定光标参数
NoDisp EQU 0 ;无显示
NoCur EQU 1 ;有显示无光标
CurNoFlash EQU 2 ;有光标但不闪烁
CurFlash EQU 3 ;有光标且闪烁
ORG 0000H
JMP START
ORG 30H
START:
MOV SP,#5FH
CALL RSTLCD
MOV 20H,#'W'
MOV 21H,#'e'
MOV 22H,#'l'
MOV 23H,#'c'
MOV 24H,#'o'
MOV 25H,#'m'
MOV 26H,#'e'
MOV 27H,#'!'
MOV 28H,#' '
MOV 29H,#0
MOV Cur,#CurFlash
CALL SETCUR
MOV R0,#20H
MOV r1,#1
MOV r2,#0
CALL WRITESTRING
JMP $
;测试主程序到此结束
WriteString:
MOV A,@R0
JZ WS_RET
CALL WriteChar
MOV A,XPOS
CJNE A,#15,WS_1 ;如果XPOS中的值未到15(可显示的最多位)
JMP WS_RET
WS_1:
INC R0
INC XPOS
JMP WriteString
WS_RET:
RET
;光标设置命令
SetCur:
MOV A,CUR
JZ S_1 ;参数为0,转关显示
DEC A
JZ S_2 ;参数为1,转开显示,但无光标
DEC A
JZ S_3 ;参数为2,转开显示且有光标,无闪烁
DEC A
JZ S_4 ;参数为3,转开显示,光标闪烁
JMP S_RET ;否则返回
S_1:
MOV A,#00001000B ;关显示
CALL LCDWC
JMP S_RET
S_2:
MOV A,#00001100B ;开显示但无光标
CALL LCDWC
JMP S_RET
S_3:
MOV A,#00001110B ;开显示有光标但不闪烁
CALL LCDWC
JMP S_RET
S_4:
MOV A,#00001111B ;开显示有光标且闪烁
CALL LCDWC
S_RET:
RET
;清屏命令
ClrLcd:
MOV A,#01H
CALL LCDWC
RET
;在指定的行与列显示指珲的字符,xpos,行,ypos,列 A,待显示字符
WriteChar:
CALL LCDPOS
CALL LCDWD
RET
;系统资源 一个堆栈
WaitIdle: ;正常读写操作之前必须检测LCD控制器状态
PUSH ACC
MOV DPORT,#0FFH
CLR RS
SETB RW
SETB E
NOP
W_1:
MOV A,DPORT
ANL A,#80H
JZ W_2
JMP W_1
W_2:
CLR E
POP ACC
RET
;系统资源 a
LcdWd: ;写字符子程序
CALL WAITIDLE
SETB RS
CLR RW
MOV DPORT,A ;以A为数据传递
SETB E
NOP
CLR E
RET
;系统资源 a
LcdWc: ;送控制字子程序(检测忙信号)
CALL WaitIdle
LcdWcn: ;送控制字子程序(不检测忙信号)
CLR RS
CLR RW
MOV DPORT,A
SETB E
NOP
CLR E
RET
;系统资源:一个堆栈
LCDPOS: ;设置第(XPOS,YPOS)个字符的DDRAM地址
PUSH ACC
MOV A,XPOS
ANL A,#0FH ;X位置范围(0到15)
MOV XPOS,A
MOV A,YPOS
ANL A,#01H ;Y位置范围(0到1)
MOV YPOS,A
CJNE A,#00,LPS_LAY ;(第一行)X: 第0----15个字符
MOV A,XPOS ; DDRAM: 0----0FH
JMP LPS_LAX
LPS_LAY:
MOV A,XPOS ;(第二行)X: 第0----15个字符
ADD A,#40H ;DDRAM: 40----4FH
LPS_LAX:
ORL A,#80H ;设置DDRAM地址
CALL LCDWC
POP ACC
RET
;系统资源 a
RSTLCD:
MOV R6,#15 ;如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30
CALL DELAY ;延时15毫秒
MOV A,#38H
CALL LCDWCN
MOV R6,#5 ;延时5毫秒,如晶振频率高于12M,加大该值
CALL DELAY
CALL LCDWCN
MOV R6,#5 ;延时5毫秒,如晶振频率高于12M,加大该值
CALL DELAY
CALL LCDWCN
MOV A,#38H ;显示模式设置
CALL LCDWC
MOV A,#08H ;显示关闭
CALL LCDWC
MOV A,#01H ;显示清屏
CALL LCDWC
MOV A,#06H ;显示光标移动位置
CALL LCDWC
MOV A,#0CH ;显示开及光标设置
CALL LCDWC
RET
;系统资源:r4,r5,r6
DELAY:
D_1: MOV R5,#25 ;延时子程序(1MS)
D_2: MOV R4,#20
DJNZ R4,$
DJNZ R5,D_2
DJNZ R6,D_1 ;R6用作参数传递
RET
END