1、实物图

2、原理图

3、原理介绍

LCD1602:LCD1602液晶显示器是一种广泛使用的字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路及其扩展驱动电路,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。用于显示字母、数字和符号等的点阵式LCD,总共可以显示两行数据,每行可以显示16个数据。

在哪显示:

LCD1602可以显示16*2个字符且通过D0-D7八个引脚传输八位数据,每一个显示的位置都对应上图的一个地址。例如我想在第一行的第三个位置显示,那么就可以锁定上表中的“02”,换算成二进制就是0000 0010。听上去很简单,但是LCD1602有个特点就是写入显示地址时要求最高位 D7 恒定为高电平。所以我们想显示真实的地址应该为1000 0010。如果在第二行的第三个位置显示,那么就可以锁定上表中的“42”,换算成二进制就是0100 0010,加上最高位 D7 恒定为高电平。所以我们想显示真实的地址应该为1100 0010。

怎么显示:

在LCD1602的手册中给出了这样一个表格,我们想显示表格中的字符只需获取某个字符的高位和低位即可。例如我想显示“A”这个字符,就是0100 0001转换成16进制就是0x41,刚好对应‘A’的ASCLL码65。当然我们在编程的时候无需这样操作,只需输入字符即可,编译器会自动编译成对应的ASCLL码。

说到这里会发现无论是传输地址的指令还是传输字符的指令都是通过D0-D7这八根线进行传输,那么我们什么时候传输的数据,什么时候传输的是地址呢。我们靠的是在1602上的RS引脚,RS为高电平1时选择数据寄存器(写数据)、低电平0时选择指令寄存器(写地址)。

4、引脚定义

引脚号 符号 引脚说明 引脚号 符号 引脚说明
1 VSS 电源地 9 D2 数据端口
2 VDD 电源正极 10 D3 数据端口
3 VO 偏压信号 11 D4 数据端口
4 RS 命令/数据 12 D5 数据端口
5 RW 读/写 13 D6 数据端口
6 E 使能 14 D7 数据端口
7 D0 数据端口 15 A 背光正极
8 D1 数据端口 16 K 背光负极
  1. VSS接电源地。
  2. VDD接+5V。
  3. VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10k的电位器调整其对比度。
  4. RS是命令/数据选择引脚,接单片机的一个I/O,当RS为低电平时,选择命令;当RS为高电平时,选择数据。
  5. RW是读/写选择引脚,接单片机的一个I/O,当RW为低电平时,向LCD1602写入命令或数据;当RW为高电平时,从LCD1602读取状态或数据。如果不需要进行读取操作,可以直接将其接VSS。
  6. E是执行命令的使能引脚,接单片机的一个I/O。
  7. D0—D7,并行数据输入/输出引脚。数据口如果接P0口,可以不接上拉排阻,因为P0口内部有总线驱动器。
  8. A背光正极,接VDD。
  9. K背光负极,接地。

驱动程序

LCD1602检测忙函数

/****

*******1602检测忙函数

*****/

void lcd1602_check_busy()

{

P0=0xff;

do

{

LCD1602_RS=0;

LCD1602_RW=1;

LCD1602_E=0;

LCD1602_E=1;

} while(LCD1602_BUSY==1);

LCD1602_E=0;

}

读忙信号指令:

说明:这个指令用来读取LCD1602状态。对于单片机来说,LCD1602属于慢速设备。当单片机向其发送一个指令后,它将去执行这个指令。这时如果单片机再次发送下一条指令,由于LCD1602速度较慢,前一条指令还未执行完毕,它将不接受这条新的指令,导致新的指令丢失。因此这条读忙指令可以用来判断LCD1602是否忙,能否接收单片机发来的指令。当BF=1,表示LCD1602正忙,不能接受单片机的指令;当BF=0,表示LCD1602空闲,可以接收单片机的指令。RS=0,表示是指令;RW=1,表示是读取。

LCD1602写数据函数

/****

*******1602写数据函数

*****/

void lcd1602_write_date(uchar date)

{

lcd1602_check_busy();

LCD1602_E=0;

LCD1602_PORT=date;

LCD1602_RS=1;

LCD1602_RW=0;

LCD1602_E=1;

LCD1602_E=0;

}

写数据指令

说明:RS=1,数据;RW=0,写。指令执行时,要在DB7—DB0上先设置好要写入的数据,然后执行写命令。

LCD1602写命令函数

/****

*******1602写命令函数

*****/

void lcd1602_write_com(uchar com)

{

lcd1602_check_busy();

LCD1602_E=0;

LCD1602_PORT=com;

LCD1602_RS=0;

LCD1602_RW=0;

LCD1602_E=1;

LCD1602_E=0;

}

说明:RS=0,指令;RW=0,写。指令执行时,要在DB7—DB0上先设置好要写入的指令,然后执行写命令。

LCD1602初始化函数

/****

*******LCD1602初始化函数

*****/

void Lcd1602_Init()

{

lcd1602_write_com(0x38);

lcd1602_write_com(0x0c);

lcd1602_write_com(0x06);

lcd1602_write_com(0x01);

}

  • lcd1602_write_com(0x38);----工作方式设置指令

功能设置指令设置模块数据接口宽度和LCD显示屏显示方式,即MPU与模块接口数据总线为4位或者是8位、LCD显示行数和显示字符点阵规格;所以建议用户最好在执行其它指令设置(读忙标志指令除外)之前,在程序的开始,进行功能设置指令的执行。

DL:数据接口宽度标志: DL=1,8位数据总线DB7 ~ DB0; DL=0,4位数据总线DB7 ~ DB4,DB3 ~ DB0不用,使用此方式传送数据,需分两次进行;

N:显示行数标志: N=1,两行显示模式; N=0,单行显示模式;

F:显示字符点阵字体标志: F=1:5×10点阵+游标显示模式; F=0:5×8点阵+游标显示模式。

说明:因为是写指令字,所以RS和RW都是0。LCD1602只能用并行方式驱动,不能用串行方式驱动。而并行方式又可以选择8位数据接口或4位数据接口。这里我们选择8位数据接口(D7—D0)。我们的设置是8位数据接口,两行显示,5×8点阵,即0b00111000也就是0x38。

  • lcd1602_write_com(0x0c);----显示开光控制指令

D:显示开/关控制标志:D=1,开显示;D=0,关显示; 关显示后,显示数据仍保持在DDRAM中,立即开显示可以再现;

C:游标显示控制标志:C=1,游标显示;C=0,游标不显示; 不显示游标并不影响模块其它显示功能;显示5×8点阵字符时,游标在第八行显示,显示5×10点阵字符时,游标在第十一行显示;

B:闪烁显示控制标志:B=1,游标所指位置上,交替显示全黑点阵和显示字符,产生闪烁效果,Fosc=250kHz时,闪烁频率为0.4ms左右;通过设置,游标可以与其所指位置的字符一起闪烁。

说明:这里的设置是显示开,不显示光标,光标不闪烁,设置为0x0c。

  • lcd1602_write_com(0x06);----进入模式设置指令

I/D:字符码写入或读出DDRAM后DDRAM地址指针AC变化方向标志: I/D=1,完成一个字符码传送后,游标右移,AC自动加1; I/D=0,完成一个字符码传送后,光标左移,AC自动减1;

S:显示移位元标志: S=1,将全部显示向右(I/D=0)或者向左(I/D=1)移位; S=0,显示不发生移位元;

说明:这里的设置是游标右移,显示不发生移位元,设置为0x0c。

  • lcd1602_write_com(0x01);----清屏指令

清显示指令将空位字符码20H送入全部DDRAM位址中,使DDRAM中的内容全部清除,显示消失;地址计数器AC=0,自动加1模式;显示归位,游标或者闪烁回到原点(显示屏左上角);但并不改变移位元设置模式。

LCD1602显示字符串函数

/****

*******LCD1602显示字符串函数

*******参量定义:   hang:输入显示行数  1 第一行  2 第二行

*******           add:偏移量,0-15

*******           dat:所要显示的字符串,输入格式 " "

*****/

void lcd1602_display_str(uchar hang, uchar add, uchar *dat)

{

if(hang==1)

lcd1602_write_com(0x80+add);           //第一行

else

lcd1602_write_com(0x80+0x40+add);   //第二行

while(*dat != '\0')

{

lcd1602_write_date(*dat++);

}

}

为什么第一行是从0x80开始:

DDRAM位址设置指令设置DDRAM位址指针,它将DDRAM存储显示字符的字符码的首地址ADD6 ~ ADD0送入AC中,于是显示字符的码就可以写入DDRAM中或者从DDRAM中读出; 值得注意的是:在LCD显示屏一行显示方式下,DDRAM的位址范围为:00H ~ 4FH;两行显示方式下,DDRAM的位址范围为:第一行00H ~ 27H,第二行40H ~ 67H。因为DB7=1,所以第一行数据从0x80开始,第二行从0x80+0x40开始。

LCD1602显示流程设计

如图4-3所示为LCD1602显示流程,第一步,初始化设置,首先设置工作方式,设置成8位数据总线、两行显示模式、字体标志为5×8点阵+游标显示模式;其次,设置显示开/关控制,设置成开显示、不显示光标、光标不闪烁;接下来设置进入模式,设置成游标右移,显示不发生移位元;最后,进行清屏。第二步,检测LCD1602显示屏是否处于忙状态,设置RS=0,RW=0,E=1,利用do,while循环检测busy引脚电平,如果busy引脚是高电平,则代表此时LCD1602显示屏处于忙状态,不能接收单片机传来的指令,直到busy引脚为低电平。第三步,设置显示位置,设置RS=0,RW=0,E=1,数据口=需要显示的坐标。第四步,传入显示数据,设置RS=1,RW=0,E=1,数据口=需要显示的数据。

【mcuclub】LCD1602显示屏相关推荐

  1. 物联网开发笔记(25)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏

    这一节我们讲解了如何控制LCD1602显示屏,显示两行字. 一.目的 使用MicroPython开发ESP32开发板控制LCD1602显示屏 二.环境 ESP32 + LCD1602显示屏 + Tho ...

  2. 4.11 51单片机-LCD1602显示屏

    4.11 LCD1602显示屏 4.11.1 原理图介绍 图4-11-1 图4-11-2 根据原理图得知: LCD1602的数据脚接P0口. RD(RS)引脚接P2.6 WR(RW)引脚接P2.5 L ...

  3. lcd1602显示屏显示“welcome to 207”

    基础知识: lcd1602显示屏可以显示两行,一行可以显示16个字符 显示原理:(简单了解) 一般的液晶显示器(Liquid Crystal Display, LCD) 的主要原理是以电流刺激液晶分子 ...

  4. Arduino和C51开发LCD1602显示屏

    技术:51单片机.Arduino.LCD1602 概述 本文介绍了LCD1602显示屏,并在LCD1602上显示字符串,对LCD1602常见的问题的解决和开发方法也做了简单介绍. 详细 代码下载:ht ...

  5. LCD1602显示屏原理及使用教程

    1.芯片简介 LCD1602显示屏为字符显示屏,显示字符为16*2.采用 LCD 显示一个字符时比较复杂,因为一个字符由 6×8 或 8×8 点阵组成,既要找到和显示屏幕上某几个位置对应的显示 RAM ...

  6. STC89C52单片机LCD1602显示屏介绍与代码演示

    目录 LCD1602显示屏介绍 引脚介绍 内部结构框图 存储器 DDRAM储存器地址 CGRAM与 CGROM的地址 时序介绍 LCD1602快捷指令 LCD1602指令操作流程: 字符.字符串的显示 ...

  7. Arduino 和LCD1602显示屏

    LCD1602显示屏 带I2C接口 引脚说明 GND ------ 地线 VCC ------ 电源(5V or 3.3v 电源不同显示效果有点差别) SDA ------ I2C 数据线 SCL - ...

  8. 物联网开发笔记(26)- 使用Micropython开发ESP32开发板之控制LCD1602显示屏(续)

    上一节介绍了使用i2c来控制LCD1602显示屏,那么使用GPIO怎么控制LCD1602显示屏呢?使用GPIO又分为8bit和4bit两种模式,比较常用的4bit模式,因为它占用GPIO口比较少.   ...

  9. 8051单片机Proteus仿真与开发实例-LCD1602显示屏仿真(4线接法)

    LCD1602显示屏仿真(4线接法) LCD(液晶显示器)用于显示嵌入式系统中的状态或参数. LCD 1602 是 16 引脚设备,具有 8 个数据引脚(D0-D7)和 3 个控制引脚(RS.RW.E ...

最新文章

  1. Pycharm中如何安装python库
  2. Windows XP SP3远程桌面连接支持网络级身份验证配置
  3. 【数据结构与算法】5. C++中 list、deque、vector对比
  4. Samba服务器如何与Windows 95共享?
  5. 学计算机对显卡要求大吗,【5人回答】学AE的电脑配置要求高吗?需要什么样的电脑配置-3D溜溜网...
  6. SAP CRM Fiori 应用 my Opportunities 的后台性能分析
  7. dnn中个性化服务的使用
  8. 光纤收发器有什么用?光纤收发器的作用是什么?
  9. Java数据库篇1——数据库配置
  10. PyTorch学习—6.PyTorch数据读取机制Dataloader与Dataset
  11. vb.net oracle数据库,vb.net 如何与oracle数据库连接
  12. MATLAB学习笔记(1):MATLAB简介
  13. PyRadiomics工具包使用说明
  14. 已知销售额怎么计算成本_计算成本根据销售额怎么样推算出成本,举例, – 手机爱问...
  15. 谷歌浏览器反复提示PageOffice安装
  16. 一个运行成功的hibernate例子(解决一直报hibernate mapping exception的错误)
  17. 1.2 win10下Docker 和 Docker Compose的安装
  18. Android事件分发简单介绍
  19. 在Mac中使用Word添加带圈的脚注
  20. 守护“城市生命线” | 地空智能带您走进数字孪生地下管网

热门文章

  1. 模拟登陆CSDN——就是这么简单
  2. 2022年第十一届认证杯数学中国数学建模国际赛小美赛:D题野生动物贸易是否应该长期禁止建模 38页一等奖论文及代码
  3. Java 并发编程的艺术 pdf 下载
  4. Excel导入sql
  5. 初识Kotlin新的安卓编程语言
  6. 道指mt4代码_mt4编程代码讲解
  7. 安装Nvidia的PS插件后无法打开DDS文件格式
  8. STEM 教育课程如何设计?
  9. AD17开发流程和经验技巧
  10. sql盲注如何修补_如何修复SQL注入漏洞