当前位置: 首页 > news >正文

51单片机-驱动LCD1602液晶显示屏教程

本章概述思维导图:

51单片机驱动LCD1602液晶显示实验教程

LCD1602液晶显示屏简介

        LCD1602是一种成本低廉、控制简便且应用广泛的字符型液晶显示模块,其名称中的"1602"代表每行可显示16个字符、共2行的显示容量。该模块基于液晶光电效应工作,通过电场控制液晶分子偏转实现字符显示,支持蓝色或绿色背光,具备标准化接口和丰富的指令集,广泛应用于仪器仪表、家用电器及嵌入式系统中需要简单文本提示的场景,尤其适合对显示功能要求不高但追求开发效率的入门级项目。实物图如下所示:


LCD1602显示屏核心参数

1、显示容量:16×2个字符。每个字符由若干个5×7或5×10的点阵字符位组成;

2、芯片工作电压:4.5-5.5V,模块最佳工作电压通常为5.0V。

3、工作电流:约2.0mA(在5.0V电压下)。

4、字符尺寸:每个字符的尺寸为2.95mm×4.35mm(宽×高)。

5、显示颜色:通常为蓝色或绿色背光,也有其他颜色可选。

6、视角:可视角度一般为6点钟方向至12点钟方向,水平可视角度约为70度。


LCD1602显示屏引脚功能

LCD1603通常有16个引脚,各种引脚的功能如下:

   引脚编号

引脚名称

功能描述

        1        

VSS

电源地(接地)

        2

VDD

接5V正电源

        3

VL

液晶显示偏压调整端,通过电位器调节显示对比度(接正电源时对比度最弱,接地时对比度最高)

        4

RS

数据/命令选择端(高电平选数据寄存器,低电平选指令寄存器)

        5

R/W

读写信号线(高电平读操作,低电平写操作)

        6

E

使能端(高电平跳变为低电平时执行命令)

        7-14

D0-D7

8位双向数据线(传输数据和指令)

        15

BLA

背光源正极(通常接5V)

        16

BLK

背光源负极(通常接地)


LCD1602显示屏内存结构

LCD1602的内存分为三类,分别用于存储字符字模、显示数据和用户自定义字符;

一、CGROM(字符发生器ROM)

CGROM是LCD1602内部固化的只读存储器,存储了192个标准字符的字模数据,包括:5×7点阵字符(如字母、数字、符号)部分5×10点阵字符(需通过指令0x34或0x36切换模式)

工作原理:

当微控制器向DDRAM写入一个字符的ASCII码时,LCD1602会自动从CGROM中查 找对应字符的字模数据。

示例:

        显示字符'A'时,写入ASCII码0x41,LCD1602自动从CGROM中读取'A'的字  模并显示。

访问方式:

        通过字符的ASCII码自动映射到CGROM中的字模数据,无需用户干预。

特点:

        只读不可修改:用户无法更改CGROM中的字模数据。

        无需手动操作:显示标准字符时,用户只需写入ASCII码,无需直接操作CGROM

二、DDRAM(显示数据RAM)

DDRAM是LCD1602的显示缓冲区,用于存储当前屏幕上显示的字符的ASCII码。它直接决定了屏幕的显示内容。

        第一行:0x00~0x0F(实际显示0x00~0x0F)。

        第二行:0x40~0x4F(实际显示0x40~0x4F)。

        剩余地址(如0x10~0x3F、0x50~0x7F)用于屏幕滚动时的字符暂存。

操作:通过设置DDRAM地址指令(如0x80+偏移量)定位光标位置,再写入数据。

这里有小伙伴会有疑问,为什么要0x80+偏移量呢?是因为最高位也就是DB7地址指令规定一直为1(0x80),DB6-DB0为CGRAM的地址(7位);操作指令如图所示:

示例:

显示位置操作:

     比如说要在第一排第二个位子写入数据时地址设定指令为:0x80|0x01或者0x80+2;这样才是对

显示数据操作:指令编码如图说是

     要在第一排第二个位子写入数据1时,应该传输ASCII码值为0x31

特点:       

        动态更新:修改DDRAM中的数据会立即反映在屏幕上。

        地址连续:写入数据后,地址计数器(AC)会自动加1(需通过指令0x06设置)。

三、CGRAM(字符发生器RAM)

CGRAM是LCD1602的可编程字符存储器,允许用户自定义8个5×7点阵字符或4个5×10点阵字符的字模数据。

        总容量:64字节(8字符×8字节)

        地址范围:0x00~0x07(每个字符占8字节)。

        自定义步骤:

                写入指令0x40+字符编号(如0x40定义第一个字符)。

                依次写入8字节的字模数据(每字节代表点阵的一行,1为亮,0为灭)。

                在DDRAM中写入字符编号(如0x00)即可显示自定义字符。


LCD1602显示屏寄存器介绍

LCD1602内部包含两个关键寄存器,用于控制显示操作:

1、指令寄存器(Instruction Register, IR)

        功能:接收微控制器发送的指令(如清屏、光标移动等)。

        控制方式:通过RS=0(低电平)选择指令寄存器,R/W=0(低电平)写入指令。

        示例指令:

                0x01:清屏,将DDRAM内容清空,光标复位到左上角。

                0x02:光标归位,光标移至左上角,DDRAM内容不变。

                0x06:输入模式设置,光标右移,字符写入后地址自动加1。

2、数据寄存器(Data Register, DR)

        功能:存储待显示字符的ASCII码或从DDRAM/CGRAM读取的数据。

        控制方式:通过RS=1(高电平)选择数据寄存器,R/W=0(低电平)写入数据,R/W=1 (高电平)读取数据。

        数据流向:写入时,数据存入DDRAM或CGRAM;读取时,从DDRAM或CGRAM加载  数据到DR。


LCD1602显示屏指令集简介

LCD1602支持11条控制指令,用于初始化、显示控制、光标移动等操作:

        指令

指令码(十六进制)

功能说明

        清屏

0x01

清除DDRAM内容,光标复位到左上角,地址计数器(AC)归零。

        光标归位

0x02

光标移至左上角,DDRAM内容不变,AC归零。

        输入模式设置

0x04/0x05/0x06/0x07

设置光标移动方向(I/D)和屏幕滚动(S)。例如,0x06表示光标右移,地址自动加1。

        显示开关控制

0x08~0x0F

控制显示(D)、光标(C)、闪烁(B)。例如,0x0C表示开显示、无光标、不闪烁。

        光标/字符移位

0x10~0x1F

移动光标(S/C=0)或整体屏幕(S/C=1)。例如,0x14表示光标右移。

        功能设置

0x20~0x3F

设置数据总线位数(DL)、行数(N)、点阵(F)。例如,0x38表示8位数据、两行、5×7点阵。

       CGRAM地址设置

0x40~0x7F

设置自定义字符的CGRAM地址(需先定义字模,再在DDRAM中写入字符编号)。

        DDRAM地址设置

0x80~0xFF

设置显示起始地址(如0x80为第一行首列,0xC0为第二行首列)。

        读忙信号/AC地址

0x00(读状态时)

读取忙标志(BF)和AC地址(BF=1时模块忙,需等待)。

写数据到DDRAM/CGRAM

RS=1, R/W=0

将数据写入当前选中的DDRAM或CGRAM地址。

从DDRAM/CGRAM读数据

RS=1, R/W=1

从当前选中的DDRAM或CGRAM地址读取数据。

详细说明:

一、清屏指令

        功能:

                1、清楚液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码0x20;

                2、光标归位,即将光标撤回液晶显示屏的左上方;

                3、将地址计数器(AC)的值设为0;

二、光标归位指令

        功能:

                1、把光标撤回到显示器的左上方

                2、把地址计数器(AC)的值设置为0;

                3、保持DDRAM的内容不变

三、进入模式设置指令

        功能:

                1、设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。

        设置操作:

                I/D:写0表示写入新数据后光标左移,写1表示写入新数据后光标右移;

                S:写0表示写入新数据后显示屏不移动,写1表示写入新数据后显示屏整体右移1字符;

四、显示开关控制指令

        功能:

               1、 控制显示器开关,光标开关,以及光标是否闪烁。

        设置操作:

                D:写0表示显示功能关闭,写1表示显示功能开启;

                C:写0表示无光标,写1表示有光标;

                B:写0表示光标闪烁,写1表示光标不闪烁

五、设定显示屏或光标移动方向指令

      功能:

                1、使光标移位或使整个显示屏移位。

        设置操作:

                S/C:0 R/L:0 光标左移1格,且AC值减1

                S/C:0 R/L:1 光标右移1格,且AC值加1

                S/C:1 R/L:0 显示器上字符全部左移1格,单光标不动;

                S/C:1 R/L:1 显示器上字符全部右移1格,单光标不动;

六、功能设定指令

        功能:

                设定数据总线位数、显示的行数及字型。

        设置操作:

                DL:写0数据总线为4位,写1数据总线为8位

                N:写0显示1行,写1显示2行

                F:写0是5*7点阵/字符,写1是5*10点阵/字符

七、设定CGRAM地址指令

        功能:

                设定下一个要存入数据的CGRAM的地址

        设置说明:

                DB5、DB4、DB3为字符号,也就是你将来要显示该字符时要用到的字符地址。(000-111)能定义8个字符

                DB2、DB1、DB0为行号。(000-111)8行

八、设定DDRAM地址指令

        功能:

                设定下一个要存入数据的DDRAM的地址

九、读取忙信号或AC地址指令

        功能:

                1、读取忙碌信号FB的内容,FB=1表示液晶显示器忙,暂时无法接收单片机送来   的数据或指令;FB=0,液晶显示器可以接收单片机送来的数据或指令。

                2、读取地址计数器AC的内容

十、数据写入DDRAM或CGRAM指令一览

        功能:

                1、将字符码写入DDRAM,已使液晶显示屏显示出相应的字符

                2、将使用者自己设计的图像存入CGRAM。

        功能2设置说明:

                DB7、DB6、DB5、可以为如何数据,一般设置为”000“

                DB4、DB3、DB2、DB1、DB0、对应于每行5点的字模数据

十一、从CGRAM或DDRAM读出数据的指令一览

        功能:

                1、读取DDRAM或CGRAM中的内容


LCD1602显示屏使用步骤

要使用LCD1602,第一步就是对LCD1602初始化,就是写入一些特定的指令实现。第二步:选择在LCD1602的那个位置可以显示并将要显示的数据发送到LCD的DDRAM。

        1、初始化

        2、写命令(RS=L),设置显示坐标

        3、写数据(RS=H)

写入数据时序图:

      基本操作时序:

                读状态 输入:RS=L、RW=H、E=H 输出:DB0-DB7=状态字

                写指令 输入:RS=L、RW=L、E=下降沿脉冲 DB0-DB7=指令码 输出:无

                读数据 输入:RS=H、RW=H、E=H 输出:DB0-DB7=数据

                写数据 输入:RS=H、RW=L、E=下降沿脉冲 DB0-DB7=数据 输出:无


LCD1602显示屏硬件电路原理图分析

该LCD1602电路图中LCD1602一共有16个引脚;

1脚为LCD1602的GCD电源地引脚连接开发板电源地

2脚为LCD1602的VCC引脚连接开发板的5V电源

3脚为LCD1602的VO液晶显示偏压调整脚通过通过电位器连接5V电源;

4脚为LCD1602的RS数据/命令选择脚连接单片机的P26输入输出管脚进行控制

5脚为LCD1602的RW读写信号选择脚连接单片机的P25输入输出管脚进行控制

6脚为LCD1602的E使能脚连接单片机的P27输入输出管脚进行控制

DB0-DB7脚为LCD1602数据指令传输脚连接单片机P00-P07输入输出管脚脚进行数据的传输

15脚为LCD1602的背光源正极脚连接5V电源

16脚为LCD1602的背光源负极脚连接开发板电源地


LCD1602显示屏模块软件编程设计

实现在LCD1602显示屏上显示字符串信息,完成显示功能;

步骤为:

第一步:首先实现写入一字节指令函数用来驱动LCD1602显示屏

代码示例:

void LCD1602_write_cmd(u8 cmd)//LCD1602写入1字节命令函数
{LCD1602_RS=0;			//选择写入命令	LCD1602_RW=0;			//低电平写入LCD1602_E=0;			//使能端口低电平LCD1602_data=cmd;		//准备开始传输命令Delay_ms(1);				//延时1微秒LCD1602_E=1;		    //数据传输完成Delay_ms(1);				//延时1微秒,下降沿脉冲脉冲写入完成LCD1602_E=0;			//使能端口低电平
}

第二步:实现写入一字节数据函数用来驱动LCD1602显示屏显示的数据

代码示例:

void LCD1602_write_data(u8 dat)//LCD1602写入1字节数据函数
{LCD1602_RS=1;			//选择写入数据	LCD1602_RW=0;			//低电平写入LCD1602_E=0;			//使能端口低电平LCD1602_data=dat;		//准备开始传输命令Delay_ms(1);				//延时1微秒LCD1602_E=1;		    //数据传输Delay_ms(1);				//延时1微秒,下降沿脉冲LCD1602_E=0;			//使能端口高电平
}

第三步:配置LCD1602显示屏完成初始化函数,指令有:1、功能设定,2、显示开关控制,3、进入模式设置,4、清屏设置

代码示例:

void LCD1602_init(void)	//LCD1602初始化函数配置
{LCD1602_write_cmd(0x38);	//LCD1602功能设置指令LCD1602_write_cmd(0x0C);	//LCD1602显示开关控制指令LCD1602_write_cmd(0x06);	//LCD1602模式设置指令LCD1602_write_cmd(0x01);	//LCD1602清屏指令
}

第四步:最重要部分完成LCD1602显示屏显示字符串函数,形参介绍:形参x(0、1)行,y(0-15)列,str显示字符串数据

代码示例:

void LCD1602_Display_string(u8 x,u8 y,u8 *str)//LCD1603字符串显示字符函数:形参x(0、1)行,y(0-15)列,str字符串
{u8 i=0;if(y>1 || x>15)	//显示坐标位置输入错误,退出函数{return;}if(y == 0)	//从第一行开始显示{while(*str != '\0'){if(i<16-x)	//字符串在第一行显示{LCD1602_write_cmd(0x80+x+i);}else   		//字符串撑爆了第一行,开始在第二行显示{LCD1602_write_cmd(0x80+0x40+x+i-16);}LCD1602_write_data(*str);	//LCD1602每个坐标位置显示数据i++;str++;	}	}else if(y == 1)	//从第二行开始显示{while(*str != '\0'){if(i<16-x)	//字符串在第二行显示{LCD1602_write_cmd(0x80+0x40+x+i);}else   		//字符串撑爆了第二行,开始在第一行显示{LCD1602_write_cmd(0x80+x+i-16);}LCD1602_write_data(*str);	//LCD1602每个坐标位置显示数据i++;str++;	}	}
}

主函数:实现第一行显示LyfLoveWorld,第二行显示时间

代码示例:

int main()
{LCD1602_init();LCD1602_Display_string(0,0,"LyfLOVEWorld");LCD1602_Display_string(0,1,"2025.10.02");while(1){   }
}	 

效果展示:


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

http://www.dtcms.com/a/434445.html

相关文章:

  • 【C++哲学】面向对象的三大特性之 多态
  • Python - 100天从新手到大师:第二十六天Python操作Word和PowerPoint文件
  • 算法基础 典型题 前缀和
  • 广告网站制作多少钱wordpress修改密码后还是登陆不了
  • 【MySQL】一篇讲透MySQL的MVCC机制!
  • 【开题答辩全过程】以 Web数据挖掘在电子商务中的应用研究为例,包含答辩的问题和答案
  • 网站界面美观度站长素材网站官网
  • 生活的方向,从来没有统一的标准答案——它不是一张固定的地图,也不是一条必须抵达的终点线,更像是你在行走中慢慢校准的“心之所向”。
  • 网站到期时间网站开发小图片
  • Git打tag标签
  • leetcode 494 目标和
  • 网站设置成灰色全球最牛的搜索引擎
  • Apache POI操作Docx文档时踩坑指南
  • K230基础-显示画面
  • 一级a做爰片免费网站 新闻wordpress用户修改文章
  • 从零起步学习Redis || 第五章:利用Redis构造分布式全局唯一ID
  • C++基础语法核心技术详解
  • 临沂网站建设报价手机百度免费下载
  • 打工人日报#20251002
  • GMSL Layout Guide及其解读
  • ThinkPad X1 Carbon Gen13,X1 2in1 Gen10(21NX,21NY,21Q0,21Q1)原厂Win11Home系统
  • 设置VLC播放器的皮肤样式
  • 外贸网站搭建网站优化过度被k
  • 【工业实战】从架构到优化:企业级RAG客服对话系统的构建之道
  • CMake 入门实战手册:从理解原理开始,打造高效 C/C++ 开发流程
  • MySQL 5.7 主主复制 + Keepalived 高可用配置实例
  • 2014 年真题配套词汇单词笔记(考研真相)
  • 构建AI智能体:五十一、深思熟虑智能体:从BDI架构到认知推理的完整流程体系
  • 自由学习记录(104)
  • 【开题答辩全过程】以 ssm蛋糕销售网站的设计与实现为例,包含答辩的问题和答案