lcd1602 +c51 介绍
文章目录
LCD1602介绍
LCD1602液晶在实际的产品运用中也是比较多产品,应为前一段时间也正好用到了,所以今天就对LCD1602液晶做一个总结,方便以后阅读同时也希望能够帮住到需要的人,总结的可能存在错误欢迎指出!
所谓的1602是指显示的时候,有2行内容每行有16个字符。其实这类字符型产品都可以这样解读比如:lcd12864就是有128行64列。目前市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理大多相同。因此基于HD44780写的液晶控制程序可以很方便适用于市面上大多数字符型液晶产品。
1602引脚信号说明
字符型LCD1602通常分为14条引脚和16引脚两种,16引脚多出来的是背光电源线VCC(15引脚)和地线(16引脚),其控制原理与14引脚LCD完全一样,引脚定义如下表:
引脚号 | 引脚名 | 电平 | 输入/输出 | 作用 |
---|---|---|---|---|
1 | Vss | 电源地 | ||
2 | Vcc | 电源(+5V) | ||
3 | Vee | 对比调整电压 | ||
4 | RS | 0/1 | 输入 | 0=输入指令;1=输出数据 |
5 | R/W | 0/1 | 输入 | 0=向LCD写入指令或数据; 1=从LCD读取信息 |
6 | E | 1,1->0 | 输入 | 使能信号,1时读取信息,1->0(下降沿)执行指令 |
7 | DB0 | 0/1 | 输入/输出 | 数据总线line0(最低位) |
8 | DB1 | 0/1 | 输入/输出 | 数据总线line1 |
9 | DB2 | 0/1 | 输入/输出 | 数据总线line2 |
10 | DB3 | 0/1 | 输入/输出 | 数据总线line3 |
11 | DB4 | 0/1 | 输入/输出 | 数据总线line4 |
12 | DB5 | 0/1 | 输入/输出 | 数据总线line5 |
13 | DB6 | 0/1 | 输入/输出 | 数据总线line6 |
14 | DB7 | 0/1 | 输入/输出 | 数据总线line7 |
15 | A | +Vcc | LCD背光灯源正极 | |
16 | K | 接地 | LCD背光灯源负极 |
控制器接口介绍
1、基本操作时许
- 1.1读状态:输入:RS=L,RW=H,E=H
----输出:D0~D7=状态字 - 1.2写指令:输入:RS=L,RW=L,D0~D7=指令码
----输出:无 - 1.3读数据:输入:RS=H,RW=H,E=H
----输出:D0~D7=数据 - 1.4写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲
----输出:无
2、状态字说明
STA7 D7 | STA6 D6 | STA5 D5 | STA4 D4 | STA3 D3 | STA2 D2 | STA1 D1 | STA0 D0 |
---|
STA0-6 | 当前数据地址指针的数值 | |
---|---|---|
STA7 | 读写操作使能 | 1:禁止 0:允许 |
对控制器每次进行读写操作前,都必须进行读写检测,确保STA7为0
3、指令说明
初始化设置
显示模式设置
显示开/关光标设置
数据控制
控制器内部没有一个数据地址指针,可以通过他们来访问内部的全部80字节RAM。
其他设置
指令码 | 功能 |
---|---|
01H | 显示清屏:1.数据指针清零 2.所有显示清零 |
02H | 显示回车:1.数据指针清零 |
初始化过程:
延时
写指令38H
延时
写指令38H
延时
写指令38H
(每次写指令、读/写数据操作之前均需检测信号)
写指令38H:显示模式设置
写指令08H:显示关闭
写指令01H:显示清屏
写指令06H:显示光标移动设置
写指令0CH:显示开及光标设置
代码:
void LcdInit(){
//LCD初始化程序
Delay1ms(15);
LcdWriteCom(0x38);
Delay1ms(5);
LcdWriteCom(0x38);
Delay1ms(5);
LcdWriteCom(0x38);//设置显示模式
LcdWriteCom(0x0C);//开显示不显示光标,光标不闪烁
LcdWriteCom(0x06);//写一个数据,指针加1
LcdWriteCom(0x01);//清屏
LcdWriteCom(0x80);//设置数据指针起点。
}
RAM地址映射
HD44780内置DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,地址和屏幕的对应关系如下:
显示位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … … | 40 |
---|---|---|---|---|---|---|---|---|---|
第一行 | 00H | 01H | 02H | 03H | 04H | 05H | 06H | … … | 27H |
第二行 | 40H | 41H | 42H | 43H | 44H | 45H | 46H | … … | 67H |
也就是说想要在LCD1602屏幕上的第一行第一个位置显示一个“A”,就要向DDRAM的00H地址写“A”字的代码就OK了,但具体的写入是要按照LCD模块的指令格式来进行的。
但是我们发现每一行有40个地址,而我们们每行只能显示16个字符,其实际多的位置可以实现字符的移动,我们在看大佬作品的时候可能会见到有的字符是从左面移过来,他的实现形式就用到了着些多的地址。将数据先写到未显示的地址然后使用指令进行左移就可以了。
那么1602显示的地址又是什么呐?下图就是DDRAM地址与现实位置的对应关系。
控制时序图
1、读操作时序图:
2、写操作时序图:
3、时序参数
代码实现
LCDE = E //使能信号
写入命令
RS=L,RW=L,D0~D7=指令码,E=高脉冲。
void LcdWriteCom(unsigned char com){
//写入命令
RS = 0;
RW = 0;
GPIO_LCD=com;
Delay1ms(10);
LCDE = 1; //给一个高脉冲
Delay1ms(10);
LCDE = 0;
}
写数据
RS=Hÿ