用单片机控制字符型液晶显示模块.docx
《用单片机控制字符型液晶显示模块.docx》由会员分享,可在线阅读,更多相关《用单片机控制字符型液晶显示模块.docx(14页珍藏版)》请在冰豆网上搜索。
用单片机控制字符型液晶显示模块
用单片机控制字符型液晶显示模块
液晶显示器以其微功耗、体积小、显示容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
本文介绍字符型液晶模块HS162-4与单片机89C51的接口与编程方法。
HS162-4液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字等。
下面以常用的2行16个字的显示方式介绍HS162-4液晶模块的使用方法。
HS162-4采用标准的16脚接口,
其中VSS为地电源,VDD接5V正电源,
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“阴影”,使用时可以通过一个10K的电位器调整对比度。
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
LEDA和LEDK为背光电源,LEDA接5V正电源,LEDK接GND。
D0~D7为8位双向数据线。
HS162-4液晶模块部的字符发生存储器(CGROM)已经存储了128个不同的点阵字符图形,如表1所示,这些字符有:
阿拉伯数字、英文字母的大小写和常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
表1CGROM中的字符代码与图形对应关系
高位低位
0000
0010
0011
0100
0101
0110
0111
0000
CGRAM
0
P
\
p
0001
!
1
A
Q
a
q
0010
”
2
B
R
b
r
0011
#
3
C
S
c
s
0100
$
4
D
T
d
t
0101
%
5
E
U
e
u
0110
&
6
F
V
f
v
0111
’
7
G
W
g
w
1000
(
8
H
X
h
x
1001
)
9
I
Y
i
y
1010
*
:
J
Z
j
z
1011
+
;
K
[
k
{
1100
<
L
¥
l
|
1101
-
=
M
]
m
}
1110
.
>
N
^
n
→
1111
/
?
O
_
o
←
HS162-4液晶模块部的控制器共有11条控制指令,如表2所示,
指令
指令码
说明
RS
R/W
D0
D1
D2
D3
D4
D5
D6
D7
清屏
0
0
0
0
0
0
0
0
0
1
清显示,光标回位
光标返回
0
0
0
0
0
0
0
0
1
*
ADD=0时,回原位
输入方式
0
0
0
0
0
0
0
1
I/D
S
决定是否移动以及移动方向
显示开关
0
0
0
0
0
0
1
D
C
B
D-显示,C-光标,B-光标闪烁
移位
0
0
0
0
0
1
S/C
R/L
*
*
移动光标及整体显示
功能设置
0
0
0
0
1
DL
N
F
*
*
DL-数据位数,L-行数,F-字体
CGRAM地址设置
0
0
0
1
A5A4A3A2A1A0
设置CGRAM的地址
DDRAM地址设置
0
0
1
A6A5A4A3A2A1A0
设置DDRAM的地址
忙标志/读地址计数器
0
1
BF
AC6AC5AC4AC3AC2C1AC0
读出忙标志位(BF)及AC值
CGRAM/DDRAM数据写
1
0
写数据
将容写入RAM中
CGRAM/DDRAM数据读
1
1
读数据
将容从RAM中读出
补充说明
I/D:
1-增量方式、0-减量方式
S:
1-位移
S/C:
1-显示移位、0-光标移位
R/L:
1-右移、0-左移
DL:
1-8位、0-4位
N:
1-2行、0-1行
F:
1-5X10字体、0-5X7字体
BF:
1-正在执行部操作、0-可接收指令
DDRAM:
显示数据RAM
CGRAM:
字符发生器RAM
ACG:
CGRAM地址
ADD:
DDRAM地址及光标地址
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置
指令2:
光标复位,光标返回到地址00H
指令3:
光标和显示模式设置
I/D:
光标移动方向,高电平右移,低电平左移
S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示
C:
控制光标的开与关,高电平表示有光标,低电平表示无光标
B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标
指令6:
功能设置命令
DL:
高电平时为4位总线,低电平时为8位总线
N:
低电平时为单行显示,高电平时双行显示
F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
指令7:
字符发生器RAM地址设置
指令8:
DDRAM地址设置
指令9:
读忙信号和光标地址BF:
忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据
指令11:
读数据
HS162-4液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示。
P32
P33
P34
P10
P11
P12
P13
P14
P15
P16
P17
RS
RW
E
D0
D1
D2
D3
D4
D5
D6
D7
AT89C51
单片机
HS162-41
液晶模块
VDD
VO
VSS
VDD+5V
10K
电位器
VSSGND
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3是HS162-4的部显示地址.
显示位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第1行
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
第2行
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
即,第1行的显示地址应为:
80H+显示位置;第2行的显示地址应为:
C0H+显示位置。
以下是在液晶模块的第1行显示数字“0-9:
;<=>?
”,在第2行显示字符“A—P”的程序:
RSEQUP3.2
RWEQUP3.3
EEQUP3.4
DATEQU30H;命令单元
DAT1EQU31H;数据单元
AJMPSTART
ORG0030H
START:
MOVDAT,#01H;清屏
ACALLENABLE
MOVDAT,#38H;8位2行5x7点阵
ACALLENABLE
MOVDAT,#0FH;显示器开、光标开、闪烁开
ACALLENABLE
MOVDAT,#06H;文字不动,光标自动右移
ACALLENABLE
MOVR3,#2
MOVDAT,#080H;写入显示起始地址(第一行第一个位置)
ACALLENABLE
MOVDAT1,#30H;数字0的ASCII码
ACALLDSP0
MOVDAT,#0C0H;写入显示起始地址(第二行第一个位置)
ACALLENABLE
MOVDAT1,#61H;字母a的ASCII码
ACALLDSP0
SJMP$
DSP0:
MOVR2,#16
DSP1:
ACALLRDY
MOVP1,DAT1
SETBRS
CLRRW
CLRE
SETBE
INCDAT1
DJNZR2,DSP1
RET
ENABLE:
ACALLRDY;写入控制命令的子程序
MOVP1,#0FFH
CLRRS
CLRRW
MOVP1,DAT
CLRE
SETBE
RET
RDY:
MOVP1,#0FFH;判断液晶显示器是否忙的子程序
CLRRS
SETBRW
CLRE
SETBE
JBP1.7,RDY;如果P1.7为高电平表示忙就循环等待
RET
END
程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。
注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序RDY,然后输入显示位置的地址,最后输入要显示的字符的ASCII码。
液晶显示示例程序
RSEQUP3.2
RWEQUP3.3
EEQUP3.4
DATEQU30H
DAT1EQU31H
START:
MOVDAT,#01H;CLEAR
ACALLENABLE
MOVDAT,#38H;8bit2Rol5*7
ACALLENABLE
MOVDAT,#0FH;OPENLCD
ACALLENABLE
MOVDAT,#06H;LEFTTORIGHT
ACALLENABLE
MOVR3,#2
MOVDAT,#080H;FirstAddr
ACALLENABLE
MOVDAT1,#30H
ACALLDSP0
MOVDAT,#0C0H
ACALLENABLE
MOVDAT1,#61H
ACALLDSP0
HERE:
RET;SJMPHERE
DSP0:
MOVR2,#16
DSP1:
ACALLRDY
MOVP1,DAT1
SETBRS
CLRRW
nop
CLRE
nop
SETBE
INCDAT1
DJNZR2,DSP1
RET
ENABLE:
ACALLRDY
MOVP1,#0FFH
CLRRS
CLRRW
MOVP1,DAT
CLRE
nop
SETBE
RET
RDY:
MOVP1,#0FFH
CLRRS
SETBRW
CLRE
nop
SETBE
MOVR1,#0FH
DDT8:
MOVR0,#0FFH
DDT7:
DJNZR0,DDT7
DJNZR1,DDT8
RET
END