[本文由创梦电子工作室原创,转载请注明
出处
2004.04.15]
那么怎么才能在LCM上显示字出来呢?
过程如下:
1.初始化模块
根据LCM的使用规格,在模块的电压上电后,模块内有复位电路自动复位,当内部复位电路不能复位时,可用软件方法来复位;
过程如下:
a.当电源升到4.5V后,等待15ms或更长时间
b.执行如下指令
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
0 |
0 |
0 |
1 |
1 |
x |
x |
x |
x |
x |
注:执行命令的时候不要查询BF状态
c.等待4.1秒或更长
d.再运行
b步――>
c步
一次
e.查BF信号,直到BF=0
f.软件复位结束
2.首先根据需要,用指令表中的前6条指令,设定好LCM的工作显示方式
3.设定DDRAM地址(第8条指令)
DDRAM(显示数据),可以理解为是字符在LCM上的位置对应相关RAM的地址
显示位 |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
… |
39 |
40 |
DDRAM
地址(H) |
第一行 |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
… |
26 |
27 |
第二行 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
… |
66 |
67 |
设置DDRAM地址的指令为
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
0 |
0 |
1 |
DDRAM地址,范围0~127 |
例如,你要在16x2的LCM第二行3号位置上显示字符,那么DDRAM地址就是
42H
因为写入地址的要求DB7是高电平,所以指令码应该是
10000000B(80H)+01000010B(42H)=11000010B
51汇编中可以用
MOV A,DDRAM地址
ORL A,#80H
来实现第8位置1,最终的指令码放在A中
4.向DDRAM写数据――>LCM显示字符
DDRAM的数据对应的是CGROM或CGRAM中的字符码值
CGROM中已经存储了192个不同点阵字符图形,见码表
如
“A”的代码是01000001B
,仔细观察码表可以发现它和ASCII码值是一一对应的
其中00000000B~00000111B的地址是留给CGRAM,用户可以自定义点阵字符,用户可以自定义8或4种字符,详见后面自定义显示字符
向DDRAM写数据指令:
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
1 |
0 |
DATA |
DATA部分就是要显示的字符的代码,前面已经提起,它和ASCII码值是一一对应并相等的,所以只要将要显示字符的ASCII码值当做DATA使用即可,这样方便用户编程,无需要一个字符一个字符的去查表
比如要显示
“K”,取得
“K”的码值
MOV A,#’K’ ;将K的ASCII码送到A寄存器中