【51单片机系列】LCD1602液晶模块

您所在的位置:网站首页 51单片机vcc与gnd扩展 【51单片机系列】LCD1602液晶模块

【51单片机系列】LCD1602液晶模块

2024-05-23 16:25| 来源: 网络整理| 查看: 265

本文是关于液晶显示屏的相关介绍。相对于静态数码管、动态数码管、LED点阵等,LCD1602液晶显示器能够显示更多的字符数字信息,并且也是常用的一种显示装置。

一、LCD1602介绍1.1、LCD1602简介

1602液晶,也叫做1602字符型液晶,可以显示2行字符信息,每行可以显示16个字符,是一种专门用来显示字母、数字、符号的点阵型液晶模块。

LCD1602由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距地间隔,每行之间也有间隔,起到了字符间距和行间距的作用。

LCD1602实物如下:

LCD1602实物图

从实物图中可以看到16个管脚孔,从左至右管脚编号顺序是1-16,管脚功能定义如下表:

管脚编号符号管脚说明1VSS电源地2VDD电源正极3VL液晶显示偏压信号4RS数据/命令选择端 H/L5R/W读/写选择端 H/L6E使能信号7~14D0~D7Data I/O15BLA背光源正极16BLK背光源负极

管脚详细说明:

3脚-VL:液晶显示偏压信号,该管脚用来调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号。需要注意的是,该管脚电压为0时可以得到最强的对比度。4脚-RS:数据/命令选择端,当该管脚为高电平时,可以对1602进行数据字节的传输操作;该管脚为低电平时,对1602进行命令字节的传输操作。所谓命令字节,就是对LCD1602的一些工作方式设置的字节;数据字节,用来在1602上显示的字节。LCD1602的数据是8位的。5脚-R/W:读写选择端。当该管脚为高电平时可对LCD1602进行读数据操作,该管脚为低电平时对LCD1602进行写数据操作。6脚-E:使能信号,实际上是LCD1602的数据控制时钟信号,使用该管脚的上升沿实现对LCD1602的数据传输。7~14脚-8位并行数据口:51单片机一组IO也是8位,方便了对LCD1602的数据读写。

LCD1602内部含有80字节的DDRAM,是用来存储显示字符的。其地址和屏幕的对应关系如下:

显示位置1234567......40DDRAM地址第一行00H01H02H03H04H05H06H......27HDDRAM地址第二行40H41H42H43H44H45H46H......67HLCD602地址和屏幕对应关系

从上图可以看到,并不是所有的地址都能直接用来显示字符。只有第一行中的00-0F,第二行中的40-4F才能显示,其它地址只能用于存储

要显示字符时首先要输入显示字符地址,即明确在哪里显示字符。比如第二行第一个字符地址是40H,不能够直接写入40H,因为写入显示地址时要求最高位D7为1,所以第二行第一个字符地址应该是40H|80H=C0H。

1.2、LCD1602常用指令

LCD1602有一些常用指令,这些指令对于初始化是必须的。

LCD1602常用指令1.3、LCD1602使用

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

使用LCD1602通常用于写数据进去,比较少使用读功能。

LCD1602操作步骤如下:

① 初始化

② 写命令,RS=L,设置显示坐标;

③ 写数据,RS=H;

这里不需要读数据,所以只需要两个写时序。

第一个是写指令字时序。设置LCD1602的工作方式时,需要把RS置为低电平,RW置为低电平,然后将指令字送到数据口D0~D7,最后E使能引脚一个高脉冲将数据写入。第二个是写数据字时序。LCD1602实现显示时,需要把RS置为高电平,RW置为低电平,然后将数据字送到数据口D0~D7,最后E使能引脚一个高脉冲将数据写入。

从上面两个时序可以看出,写指令和写数据只是RS电平不一样。

LCD1602时序图如下:

LCD1602时序图LCD1602时序图时间

从上图中可以看到时序图中的时间参数全部是ns级别的,51单片机的机器周期是1us,指令周期是2~4个机器周期,所以在程序中可以不加延时程序,也能适配LCD1602的时序要求。

当要写命令字时,时间由左往右,RS变为低电平,R/W变为低电平,RS的状态先变化完成;然后DB0~DB7上数据进入有效阶段,接着E引脚有一个正脉冲的跳变,接着维持时间最小值为tpw=400ns的E脉冲宽度;然后引脚E负跳变,RS电平变化,R/W电平变化。这便是一个完整的LCD1602写命令的时序。

二、LCD1602使用示例

本示例实现的功能:系统运行时,在LCD1602液晶上显示字符信息。使用到的资源是LCD1602液晶显示屏。

proteus中设计原理图如下:

PROTEUS设计LCD1602液晶显示模块

从上面的原理图可以看出该电路不是独立的,LCD1602的8位数据口DB0-DB7与单片机的P0.0-P0.7管脚链接;LCD1602的RS、RW、E脚与单片机的P2.6、P2.5、P2.7管脚链接;RV1是一个电位器,用来调节LCD1602显示亮度。

软件设计:

LCD发送命令和数据代码如下:

#include #include "lcd1602.h" // 延时函数,延时ims,12MHz晶振下,12分频单片机的延时 void lcd1602_Delay1ms(uint i) { uchar a,b; for(;i>0;i--) { for(b=199;b>0;b--) { for(a=1;a>0;a--); } } } #ifndef LCD1602_4PINS // 8位数据线 // 向LCD写入一个字节的命令 void lcd1602_WriteCom(uchar com) { LCD_EN=0; // 使能 LCD_RS=0; // 发送命令 LCD_RW=0; // 选择写命令 LCD_DATA=com; // 放入数据 lcd1602_Delay1ms(1); // 等待数据稳定 LCD_EN=1; // 写入时序 lcd1602_Delay1ms(5); // 保持稳定 LCD_EN=0; } // 向LCD写入一个字节的数据 void lcd1602_WriteData(uchar dat) { LCD_EN=0; // 使能 LCD_RS=1; // 发送数据 LCD_RW=0; // 选择写命令 LCD_DATA=dat; // 放入数据 lcd1602_Delay1ms(1); // 等待数据稳定 LCD_EN=1; // 写入时序 lcd1602_Delay1ms(5); // 保持稳定 LCD_EN=0; } // LCD1602初始化 void lcd1602_Init() { lcd1602_WriteCom(LCD_MODE_8_2_5X7); // 8位数据,显示2行,5x7点阵/每字符 38H lcd1602_WriteCom(LCD_CURSOR_RIGHT); // 写入数据后光标右移 06H lcd1602_WriteCom(LCD_CLEAR); // 清屏 01H lcd1602_WriteCom(LCD_OPENSHOW); // 显示开 0CH lcd1602_WriteCom(LCD_START_ADDR1); // 设置数据指针地址起始点是第一行第一列,80H=00H|80H } #else // 4位数据线 // 向LCD写入一个字节的命令 void lcd1602_WriteCom(uchar com) { LCD_EN=0; // 使能 LCD_RS=0; // 发送命令 LCD_RW=0; // 选择写命令 LCD_DATA=com; // 放入数据,4位数据,接线到P0的高四位,传送高四位不用改 lcd1602_Delay1ms(1); // 等待数据稳定 LCD_EN=1; // 写入时序 lcd1602_Delay1ms(5); // 保持稳定 LCD_EN=0; LCD_DATA=com>4&0x01]; // 月的十位 Disp1Row[6]=szTime[TIME[4]&0x0f]; // 月的个位 Disp1Row[7]=szTime[11]; // - Disp1Row[8]=szTime[TIME[3]>>4&0x03]; // 日的十位 Disp1Row[9]=szTime[TIME[3]&0x0f]; // 日的个位 Disp1Row[10]=szTime[10]; // 空格 Disp1Row[11]=szTime[(TIME[5]&0x0f) - 1]; // 星期几 Disp1Row[12]=szTime[12]; // t Disp1Row[13]=szTime[13]; // h Disp2Row[0]=szTime[TIME[2]/16]; // 时的十位 Disp2Row[1]=szTime[TIME[2]&0x0f]; // 时的个位 Disp2Row[2]=szTime[14]; // : 冒号 Disp2Row[3]=szTime[TIME[1]/16]; // 分的十位 Disp2Row[4]=szTime[TIME[1]&0x0f]; // 分的个位 Disp2Row[5]=szTime[14]; // : 冒号 Disp2Row[6]=szTime[TIME[0]>>4&0x07]; // 秒的十位 Disp2Row[7]=szTime[TIME[0]&0x0f]; // 秒的个位 }

仿真结果:

LCD1602显示时间信息仿真结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3