LCD1602
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)
注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚 | 符号 | 功能说明 |
1 | VSS | 一般接地 |
2 | VDD | 接电源(+5V) |
3 | V0 | 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 |
4 | RS | RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 |
5 | R/W | R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 |
6 | E | E(或EN)端为使能(enable)端,下降沿使能。 |
7 | DB0 | 底4位三态、 双向数据总线 0位(最低位) |
8 | DB1 | 底4位三态、 双向数据总线 1位 |
9 | DB2 | 底4位三态、 双向数据总线 2位 |
10 | DB3 | 底4位三态、 双向数据总线 3位 |
11 | DB4 | 高4位三态、 双向数据总线 4位 |
12 | DB5 | 高4位三态、 双向数据总线 5位 |
13 | DB6 | 高4位三态、 双向数据总线 6位 |
14 | DB7 | 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) |
15 | BLA | 背光电源正极 |
16 | BLK | 背光 电源负极 |
RS | R/W | 操作说明 |
0 | 0 | 写入指令寄存器(清除屏等) |
0 | 1 | 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 |
1 | 0 | 写入数据寄存器(显示各字型等) |
1 | 1 | 从数据寄存器读取数据 |
busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
以下是1602的16进制ASCII码表:
(图片打开是大图)
读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
00H | 01H | 02H | 03H | 04H | 05H | 06H | 07H | 08H | 09H | 0AH | 0BH | 0CH | 0DH | 0EH | 0FH |
40H | 41H | 42H | 43H | 44H | 45H | 46H | 47H | 48H | 49H | 4AH | 4BH | 4CH | 4DH | 4EH | 4FH |
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置: (初始化)
0011 1000 [0x38] 设置16×2显示,5×7点阵,8位数据接口;
显示开关及光标设置:(初始化)
0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)
0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),
N=0(读或写一个字符后地址指针减1 &光标减1),
S=1 且 N=1 (当写一个字符后,整屏显示左移)
s=0 当写一个字符后,整屏显示不移动
数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)
其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
通常推荐的初始化过程:
延时15ms
写指令38H
延时5ms
写指令38H
延时5ms
写指令38H
延时5ms
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令38H
写指令08H 关闭显示
写指令01H 显示清屏
写指令06H 光标移动设置
写指令0cH 显示开及光标设置
完毕
Proteus仿真
使用Proteus仿真1602--即LM016L--依照数据手册说明可能遇到困难,可以尝试采用以下方案解决:
1、数据手册中可能介绍1602内部D0~D7已有上拉,可以使用P0口直接驱动。在Proteus里LM016L内部可能没有,应该人为
加上拉电阻。建议不要使用排阻,使用普通电阻一个一个拉应该可以解决问题;
2、可能碰到不能检测忙信号的问题,尝试使用延时把忙信号拖过去。
参考资料:http://hi.baidu.com/lpxyhncn/blog/item/a15b2bc353622b130ff47731.html
文章评论(0条评论)
登录后参与讨论