[本文由创梦电子工作室原创,转载请注明
出处
2004.04.14]
█LCM模块指令表
指令 |
指令码 |
说明 |
指令周期
fosc=250kHz |
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
清屏
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
清除屏幕,置AC为0,光标回位。 |
1.64ms |
光标返回
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
* |
DDRAM地址为0,显示回原位,DDRAM内容不变. |
1.64ms |
设置输入
方式 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
设置光标移动方向并指定显示是否移动。 |
40µs |
显示开关 |
0
|
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
设置显示开或关D、光标开关C、光标所在字符闪烁B. |
40µs |
移位
|
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
* |
* |
移动光标及整体显示,同时不改变DDRAM内容。 |
40µs |
功能设置
|
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
* |
* |
设置接口数据位数DL、显示行数L、字符字体F。 |
40µs |
CGRAM
地址设置 |
0 |
0 |
0 |
1 |
ACG |
设置CGRAM地址。设置后发送接收数据。 |
40µs |
DDRAM
地址设置 |
0 |
0 |
1 |
ADD |
设置DDRAM地址。设置后发送接收数据。 |
40µs |
忙标志/读地址计数器 |
0 |
1 |
BF |
AC |
读忙标志BF标志正在执行内部操作并读地址计数器内容。 |
0µs |
CGRAM/DDRAM数据写 |
1 |
0 |
写数据 |
从CGRAM或DDRAM写数据。 |
40µs |
CGRAM/DDRAM数据读 |
1 |
1 |
读数据 |
从CGRAM或DDRAM读数据。 |
40µs |
|
I/D=1:增量方式;I/D=0:减量方式
S=1:移位
S/C=1:显示移位;S/C=0:光标移位
R/L=1:右移;R/L=0:左移
DL=1:8位;DL=0:4位
N=1:2行;N=0:1行
F=1:5
x 10字体
F=0:5
x 7字体
BF=1:执行内部操作;BF=0可接收指令 |
DDRAM:显示数据RAM
CGRAM:字符发生器RAM
ACG:CGRAM地址
ADD:DDRAM地址及光标
地址
AC:地址计数器,用于
DDRAM和CGRAM |
执行周期主频改变而改变。
例如当fcp或
fosc=270KHZ
时:40μs
x
250/270=37μs |
LCM模块执行指令的基本过程
选择RS、R/W操作(4种)
à
数据线准备数据àE端从高电平跳到低电平,指令执行
比如我们要执行
“清屏”
指令,步骤如下:
1.
设定LCM的各引脚电平如下
(0=低电平
1=高电平)
RS |
R/W |
E |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2.
将E端置0(低电平)
3.
将E端电平恢复高电平
用51汇编的程序如下(以图3电路驱动)
;-----------------------------------------------
setb
P2.7
;E=1
clr
P3.0
;RS=0
clr
P3.1
;RW=0
mov P0,#00000001B
;送数据到P0口
clr
P2.7
;执行
setb
P2.7
;E端恢复高电平
;--------------------------------------------------
LCM在运行的时候,会生成一个忙标志位BF,如果BF=1的时候,LCM不能接收命令和数据,BF=0的时候表示不忙,可以接收命令和数据。所以在运行各个命令之前,先查询BF是否=0,如果=1的话等待,直到BF=0才发送指令给它。
查询BF的指令为
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
0 |
1 |
BF |
x |
x |
x |
x |
x |
x |
x |
就是将
RS置0,R/W端置1就可以在DB7(LCM14脚)端得到BF信号
这里用51汇编定义一段BF查询子程序(一下简称Busy_wait):
功能:
直到BF=0才退出该程序
;------------------------------------------------
RSPIN EQU
P2.7
RWPIN EQU P3.0
EPIN EQU
P3.1
LCM_D data
P0 ; LCM BUS
先定义引脚,方便程序修改编辑
;BF查询子程序
BUSY_WAIT:
MOV
P0,#0FFH ;将p0口置1
CLR
RSPIN ;RS=0
SETB
RWPIN ; RW=1
SETB
EPIN ; E=高电平
WT_BF:
NOP
;
JB
P0.7,WT_BF ; DB7=1 LCD控制器忙
NOP
CLR
EPIN
; E=0
RET ; DB7=0 LCD控制器空闲
,退出BF等待程序
;--------------------------------------------------------
所以执行一个指令具体的过程就是
由上述,送一个指令需要两个过程:
检查BF――>输入指令
1
2
3
4
|