LCD1602应用详解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们往DDRAM里的00H地址处送一个数据,譬如 0x31(数字1的代码)并不能显示1出来。 这是令初学者很容易出错的地方,原因就是如果 你要想在DDRAM的00H地址处显示数据,则必 须将00H加上80H,即0X80+0x00,若要在DDRAM 的01H处显示数据,则必须将01H加上80H即 0X80+ 0x01。依次类推。
及光标是否闪烁。参数设定的情况如下:
位名 设置
D 0=显示功能关
1=显示功能开
C 0=无光标
1=有光标
B 0=光标不闪烁
1=光标闪烁
设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位。参数
设定的Leabharlann Baidu况如下:
S/C
R/L
设定情况
0
0 光标左移1格,且AC值减1
0
1 光标右移1格,且AC值加1
设定CGRAM地址指令 功能:设定下一个要存入数据的CGRAM的地址。
设定DDRAM地址指令 功能:设定下一个要存入数据的CGRAM的地址。 (注意这里我们送地址的时候应该 是0x80+Address,这也是前面说到写地址命令的时 候要加上0x80的原因)
读取忙信号或AC地址指令 功能:
<1> 读取忙碌信号BF的内容,BF=1表示液 晶显示器忙,暂时无法接收单片机送来的数据或 指令; 当BF=0时,液晶显示器可以接收单片机送 来的数据或指令;
{
lcd_wdat(diap_2[m]); //显示字符
m++;
}
while(1)
{}
}
1
0 显示器上字符全部左移一格,但
光标不动
1
1 显示器上字符全部右移一格,但
光标不动
功能设定指令 (非常重要的指令)
功能:设定数据总线位数、显示的行数 及字型。参数设定的情况如下:
位名
设置
DL
0=数据总线为4位
总线为8位
N
0=显示1行
2行
F
0=5×7点阵/每字
符 1=5×10点阵/每字符
1=数据 1=显示
LCD1602
原码工作室
LCD1602原理
LCD(Liquid Crystal Display):液晶显示 器的缩写,一种被动式的显示器,即液晶本身并 不发光,而是经液晶经过处理后能改变光线通过 方向的特性,而达到白底黑字或黑底白字显示的 目的。
液晶显示器具有功耗低、抗干扰能力强等优 点,广泛用在仪器仪表和控制系统中。
也就是说想要在LCD1602屏幕的第一行第一列显示一个 “A”字,就要向DDRAM的00H地址写入“A”的代码就行了。但具 体的写入是要按LCD模块的指令格式来进行的。一行有40个地 址 在1602中我们就用前16个就行了。
第二行也一样用前16个地址。 对应如下: DDRAM地址与显示位置的对应关系
输入模式设置指令
功能:设定每次写入1位数据后光标的移位方向, 并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:
位名
设置
I/D
0=写入新数据后光标左移
入新数据后光标右移
S
0=写入新数据后显示屏不移动
入新数据后显示屏整体右移1个字
1=写 1=写
显示开关控制指令
功能:控制显示器开/关、光标显示/关闭以
1602液晶模块内部的字符发生存储器 (CGROM)已经存储了160个不同的点阵字符 图形,如下表所示,这些字符有:阿拉伯数 字、英文字母的大小写、常 用的符号、和 日文假名等,每一个字符都有一个固定的代 码,比如大写的英文字母“A”的代码是 01000001B(41H),显示时模块把地址41H 中的点 阵字符图形显示出来,我们就能看 到字母“A”
lcd_init();
//初始化LCD
lcd_pos(0);
//设置显示位置为第一行的第1个字符
while(diap_1[m] != '\0')
{
lcd_wdat(diap_1[m]); //显示字符
m++;
}
lcd_pos(0x40);
//设置显示位置为第二行第1个字符
m = 0;
while(diap_2[m] != '\0')
<2> 读取地址计数器(AC)的内容。
数据写入DDRAM或CGRAM指令 功能: <1> 将字符码写入DDRAM,以使液晶显示
屏显示出相对应的字符; <2> 将用户自己设计的图形存入CGRAM。
从CGRAM或DDRAM读出数据的指令
功能:读取DDRAM或CGRAM中的内容。
基本操作时序:
读状态
输入:RS=L,RW=H,E=H
写数据 输入:RS=H,RW=L,E=下降沿脉冲, DB0~DB7=数据
输出:无
清屏指令
功能:
<1> 清除液晶显示器,即将DDRAM的内容 全部填入“空白”的字符码20H;
<2> 光标归位,即将光标撤回液晶显示屏的 左上方;
<3> 将地址计数器(AC)的值设为0。
光标归位指令 功能:
<1> 把光标撤回到显示器的左上方; <2> 把地址计数器(AC)的值设置为0; <3> 保持DDRAM的内容不变
写指令
输入:RS=0,RW=0,E=下降沿脉
冲,DB0~DB7=指令码
写数据
输入:RS=1,RW=0,E=下降沿脉冲,
DB0~DB7=数据
时序参数
LCD1602与单片机连接的参考电路
LCD1602静态显示程序设计
bit lcd_busy() {
bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
上一个函数很相似
LCD_data = dat;
,只是时序不同,
delayNOP();
所以一个是写指令
LCD_EN = 1;
,一个是写数据。
delayNOP();
LCD_EN = 0;
}
void lcd_init() {
delay(15); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5);
对DDRAM的内容和地址操作,HD44780的指令 集及其设置说明,共有11条指令:
基本操作时序: 读状态 输入:RS=L,RW=H, E=H
输出:DB0~DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿 脉冲,DB0~DB7=指令码
输出:无
读数据 输入:RS=H,RW=H,E=H 输出:DB0~DB7=数据
LCD1602实物图
1602LCD的特性
+5V电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光 标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有160个5X7点阵的字型的字符发生器 CGROM 8个可由用户自定义的5X7的字符发生器
引脚及功能简介
LCD1602内部结构
(用自定义CGRAM,显示效果也不好) 1602LCD是指显示的内容为16X2,即可以显示两行, 每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯 片的,控制原理是完全相同的,因此基于HD44780写的控 制程序可以很方便地应用于市面上大部分的字符型液晶。
这个函数的作用 是写指令到LCD, cmd是待写的指令, 待写的指令在正确 的时序下输入D0~D7
void lcd_wdat(unsigned char dat)
{
while(lcd_busy());
LCD_RS = 1;
这个函数是写显
LCD_RW = 0;
示数据到LCD,与
LCD_EN = 0;
3个部分:LCD控制器、LCD驱动器、LCD显示装置
LCD1602液晶接口
HD44780工作原理
HD44780内置了DDRAM(显示数据存储 RAM),CGROM(字符存储ROM)和CGRAM(用户自定义 RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代 码。共80个字节,其地址和屏幕的对应关系如下表:
LCD显示器的分类
按排列形状分:字段型、点阵字符型和点阵 图形。 (1)字段型
广泛用于电子表、数字仪表、计算器中。 (2)点阵字符型
显示字母、数字、符号。它是由5×7或5×4 点阵组成,广泛应用在单片机应用系统中。 (3)点阵图形型
笔记本电脑和彩色电视等设备中。
1602LCD液晶简介
1602液晶也叫1602字符型液晶 它是一种专门用来显 示字母、数字、符号等的点阵型液晶模块 它有若干个5X7 或者5X11等点阵字符位组成,每个点阵字符位都可以显 示一个字符。每位之间有一个点距的间隔 每行之间也有 也有间隔 起到了字符间距和行间距的作用,正因为如此 所以他不能显示图形
这个函数的作 用是检查LCD是否 处于忙碌状态,如 果返回值是1则表 示处于忙状态,需 要等待,返回值为 0则表示LCD处于 空闲状态,可写指 令或者数据。
void lcd_wcmd(unsigned char cmd) {
while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); LCD_data = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
写指令 DB7=指令码
读数据
输出:DB0~DB7=状态字 输入:RS=L,RW=L,E=下降沿脉冲,DB0~
输出:无 输入:RS=H,RW=H,E=H
输出:DB0~DB7=数据
写数据
输入:RS=H,RW=L,E=下降沿脉冲,
DB0~DB7=数据
输出:无
读状态 读数据
输入:RS=0,RW=1,E=1 输入:RS=1,RW=1,E=1
void lcd_pos(unsigned char pos) {
lcd_wcmd(pos | 0x80); //数据指针=80+地址 变量 }
这个函数是设定显示的位置,其中pos即为 预设定的位置。
void main(void)
{
unsigned char m=0;
P0=0xFF;
//置P0口
lcd_wcmd(0x0c); delay(5); lcd_wcmd(0x06); delay(5); lcd_wcmd(0x01); delay(5); }
//16*2显示,5*7点阵,8位数据
//显示开,关光标 //移动光标 //清除LCD的显示内容
这个 函数的作 用是对 LCD进行 初始化设 置,在 main函数 中需要首 先对LCD 进行初始 化才能正 确的操作 LCD
及光标是否闪烁。参数设定的情况如下:
位名 设置
D 0=显示功能关
1=显示功能开
C 0=无光标
1=有光标
B 0=光标不闪烁
1=光标闪烁
设定显示屏或光标移动方向指令
功能:使光标移位或使整个显示屏幕移位。参数
设定的Leabharlann Baidu况如下:
S/C
R/L
设定情况
0
0 光标左移1格,且AC值减1
0
1 光标右移1格,且AC值加1
设定CGRAM地址指令 功能:设定下一个要存入数据的CGRAM的地址。
设定DDRAM地址指令 功能:设定下一个要存入数据的CGRAM的地址。 (注意这里我们送地址的时候应该 是0x80+Address,这也是前面说到写地址命令的时 候要加上0x80的原因)
读取忙信号或AC地址指令 功能:
<1> 读取忙碌信号BF的内容,BF=1表示液 晶显示器忙,暂时无法接收单片机送来的数据或 指令; 当BF=0时,液晶显示器可以接收单片机送 来的数据或指令;
{
lcd_wdat(diap_2[m]); //显示字符
m++;
}
while(1)
{}
}
1
0 显示器上字符全部左移一格,但
光标不动
1
1 显示器上字符全部右移一格,但
光标不动
功能设定指令 (非常重要的指令)
功能:设定数据总线位数、显示的行数 及字型。参数设定的情况如下:
位名
设置
DL
0=数据总线为4位
总线为8位
N
0=显示1行
2行
F
0=5×7点阵/每字
符 1=5×10点阵/每字符
1=数据 1=显示
LCD1602
原码工作室
LCD1602原理
LCD(Liquid Crystal Display):液晶显示 器的缩写,一种被动式的显示器,即液晶本身并 不发光,而是经液晶经过处理后能改变光线通过 方向的特性,而达到白底黑字或黑底白字显示的 目的。
液晶显示器具有功耗低、抗干扰能力强等优 点,广泛用在仪器仪表和控制系统中。
也就是说想要在LCD1602屏幕的第一行第一列显示一个 “A”字,就要向DDRAM的00H地址写入“A”的代码就行了。但具 体的写入是要按LCD模块的指令格式来进行的。一行有40个地 址 在1602中我们就用前16个就行了。
第二行也一样用前16个地址。 对应如下: DDRAM地址与显示位置的对应关系
输入模式设置指令
功能:设定每次写入1位数据后光标的移位方向, 并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:
位名
设置
I/D
0=写入新数据后光标左移
入新数据后光标右移
S
0=写入新数据后显示屏不移动
入新数据后显示屏整体右移1个字
1=写 1=写
显示开关控制指令
功能:控制显示器开/关、光标显示/关闭以
1602液晶模块内部的字符发生存储器 (CGROM)已经存储了160个不同的点阵字符 图形,如下表所示,这些字符有:阿拉伯数 字、英文字母的大小写、常 用的符号、和 日文假名等,每一个字符都有一个固定的代 码,比如大写的英文字母“A”的代码是 01000001B(41H),显示时模块把地址41H 中的点 阵字符图形显示出来,我们就能看 到字母“A”
lcd_init();
//初始化LCD
lcd_pos(0);
//设置显示位置为第一行的第1个字符
while(diap_1[m] != '\0')
{
lcd_wdat(diap_1[m]); //显示字符
m++;
}
lcd_pos(0x40);
//设置显示位置为第二行第1个字符
m = 0;
while(diap_2[m] != '\0')
<2> 读取地址计数器(AC)的内容。
数据写入DDRAM或CGRAM指令 功能: <1> 将字符码写入DDRAM,以使液晶显示
屏显示出相对应的字符; <2> 将用户自己设计的图形存入CGRAM。
从CGRAM或DDRAM读出数据的指令
功能:读取DDRAM或CGRAM中的内容。
基本操作时序:
读状态
输入:RS=L,RW=H,E=H
写数据 输入:RS=H,RW=L,E=下降沿脉冲, DB0~DB7=数据
输出:无
清屏指令
功能:
<1> 清除液晶显示器,即将DDRAM的内容 全部填入“空白”的字符码20H;
<2> 光标归位,即将光标撤回液晶显示屏的 左上方;
<3> 将地址计数器(AC)的值设为0。
光标归位指令 功能:
<1> 把光标撤回到显示器的左上方; <2> 把地址计数器(AC)的值设置为0; <3> 保持DDRAM的内容不变
写指令
输入:RS=0,RW=0,E=下降沿脉
冲,DB0~DB7=指令码
写数据
输入:RS=1,RW=0,E=下降沿脉冲,
DB0~DB7=数据
时序参数
LCD1602与单片机连接的参考电路
LCD1602静态显示程序设计
bit lcd_busy() {
bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
上一个函数很相似
LCD_data = dat;
,只是时序不同,
delayNOP();
所以一个是写指令
LCD_EN = 1;
,一个是写数据。
delayNOP();
LCD_EN = 0;
}
void lcd_init() {
delay(15); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5);
对DDRAM的内容和地址操作,HD44780的指令 集及其设置说明,共有11条指令:
基本操作时序: 读状态 输入:RS=L,RW=H, E=H
输出:DB0~DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿 脉冲,DB0~DB7=指令码
输出:无
读数据 输入:RS=H,RW=H,E=H 输出:DB0~DB7=数据
LCD1602实物图
1602LCD的特性
+5V电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光 标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有160个5X7点阵的字型的字符发生器 CGROM 8个可由用户自定义的5X7的字符发生器
引脚及功能简介
LCD1602内部结构
(用自定义CGRAM,显示效果也不好) 1602LCD是指显示的内容为16X2,即可以显示两行, 每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯 片的,控制原理是完全相同的,因此基于HD44780写的控 制程序可以很方便地应用于市面上大部分的字符型液晶。
这个函数的作用 是写指令到LCD, cmd是待写的指令, 待写的指令在正确 的时序下输入D0~D7
void lcd_wdat(unsigned char dat)
{
while(lcd_busy());
LCD_RS = 1;
这个函数是写显
LCD_RW = 0;
示数据到LCD,与
LCD_EN = 0;
3个部分:LCD控制器、LCD驱动器、LCD显示装置
LCD1602液晶接口
HD44780工作原理
HD44780内置了DDRAM(显示数据存储 RAM),CGROM(字符存储ROM)和CGRAM(用户自定义 RAM)。
DDRAM就是显示数据RAM,用来寄存待显示的字符代 码。共80个字节,其地址和屏幕的对应关系如下表:
LCD显示器的分类
按排列形状分:字段型、点阵字符型和点阵 图形。 (1)字段型
广泛用于电子表、数字仪表、计算器中。 (2)点阵字符型
显示字母、数字、符号。它是由5×7或5×4 点阵组成,广泛应用在单片机应用系统中。 (3)点阵图形型
笔记本电脑和彩色电视等设备中。
1602LCD液晶简介
1602液晶也叫1602字符型液晶 它是一种专门用来显 示字母、数字、符号等的点阵型液晶模块 它有若干个5X7 或者5X11等点阵字符位组成,每个点阵字符位都可以显 示一个字符。每位之间有一个点距的间隔 每行之间也有 也有间隔 起到了字符间距和行间距的作用,正因为如此 所以他不能显示图形
这个函数的作 用是检查LCD是否 处于忙碌状态,如 果返回值是1则表 示处于忙状态,需 要等待,返回值为 0则表示LCD处于 空闲状态,可写指 令或者数据。
void lcd_wcmd(unsigned char cmd) {
while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); LCD_data = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
写指令 DB7=指令码
读数据
输出:DB0~DB7=状态字 输入:RS=L,RW=L,E=下降沿脉冲,DB0~
输出:无 输入:RS=H,RW=H,E=H
输出:DB0~DB7=数据
写数据
输入:RS=H,RW=L,E=下降沿脉冲,
DB0~DB7=数据
输出:无
读状态 读数据
输入:RS=0,RW=1,E=1 输入:RS=1,RW=1,E=1
void lcd_pos(unsigned char pos) {
lcd_wcmd(pos | 0x80); //数据指针=80+地址 变量 }
这个函数是设定显示的位置,其中pos即为 预设定的位置。
void main(void)
{
unsigned char m=0;
P0=0xFF;
//置P0口
lcd_wcmd(0x0c); delay(5); lcd_wcmd(0x06); delay(5); lcd_wcmd(0x01); delay(5); }
//16*2显示,5*7点阵,8位数据
//显示开,关光标 //移动光标 //清除LCD的显示内容
这个 函数的作 用是对 LCD进行 初始化设 置,在 main函数 中需要首 先对LCD 进行初始 化才能正 确的操作 LCD