📄 液晶显示驱动.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;字符型液晶显示器一般均采用HD44780及兼容芯片作为控制器,因此其接口方式基本是标准的。
;为便于使用,编写了驱动程序软件包
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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
JMP S_RET
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
LCDWD: ;写字符子程序
CALL WAITIDLE
SETB RS
CLR RW
MOV DPORT,A ;以A为数据传递
SETB E
NOP
CLR E
RET
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 ;(第1行)X:第0~15个字符
MOV A,XPOS ;DDRAM:0~0FH
JMP LSP_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
RSTLCD:
MOV R6,#15
CALL DELAY ;延时15ms
MOV A,#38H
CALL LCDWCN
MOV R6,#5 ;延时5ms
CALL DELAY
CALL LCDWCN
MOV R6,#5 ;延时5ms
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
;以下是延时1ms的延时程序,用于液晶显示。该段延时时间不要求精确,这里以12MHz晶振
;为例来设计,可用于低于12MHz晶振的场合。如果晶振频率高于12MHz,适当修改
DELAY:
D1:MOV R5,#25 ;如果12MHz以上晶振,将这个数值改为50
D2:MOV R4,#20
DJNZ R4,$
DJNZ R5,D2
DJNZ R6,D1 ;R6用作参数传递
RET
;该通用软件包可以设置在程序存储器的任何空间
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -