51单片机——LCD1602液晶显示

目录

[1. 概述](#1. 概述)

[2. LCD1602](#2. LCD1602)

[2.1 介绍](#2.1 介绍)

[2.2 管脚图](#2.2 管脚图)

[2.3 LCD1602 DDRAM 地址映射图](#2.3 LCD1602 DDRAM 地址映射图)

[2.4 常用指令](#2.4 常用指令)

[2.4.1 清屏指令](#2.4.1 清屏指令)

[2.4.2 模式设置指令](#2.4.2 模式设置指令)

[2.4.3 显示开关控制指令](#2.4.3 显示开关控制指令)

[2.4.4 功能设定指令](#2.4.4 功能设定指令)

[3. LCD1602 使用](#3. LCD1602 使用)

[3.1 写时序](#3.1 写时序)

[3.2 时序图](#3.2 时序图)


1. 概述

前面,已经学习过几种显示装置,例如静/动态数码管、8*8LED点阵、串口通信。

使用它们可以直观显示一些字符数据,但是他们也有各种局限性,比如显示字符数据太少,硬件设计复杂,代码编写难度大等。

现在,介绍一种非常简单且常用的显示装置------LCD1602液晶显示器,使用它可以显示更多的字符数字。

开发板上集成了一个 LCD1602 液晶显示器接口,将 LCD1602 液晶对应插入即可

2. LCD1602
2.1 介绍

LCD1602 液晶也叫1602字符型液晶,它能显示 2 行字符信息,每行显示 16 个字符

它是一种专门用来显示字母、数字、符号的点阵型液晶模块

由若干个 5*7 或 5*10 的点阵字符位组成,每个点阵字符位都可以用来显示一个字符

理解:

可以把 LCD1602 的显示区域想象成一张 "方格纸":

整张纸被划分成 2 行 ×16 列 个独立的 "小方格"(总共 32 个),每个 "小方格" 就是一个点阵字符位

每个 "小方格" 内部,又被细分成 5列×7行(或 5 列 ×10 行)的更小像素点(类似方格纸里的小格子);

一个字符(比如字母 A、数字 8),就是通过控制这个 5×7 小方格内 "哪些像素点亮、哪些熄灭" 来形成的。】

每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距与行间距的作用

也正因如此,它不能很好的显示图片

2.2 管脚图

从上图可以看到有 16 个管脚孔,从左至右管脚编号顺序是 1 - 16,其功能定义如下所示:

对几个管脚做如下说明:

3 脚:VL ,液晶显示偏压信号。用于调整 LCD1602 的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为 0 时可以得到最强的对比度

4 脚:RS ,数据/命令选择端。此脚为高电平时,可以对 1602 进行数据字节(在 1602 上显示的字节)的传输操作,而为低电平时,则是进行命令字节(对1602工作方式进行设置的字节)的传输操作

5 脚:R/W,读写选择端。高电平,读操作,反之,写操作

6 脚:E ,使能信号,LCD1602 的数据控制时钟信号。利用该信号的上升沿实现对 LCD1602 的数据传输

7 - 14脚:8 位并行数据口,而 51 单片机一组 IO 也是8位,使得对 LCD1602 的数据读写大为方便

2.3 LCD1602 DDRAM 地址映射图

在 LCD1602 内部含有 80 个字节的 DDRAM,它是用来寄存显示字符的

其地址与屏幕的对应关系如下:

DDRAM(Display Data RAM)是 LCD1602 内部的显示数据存储器,可以把它理解成一张 "字符地址对照表":

  • 你往某个 DDRAM 地址里写入字符的 ASCII 码(比如写入 41H 对应字母 A),LCD1602 就会在这个地址对应的物理显示位置显示该字符
  • 这张图的核心就是告诉你:"哪个 DDRAM 地址" 对应 "LCD 屏幕上哪个显示位置"。

维度 含义解释
显示位置 列标题的 "1、2、3...40" 是 LCD1602 内部 DDRAM 预留的 "虚拟位置"(每行 40 个),但 LCD1602 物理屏幕仅显示前 16 个位置(这也是 "1602" 中 "16" 的含义:每行显示 16 个字符),17~40 的位置是预留地址,字符不会显示(除非通过指令移位)。
DDRAM 地址 - 第一行 第一行的 DDRAM 地址从00H(十六进制)开始,依次是 01H、02H...27H(00H 到 27H 共 40 个地址:27H 是十进制 39,00~39 正好 40 个)。
DDRAM 地址 - 第二行 第二行的 DDRAM 地址从40H开始,依次是 41H、42H...67H(40H 到 67H 也是 40 个地址:67H 是十进制 103,40H 是 64,64~103 正好 40 个)。

如果你想在 LCD1602第一行第 5 个位置显示数字 "8"

  1. 查图表:第一行显示位置 5 对应的 DDRAM 地址是04H
  2. 数字 "8" 的 ASCII 码是38H(十六进制);
  3. 操作逻辑:
    • 先给 LCD 发送 "设置 DDRAM 地址为 04H" 的指令;
    • 再发送字符码38H
    • 最终 LCD 第一行第 5 个位置就会显示 "8"。
2.4 常用指令

在使用 LCD1602 时,掌握一些常用指令,对于 LCD1602 初始化是必要的

2.4.1 清屏指令

指令功能:清屏 ------ 清空 LCD1602 屏幕上所有显示的字符,同时将光标复位到屏幕左上角的初始位置;

指令编码(各引脚 / 数据位取值)

RS(寄存器选择位):0(表示发送的是 "指令",而非显示数据);

R/W(读写控制位):0(表示向 LCD "写入" 指令,而非读取状态 / 数据);

DB7~DB0(8 位数据总线):DB7 至 DB1 均为 0,仅 DB0 为 1(完整 8 位指令码为二进制00000001B,对应十六进制01H);

执行时间:1.64ms------ 发送清屏指令后,LCD 需要 1.64 毫秒完成清屏操作,此期间需等待,不宜立即发送其他指令,否则会导致指令执行失败。

2.4.2 模式设置指令

指令功能 :进入模式设置 ------ 设定 LCD1602 写入字符后,光标移动方向 (I/D)和显示是否整体移位(S),是控制 LCD 字符显示逻辑的基础指令;

指令编码(各引脚 / 数据位取值)

RS(寄存器选择位):0(表示发送的是 "指令",而非显示数据);

R/W(读写控制位):0(表示向 LCD "写入" 指令,而非读取状态 / 数据);

DB7~DB2(高 6 位数据总线):均为 0(固定值);

  • DB1(I/D 位):光标移动方向控制位(核心可变参数):
    • I/D=1:光标从左向右移动(写入字符后光标右移,符合常规阅读习惯);
    • I/D=0:光标从右向左移动;
  • DB0(S 位):显示移位控制位(核心可变参数):
    • S=1:写入字符后整个显示画面移位(光标不动,画面移动);
    • S=0:写入字符后仅光标移动,显示画面不动(最常用);
  • 指令码基础框架:二进制000000I/DSB(十六进制00H~03H,取决于 I/D 和 S 的取值);

执行时间:40μs(微秒)------ 指令发送后,LCD 仅需 40 微秒完成设置,等待时间远短于清屏指令,编程时预留该时间即可发送下一条指令。

2.4.3 显示开关控制指令

指令功能:显示开关控制 ------ 可分别控制 LCD1602 的 "整体显示开启 / 关闭""光标显示 / 隐藏""光标闪烁 / 静止";特别注意:关闭显示时,DDRAM(显示数据存储器)中的字符数据不会丢失,仅屏幕暂时空白,重新开启显示后数据会恢复。

指令编码(各引脚 / 数据位取值)

控制 / 数据位 取值(表格标注) 含义说明
RS 0 表示发送的是 "指令",而非显示数据(RS=1 为发送显示数据)
R/W 0 表示向 LCD "写入" 指令,而非读取状态 / 数据(R/W=1 为读取)
DB7 0 固定值,是该指令的高 7 位标识
DB6 0 固定值
DB5 0 固定值
DB4 0 固定值
DB3 1 固定标识位,区分该指令为 "显示开关控制"
DB2 D 核心可变参数(行业标准定义:D=1 开启整体显示,D=0 关闭显示,关闭后 DDRAM 数据不丢失)
DB1 C 核心可变参数(行业标准定义:C=1 显示光标,C=0 隐藏光标)
DB0 B 核心可变参数(行业标准定义:B=1 光标闪烁,B=0 光标静止)

执行时间:40μs(微秒)------ 表格明确标注该指令执行耗时 40 微秒,发送指令后需等待至少 40μs 再发送下一条指令,确保指令生效。

实际开发中最常使用D=1、C=0、B=0,即指令码 00 0000 11100B(0CH),对应 "开启显示、隐藏光标、光标不闪烁",符合常规使用习惯。

2.4.4 功能设定指令

指令功能:功能设定 ------ 用于定义 LCD1602 的核心硬件工作参数,包括数据总线宽度、显示行数、字符点阵格式,是 LCD 初始化阶段必须优先执行的指令;

指令编码(严格对应表格标注)

位标识 取值 / 标注 具体含义
RS 0 表示发送的是 "指令"(而非显示数据,RS=1 为发送数据)
R/W 0 表示向 LCD "写入" 指令(而非读取状态 / 数据,R/W=1 为读取)
DB7~DB5 0、0、1 固定值,是 "功能设定指令" 的核心标识(区别于清屏、显示开关等其他指令)
DB4(DL) DL(可变) 数据总线宽度控制:DL=1→8 位总线(用 DB0~DB7);DL=0→4 位总线(仅用 DB4~DB7)
DB3(N) N(可变) 显示行数控制:N=1→显示 2 行(1602 模块必选);N=0→显示 1 行
DB2(F) F(可变) 字符点阵控制:F=1→5×10 点阵;F=0→5×7 点阵(1602 模块常用 5×7,故 F=0)
DB1、DB0 X 无关位(取值 0/1 均可,不影响指令功能)

执行时间:表格明确标注为 40μs,发送该指令后需等待至少 40 微秒,再发送下一条指令,确保配置生效。

功能设定指令的固定编码为 RS=0、R/W=0、DB7~DB5=001,核心可变参数为 DL(总线宽度)、N(行数)、F(点阵),DB1/DB0 为任意值;

3. LCD1602 使用
3.1 写时序

要使用 LCD1602,首先需对其初始化,即通过写入一些特定的指令实现,然后选择在 LCD1602 的哪个位置显示并将要显示的数据发送到 LCD 的 DDRAM

使用 LCD1602 通常是写数据进去,很少使用读功能,所以只需要看两个写时序:

写指令字、写数据字

时序类型 核心用途 典型应用场景
写指令字 向 LCD1602 发送控制指令,配置 LCD 的工作状态(如初始化、清屏、光标定位) 功能设定(38H)、清屏(01H)、显示开关控制、设置 DDRAM 地址
写数据字 向 LCD1602 发送要显示的字符数据(ASCII 码),最终在屏幕上显示对应字符 发送 0x30 显示数字 0、0x41 显示字母 A、0x20 显示空格
时序类型 RS 电平 R/W 电平 数据总线(DB0~DB7)内容
写指令字 0 0 8 位指令码(如清屏指令 00000001)
写数据字 1 0 8 位字符 ASCII 码(如字母 A=01000001)

无论是写指令还是写数据,时序流程完全一致(仅 RS 电平不同),可按以下固定步骤执行:

  1. 拉低使能(E 引脚):先将 E 引脚置低,准备向数据总线送数据;
  2. 设置 RS、R/W 电平
    • 写指令:RS=0,R/W=0;
    • 写数据:RS=1,R/W=0;
  3. 输出 8 位数据到 DB0~DB7:将指令码 / ASCII 码放到 8 位数据总线;
  4. 拉高 E 引脚:产生高电平脉冲,触发 LCD 读取数据总线的内容;
  5. 拉低 E 引脚:完成一次写入操作;
  6. 等待执行时间:根据指令 / 数据类型等待对应时间(如写指令 40μs、清屏 1.64ms,写数据无需额外等待)。
3.2 时序图

关键时序参数含义(图中标注的时间参数)

参数 核心含义
tSP1 RS/R/W 电平稳定后,到 E 信号上升沿的最小时间(确保 LCD 先识别控制信号状态);
tSP2 DB0~DB7 数据稳定后,到 E 信号上升沿的最小时间(确保数据就绪后 LCD 再读取);
tpw E 信号高电平的持续时间(脉冲宽度,是 LCD 有效读取数据的核心时间);
tR E 信号从低电平到高电平的上升沿过渡时间;
tHD1 E 信号下降沿后,RS/R/W 电平需保持稳定的最小时间;
tHD2 E 信号下降沿后,DB0~DB7 数据需保持有效的最小时间;
tC 单次写操作的总周期时间(从控制信号 / 数据稳定到本次操作结束的完整时间);

写操作的核心时序逻辑

LCD1602 写操作的底层要求是 "先稳控制 / 数据,再触发读取,最后延迟撤销":

  1. 先稳定 RS(指令 0 / 数据 1)、R/W(固定 0)电平,同时让 DB0~DB7 输出有效数据
  2. 等待 tSP1/tSP2 后,拉高 E 信号产生上升沿,LCD 开始准备读取
  3. 保持 E 高电平 tpw 时间,LCD 完成数据采样
  4. 拉低 E 信号产生下降沿,之后仍需保持 RS/R/W、DB0~DB7 稳定 tHD1/tHD2 时间
  5. 单次写操作完成(总耗时 tC)
相关推荐
neardi临滴科技6 小时前
Neardi Pi 4-3588:开启 8K 极速智能,赋能企业级边缘计算新时代
人工智能·嵌入式硬件·边缘计算·rk3588·开发板
love530love6 小时前
【笔记】华硕 ROG MAXIMUS Z890 HERO 主板 BIOS 更新完整操作实录
运维·人工智能·windows·笔记·单片机·嵌入式硬件·bios
尼喃6 小时前
3.7V升压5V 1A芯片精选推荐,高效率低功耗,满足工程需求
单片机·嵌入式硬件
小李做物联网6 小时前
【单片机毕业设计】76.1基于单片机stm32智能浇灌系统毕业设计
stm32·单片机·嵌入式硬件·物联网
c10638915146 小时前
stm32系列之编码器功能
stm32·单片机·嵌入式硬件
三品吉他手会点灯6 小时前
STM32F103 学习笔记-20-通信的基本概念
笔记·stm32·单片机·嵌入式硬件·学习
悠哉悠哉愿意7 小时前
【嵌入式学习笔记】GPIO与LED
笔记·单片机·嵌入式硬件·学习
v先v关v住v获v取7 小时前
3D打印机的定量铺粉器设计13张 +三维图+设计说明书
科技·单片机·51单片机
点灯小铭7 小时前
基于单片机的双机串口通信与数字串存储系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业