0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LCD1602液晶显示屏的工作原理详解

硬件攻城狮 来源:CSDN-Z小旋 2023-11-27 10:55 次阅读

LCD1602液晶显示屏

LCD ( Liquid Crystal Display 的简称)液晶显示器。能够同时显示16x2,32个字符,是一种专门用来显示字母、数字、符号等的点阵型液晶模块。

LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻电容元件和结构件等装配在PCB板上而组成。该显示屏的优点是耗电量低、体积小、辐射低。

LCD1602主要用来显示数字、字母、图形以及少量自定义字符。可以显示2行16个字符,拥有16个引脚,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK。

注:

我们所用的LCD屏的命名,基本都是按照其分辨率来进行命名的 比如lcd1602 就是分辨率为16×2 lcd12864 就是分辨率为128×64

LCD1602主要参数

显示字符:16×2个字符

工作电压:4.5~5V

工作电流:2.0mA

工作温度:-20°C~70°C

模块最佳工作电压:5.0V

单个字符尺寸2.95×4.35(W×Hmm)

引脚:16脚

LCD发光原理

首先要知道:

液晶:液晶是液态晶体,是一种几乎透明的物质,是不能发光的

光源:LCD屏幕的光来自于屏幕最下面的背光板发出的光源

偏光片:一种镜片,只有特定方向的光线(垂直偏振光)才能通过,而其它方向的光线不能通过

两块偏光片的栅栏角度相互垂直时光线就完全无法通过

液晶的物理特性是:液晶控制光线通过的程度是由加在液晶上的电压强弱来控制的。当通电时导通,排列变的有秩序,使光线容易通过,光的路径不改变;不通电时排列混乱,阻止光线通过,改变光的路径。

LCD屏幕的组成:

上偏光片,和下偏光片,使背光源的光只能通过下偏光片,不能通过下偏光片

彩色滤光片:不同强度的光经过红绿蓝三色滤光片之后,会形成各种各样的颜色

液晶层:通过通电方式来控制液晶的分子排列,从而改变背光源发出的光的路径,如果通电则不改变路径,光不能通过上偏光片,如果不通电则改变光的路径,光可以通过上偏光片,从而进行显示。

TFT基板:排列有序的薄膜晶体管,每一个薄膜晶体管都可以调整其电压,从而使单个晶体管范围内液晶进行不同的亮度和颜色显示,也就是我们说的像素点

背光源:提供均匀的背景光源

27b4509a-8c1c-11ee-939d-92fbcf53809c.png

也就是说:如果想要LCD屏幕不显示,那么只需要背光源的光不穿过上偏光片即可,如果需要LCD屏幕显示字符,需要背光源的光穿过上偏光片,而是否能穿过上偏光片,需要看液晶层的分子排列,而液晶层的分子排列,是由加在液晶上的电压强弱来控制的,

也就是最后我们只需要控制每个像素点的电压,就可以达到LCD屏幕显示的效果。这样就可以通过不同区域的电压控制使液体水晶重新排列来显示出各种图形图像以及字符。

LCD和OLED区别:

LCD ( Liquid Crystal Display 的简称)液晶显示器。

OLEDOrganic Light-Emitting Diode, OLED)本质是LED发光二极管,当两端加上正向电压,半导体中的载流子发生复合引起光子发射而产生光,又称为有机电激光显示。

简单地说,LCD与LED是两种不同的显示技术,LCD是由液态晶体组成的显示屏,而LED则是由发光二极管组成的显示屏。本质区别二是LCD需要背光源才能亮,OLED是发光二极管自发光,不需要额外的光源.

LCD1602引脚接线:

27bf1354-8c1c-11ee-939d-92fbcf53809c.png

各引脚的功能介绍如下:

27d6ddcc-8c1c-11ee-939d-92fbcf53809c.png

引脚1(VSS/GND)::地引脚

引脚2(VDD/VCC):电源引脚

引脚3(VL):液晶显示器对比度引脚,接正电源时对比度最弱,接地时对比度最高,使用时可以通过外接一个电位器调整其对比度。

引脚4(RS):寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。

引脚5(R/W):读(read)/写(write)信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。

引脚6(E):使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。

引脚7-14(D0~D7):8位双向数据线 用于单片机向1602写入数据和从1602读取数据

引脚15:背光源正极

引脚16:背光源负极

LCD1602共16个管脚,但分类很好分类,

其中一个VCC和GND用于给1602供电

一个VCC和GND用于给背光源供电,

剩下三个功能引脚:RS(数据命令选择端),R/W(读写选择端),E(使能信号),

还有8个D0~D7分别为8位双向数据线传输数据。

RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。

R/W为读写选择,高电平进行读操作,低电平进行写操作。

E端为使能端,后面和时序联系在一起。

LCD1602的RAM地址映射及标准字库表

LCD1602,总共显示为16行2列,对应着32个RAM地址,在使用的时候,需要在哪个位置显示,就写入对应的RAM地址,然后再写入需要的字符,对应就会显示该字符。

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示LCD此时不忙,这时才能写指令和数据,否则此指令失效。要显示字符时要先输入显示字符地址(写指令),也就是告诉模块在,哪里显示字符,然后再写入需要显示的字符(写数据),才能够正常显示字符

下图是1602的内部显示地址

一共32个地址,对应2行16列

27e5b1e4-8c1c-11ee-939d-92fbcf53809c.png

标准字库表(CGROM):

27f45a8c-8c1c-11ee-939d-92fbcf53809c.png

这个ROM中固化了一些我们常用的ASCII字符以及部分日文字符的点阵数据,需要写入那个字符,就直接设置对应进制码就可以,比如大写的字母A,代码是0100 0001(41H) 与ASCII码一致。也就是表中的ASCII码字符的地址和实际的ASCII码字符是一样的

LCD1602读写操作

LCD1602分为读操作和写操作

其中读操作可以分为读状态和读数据,写操作可以分为写指令和写数据。

读状态:读取LCD引脚状态,返回为状态字,D0-D6为当前LCD数据指针的地址 D7为是否允许读写操作(即检查LCD是否处于忙状态)

28018018-8c1c-11ee-939d-92fbcf53809c.png

读数据:读取D0-07内的数据

写指令:写入LCD的控制指令,比如清屏,显示开关等

写数据:写入需要显示的数据,比方说要显示字符a,就写入0100 0001(41H)

2818e4a6-8c1c-11ee-939d-92fbcf53809c.png

51单片机为例,D0-D7接到P0口 RW RW EN接到任意两个口

读写操作的时序图如下:

读操作时序:

28282434-8c1c-11ee-939d-92fbcf53809c.png

写操作时序:

283ac9b8-8c1c-11ee-939d-92fbcf53809c.png

我们来分析一下时序图,当我们要写指令的时候,RS置为低电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据,这时候将EN拉高,产生一个上升沿,这时候指令就开始写入LCD,延时一段时间,将EN置低电平。

当我们要写数据的时候,RS置为高电平,RW置为低电平,EN置为低电平,然后将指令数据送到数据口D0~D7,延时tsp1,让1602准备接收数据,这时候将EN拉高,产生一个上升沿,这时候数据就开始写入LCD,延时一段时间,将EN置低电平。

我们以51单片机为例,D0-D7接到P0口上,RW RW EN任意三个引脚,则写指令和写数据代码如下:

写指令:

/*********************************************************/

// 1602液晶写命令函数,cmd就是要写入的命令

/*********************************************************/

void LcdWriteCmd(uchar cmd)

{

LcdRs_P = 0; //选择写指令

LcdRw_P = 0; //选择写

LcdEn_P = 0; //E使能拉低

P0=cmd; //把指令送入P0

DelayMs(2); //延时一小会儿,让1602准备接收数据

LcdEn_P = 1; //使能线电平变化上升沿,命令送入1602的8位数据口

DelayMs(2);//延时,让数据发送

LcdEn_P = 0;//使能线拉低

}

写数据:

/*********************************************************/

// 1602液晶写数据函数,dat就是要写入的数据

/*********************************************************/

void LcdWriteData(uchar dat)

{

LcdRs_P = 1; //选择写数据

LcdRw_P = 0; //选择写

LcdEn_P = 0; //E使能拉低

P0=dat; //把数据送入P0

DelayMs(2); //延时一小会儿,让1602准备接收数据

LcdEn_P = 1; //使能线电平变化上升沿,命令送入1602的8位数据口

DelayMs(2);//延时,让数据发送

LcdEn_P = 0;//使能线拉低

}

LCD1602的指令操作

LCD1602一共有11条指令,下面我们一一解读,

1602液晶模块的读写操作,屏幕和光标的操作都是通过指令来实现的。(1为高电平,0为低电平)

284228ac-8c1c-11ee-939d-92fbcf53809c.png

指令1:清显示,指令码01H,

285b6ce0-8c1c-11ee-939d-92fbcf53809c.png

功能:

光标复位到地址00H位置,

LCD显示DDRAM的内容全部写入” “的ASCII码20H

指令2:光标复位,光标返回到地址00H

287a2a90-8c1c-11ee-939d-92fbcf53809c.png

功能:

光标复位到地址00H位置

LCD显示DDRAM的内容不变

指令3:光标和显示位置设置

2884b0dc-8c1c-11ee-939d-92fbcf53809c.png

功能:

I/D,写入新数据后光标移动方向,高电平右移,低电平左移,

S:写入新数据后显示屏字符是否整体左移或右移一个字符,高电平表示有效,低电平表示无效

指令4:显示开关控制

28926da8-8c1c-11ee-939d-92fbcf53809c.png

功能:

D(Dispaly):控制整体的显示开与关,高电平表示开显示屏,低电平表示关显示屏

C(Cursor):控制光标的开与关,高电平表示有光标,低电平表示无光标

B(Blink):控制光标是否闪烁,高电平闪烁,低电平不闪烁

指令5:光标或显示移位

28a57eb6-8c1c-11ee-939d-92fbcf53809c.png

SC=0,RL=0 :光标左移

SC=0,RL=1 : 光标右移

SC=1,RL=0时,字符和光标都左移

SC=1,RL=1时字符和光标都右移

指令6:功能设置命令

28a8e380-8c1c-11ee-939d-92fbcf53809c.png

DL:DL=1代表数据长度为8位,DL=0代表数据长度为4位

N:低电平时只有一行可以显示,高电平时两行都可以显示,

F:低电平时一个字符大小为5X7的点阵字符,高电平时一个字符大小为5X10的点阵字符。

指令7:CGRAM地址设置

28bc6acc-8c1c-11ee-939d-92fbcf53809c.png

功能:

LCD1602的CGRAM可以设置存储自定义字符,它共有6位,一共可以表示64个地址,即64个字节。一个5×8点阵字符共占用8个字节,那么这64个字节一共可以自定义8个字符。

指令8:DDRAM地址设置

28c3b25a-8c1c-11ee-939d-92fbcf53809c.png

指定DDRAM地址

指令9:读忙信号和光标地址

28cd1c50-8c1c-11ee-939d-92fbcf53809c.png

BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙

指令10:写数据到CGRAM或DDRAM指令

28db1a44-8c1c-11ee-939d-92fbcf53809c.png

指令11·:从CGRAM或DDRAM读数据指令

28e7cea6-8c1c-11ee-939d-92fbcf53809c.png

功能:

读取DDRAM或CGRAM中的内容

LCD初始化

LCD初始化的过程,也就是对LCD进行写指令的过程,具体的指令如下:

写指令38H:162显示,57点阵,8位数据口 (指令6)

写指令0CH:开启显示屏,关光标,光标不闪烁 (指令4)

写指令0x06:显示地址地址加1,即写一个数据后,显示位置右移一位 (指令3)

写指令01H:显示清屏

/*********************************************************/

// 1602液晶功能初始化

/*********************************************************/

void LcdInit()

{

LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口

LcdWriteCmd(0x0C); // 开显示,不显示光标

LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移

LcdWriteCmd(0x01); // 清屏

}

LCD写地址

其实本质也就是指令8,只不过我们在写的时候,最高位D7是要求必须要为1 ,也就是实际是7位地址

27e5b1e4-8c1c-11ee-939d-92fbcf53809c.png

比方说我们想要写入第二行第一列,那么地址是40H(0100 0000),是不是直接写就行了呢?,显然是不行的,因为最高位D7不是1.所以需要加上一个80H(1000 0000),也就是实际写入的为40H(0100 0000)+80H(1000 0000)=C0H(1100 0000)

那这样子的话,第一行起始地址就是(1000 0000)80H,第二行起始地址是(1100 0000)C0H

代码如下:

/*********************************************************/

// 液晶光标定位函数

/*********************************************************/

void LcdGotoXY(uchar line,uchar column)

{

// 第一行

if(line==0)

LcdWriteCmd(0x80+column);

// 第二行

if(line==1)

LcdWriteCmd(0x80+0x40+column);

}

LCD写数据

这个就相对比较简单,直接用一个指针,判断字符是否结束,然后写入数据就可以

/*********************************************************/

// 液晶输出字符串函数

/*********************************************************/

void LcdPrintStr(uchar *str)

{

while(*str!='�')

LcdWriteData(*str++);

}

代码及使用实例:

这里我们用Proteus仿真做演示

功能:LCD1602英文显示字符

代码如下:

#include

#include

#define uchar unsigned char// 以后unsigned char就可以用uchar代替

#define uint unsigned int// 以后unsigned int 就可以用uint 代替

sbit LcdRs_P = P1^1;// 1602液晶的RS管脚

sbit LcdRw_P = P1^2;// 1602液晶的RW管脚

sbit LcdEn_P = P1^3;// 1602液晶的EN管脚

/*********************************************************/

// 毫秒级的延时函数,time是要延时的毫秒数

/*********************************************************/

void DelayMs(uint time)

{

uint i,j;

for(i=0;i

for(j=0;j<112;j++);

}

/*********************************************************/

// 1602液晶写命令函数,cmd就是要写入的命令

/*********************************************************/

void LcdWriteCmd(uchar cmd)

{

LcdRs_P = 0;

LcdRw_P = 0;

LcdEn_P = 0;

P0=cmd;

DelayMs(2);

LcdEn_P = 1;

DelayMs(2);

LcdEn_P = 0;

}

/*********************************************************/

// 1602液晶写数据函数,dat就是要写入的数据

/*********************************************************/

void LcdWriteData(uchar dat)

{

LcdRs_P = 1;

LcdRw_P = 0;

LcdEn_P = 0;

P0=dat;

DelayMs(2);

LcdEn_P = 1;

DelayMs(2);

LcdEn_P = 0;

}

/*********************************************************/

// 液晶光标定位函数

/*********************************************************/

void LcdGotoXY(uchar line,uchar column)

{

// 第一行

if(line==0)

LcdWriteCmd(0x80+column);

// 第二行

if(line==1)

LcdWriteCmd(0x80+0x40+column);

}

/*********************************************************/

// 液晶输出字符串函数

/*********************************************************/

void LcdPrintStr(uchar *str)

{

while(*str!='�')

LcdWriteData(*str++);

}

/*********************************************************/

// 1602液晶功能初始化

/*********************************************************/

void LcdInit()

{

LcdWriteCmd(0x38); // 16*2显示,5*7点阵,8位数据口

LcdWriteCmd(0x0C); // 开显示,不显示光标

LcdWriteCmd(0x06); // 地址加1,当写入数据后光标右移

LcdWriteCmd(0x01); // 清屏

}

/*********************************************************/

// 开启LCD1602显示

/*********************************************************/

void LcdOn() //开显示器,关光标与闪烁

{

LcdWriteCmd(0x0c);

}

/*********************************************************/

//关闭LCD1602显示,但DDRAM中内容不丢失,重开后将恢复内容

/*********************************************************/

void LcdOff()

{

LcdWriteCmd(0x08);

}

/*********************************************************/

// 1602液晶显示内容初始化

/*********************************************************/

void LcdShowInit()

{

LcdGotoXY(0,0); // 定位到第0行第0列

LcdPrintStr(" LCD Test ");// 第0行显示“ ”

LcdGotoXY(1,0); // 定位到第1行第0列

LcdPrintStr("ABCDEFGHIJKLMNOP");// 第1行显示“ ”

}

/*********************************************************/

// 主函数

/*********************************************************/

void main()

{

LcdInit();// 液晶功能初始化

LcdShowInit();

while(1)

{

}

}

测试效果如下:

2904b584-8c1c-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2549

    文章

    50817

    浏览量

    752405
  • 液晶
    +关注

    关注

    6

    文章

    606

    浏览量

    69619
  • 显示屏
    +关注

    关注

    28

    文章

    4467

    浏览量

    74169
  • LCD1602
    +关注

    关注

    14

    文章

    607

    浏览量

    52533

原文标题:【常用传感器】LCD1602液晶工作原理详解及例程代码

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LCD1602液晶显示屏的驱动设计与实现

    LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用
    的头像 发表于 12-08 11:24 9970次阅读
    <b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示屏</b>的驱动设计与实现

    #硬声创作季 LCD1602液晶显示屏工作原理讲解

    lcd液晶显示屏液晶显示显示技术LCD1602
    jf_20630394
    发布于 :2022年08月12日 07:55:43

    怎样使用单片机去控制LCD1602液晶显示屏显示时间等信息

    怎样使用单片机去控制LCD1602液晶显示屏显示时间等信息?如何对基于单片机的LCD1602液晶显示屏进行仿真?
    发表于 09-01 06:14

    STM32是怎样去控制LCD1602液晶显示屏

    LCD1602的常用指令有多少啊?STM32是怎样去控制LCD1602液晶显示屏的?
    发表于 12-15 06:30

    请问如何驱动LCD1602液晶显示屏

    LCD1602液晶显示屏的原理是什么?如何驱动LCD1602液晶显示屏
    发表于 01-17 08:29

    LCD1602液晶显示屏的操作流程是怎样的呢

    什么是LCD1602液晶显示屏呢?LCD1602液晶显示屏的操作流程是怎样的呢?
    发表于 01-26 06:32

    如何对LCD1602液晶显示屏进行编程呢

    LCD1602液晶显示屏的引脚功能有哪些呢?如何对LCD1602液晶显示屏进行编程呢?
    发表于 01-26 08:26

    STM32是怎样通过IIC去控制LCD1602液晶显示屏的呢

    LCD1602常用指令有哪些呢?STM32是怎样通过IIC去控制LCD1602液晶显示屏的呢?
    发表于 01-26 07:44

    液晶显示模块LCD1602应用

    液晶显示模块LCD1602应用
    发表于 09-25 16:58 683次下载
    <b class='flag-5'>液晶显示</b>模块<b class='flag-5'>LCD1602</b>应用

    lcd1602显示原理,LCD1602液晶显示器的分类有哪些?

    LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LC
    发表于 10-20 10:32 3.6w次阅读

    LCD1602液晶显示屏的基础驱动程序免费下载

    本文档的主要内容详细介绍的是LCD1602液晶显示屏的基础驱动程序免费下载。
    发表于 08-16 17:32 17次下载
    <b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示屏</b>的基础驱动程序免费下载

    使用51单片机设计液晶显示屏LCD1602显示的计算器程序免费下载

    本文的主要内容是使用51单片机设计液晶显示屏LCD1602显示的计算器程序免费下载。
    发表于 06-26 17:43 20次下载
    使用51单片机设计<b class='flag-5'>液晶显示屏</b><b class='flag-5'>LCD1602</b><b class='flag-5'>显示</b>的计算器程序免费下载

    lcd1602液晶显示屏介绍_lcd1602引脚功能

    本文首先阐述了lcd1602液晶显示屏的概念,其次阐述了LCD1602外形尺寸,最后介绍了lcd1602引脚功能。
    发表于 04-23 08:53 7.1w次阅读

    LCD1602显示屏的资料合集免费下载

    LCD1602显示屏的资料合集免费下载包括了:LCD1602显示屏技术手册,库文件,Arduino参考程序,1602基本
    发表于 05-27 08:00 58次下载
    <b class='flag-5'>LCD1602</b><b class='flag-5'>显示屏</b>的资料合集免费下载

    lcd1602液晶显示模块工作原理

    LCD1602液晶显示模块是一种常用的显示设备,可以显示文字和简单的图形。它常被用于各种电子设备中,比如计算器、电子表格、仪器仪表等。本文将详细介绍
    的头像 发表于 12-20 10:30 7236次阅读