文章目录
在前面章节,我们已经学习过几种显示装置,例如静态数码管、动态数码管、
8*8LED
点阵、串口通信。使用它们可以直观显示一些字符数据,但是它们也有各种局限性,比如显示字符数据太少,硬件设计复杂、代码编写难度大等。这一章就来介绍一种非常简单且常用的显示装置–
LCD1602
液晶显示器,使用它可以显示更多的字符数字。我们开发板上集成了一个
LCD1602
液晶显示器接口,将
LCD1602
液晶对应插入即可。本章要实现的功能是:系统运行时,在
LCD1602
液晶上显示字符信息。
一、LCD1602 介绍
1.LCD1602 简介
1602 液晶也叫 1602 字符型液晶,它能显示 2 行字符信息,每行又能显示 16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个 5x7
或者 5x10
的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。其实物图如下所示:
在上图中可以看到有 16
个管脚孔,从左至右管脚编号顺序是 1-16
,其功能定义如下所示:
下面对几个管脚做下说明:
- 3 脚:VL,液晶显示偏压信号,用于调整
LCD1602
的显示对比度,一般会外接电位器用以调整偏压信号,注意此脚电压为 0 时可以得到最强的对比度。 - 4 脚:RS,数据/命令选择端,当此脚为高电平时,可以对
1602
进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。命令字节,即是用来对LCD1602
的一些工作方式作设置的字节;数据字节,即使用以在1602
上显示的字节。值得一提的是,LCD1602
的数据是 8 位的。 - 5 脚:R/W,读写选择端。当此脚为高电平可对
LCD1602
进行读数据操作,反之进行写数据操作 - 6 脚:E,使能信号,其实是
LCD1602
的数据控制时钟信号,利用该信号的上升沿实现对LCD1602
的数据传输。 - 7~14 脚:8 位并行数据口,而
51
单片机一组IO
也是 8 位,使得对LCD1602
的数据读写大为方便。
在 LCD1602
内部含有 80
个字节的 DDRAM
,它是用来寄存显示字符的。其地址和屏幕的对应关系如下表:
从上图可知,不是所有的地址都可以直接用来显示字符数据,只有第一行中的 00-0F
,第二行中的 40-4F
才能显示,其他地址只能用于存储。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,例如第二行第一个字符的地址是 40H
,那么是否直接写入 40H
就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7
恒定为高电平 1 。所以实际写入的数据应该是
01000000B(40H)+10000000B(80H)=11000000B(C0H)
在 1602
中我们就用前 16
个就行了。第二行也一样用前 16
个地址。
2.LCD1602 常用指令
在使用 LCD1602
时,我们需要掌握一些常用的指令,这些指令对于 LCD1602
初始化是必须的。
-
清屏指令:
0x01
功能:- 清除液晶显示器,即将
DDRAM
的内容全部填入"空白"的ASCII
码20H
; - 光标归位,即将光标撤回液晶显示屏的左上方;
- 将地址计数器(
AC
)的值设为 0。
- 清除液晶显示器,即将
-
模式设置指令:
0x06
功能:设定每次写入 1 位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。I/D
:0=写入新数据后光标左移; 1=写入新数据后光标右移,这里选择1S
:0=写入新数据后显示屏不移动; 1=写入新数据后显示屏整体右移 1 个字符,这里选择0
-
显示开关控制指令:
0x0c
功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。D
:0=显示功能关; 1=显示功能开,这里选择1C
:0=无光标 ;1=有光标,这里选择0B
:0=光标闪烁; 1=光标不闪烁,这里选择0
-
功能设定指令:
0x38
功能:设定数据总线位数、显示的行数及字型。DL
:0=数据总线为 4 位 ;1=数据总线为 8 位,这里设置为1N
:0=显示 1 行; 1=显示 2 行,这里设置为1F
:0=5×7 点阵/每字符 ;1=5×10 点阵/每字符,这里设置为0X
:表示任意值,这里选择0
3.LCD1602 使用
要使用 LCD1602
,首先需要对其初始化,即通过写入一些特定的指令实现。然后选择要在 LCD1602
的哪个位置显示并将所要显示的数据发送到 LCD
的DDRAM
。使用 LCD1602
通常都是用于写数据进去,很少使用读功能。LCD1602
操作步骤如下所示:
(1)初始化
(2)写命令(RS=L),设置显示坐标
(3)写数据(RS=H)
在此,不需要读出它的数据的状态或者数据本身。所以只需要看两个写时序:
- 当要写入指令字,设置
LCD1602
的工作方式时:需要把RS
置为低电平,RW
置为低电平,然后将数据送到数据口D0~D7
,最后E
引脚一个高脉冲将数据写入。 - 当要写入数据字,在
1602
上实现显示时:需要把RS
置为高电平,