3分钟了解LCD1602液晶显示屏的使用

1.简介

作为各类单片机实物设计的常用显示屏,LCD1602是一种专门用于显示字母、数字、符号等点阵式LCD,其1602是指LCD显示的内容为16X2,即可以显示两行,每行16个字符(1个汉字占用2个字符)。

2. 硬件参数

(1)LCD1602主要技术参数

  • 显示容量:16×2个字符

  • 芯片工作电压:4.5—5.5V

  • 工作电流:2.0mA(5.0V)

  • 模块最佳工作电压:5.0V

  • 字符尺寸:2.95×4.35(W×H)mm

(2)引脚定义

LCD1602引脚主要有逻辑电源引脚VDD,VSS;背光带电源引脚BLA,BLK;数据引脚D0-D7、RS、R/W、EN;偏压信号引脚VL;其中:

  • VL引脚:为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度;

  • RS引脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器

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

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

(3)电路图

其中可调电阻P用于调整显示器的对比度。电阻R作为限流电阻,防止过流烧坏显示屏背光。

3. 控制程序

LCD1602显示屏控制程序简化下来,也相对简单,只需要实现写数据写指令初始化三个控制函数即可实现对LCD1602的控制。(写操作一般不用,这里就省略不说)

(1)写操作时序

要实现下面的写数据和写指令函数,都是以写操作时序来进行编程,实现有效的控制;其中,可以通过写时序和RS引脚的定义,写数据和写指令的区别在于RS引脚的电平;RS为高电平时,写数据;RS为低电平时,写指令。

(2)写数据函数

//写数据
void write_data(uchar date)
{
  LCDRS=1;
  P0=date;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}

(3)写指令函数

//写命令
void write_com(uchar com)
{
  LCDRS=0;
  P0=com;
  LCDdelay(5);
  LCDEN=1;
  LCDdelay(5);
  LCDEN=0;
}

(4)初始化函数

LCD1602初始化需要做以下设置:

a.设置写操作:R/W设为低电平;

b.屏幕设置模式:写指令38H;

c.打开显示,关闭光标:写指令0CH;

d.设置显示光标移动位置:写指令06H;

e.设置字符显示位置:写指令(字符显示的起始位置);

void Init1602()
{
  uchar i=0;
  LCDRW = 0;
  write_com(0x38);//屏幕初始化
  write_com(0x0c);//打开显示 无光标 无光标闪烁
  write_com(0x06);//当读或写一个字符是指针后一一位
  write_com(0x01);//清屏
  write_com(0x80);//设置位置
}

注:由于对LCD1602进行控制时不需要实现读操作,所以R/W在初始化后恒为低电平(或者此引脚直接对地短路)。

4. 显示字符

要在LCD1602上显示特定的字符,实际上就是对LCD1602的DDRAM上写入对应的数据,显示屏便显示你想要的字符。

(1)DDRAM地址映射图

从RAM可以看出来,是读的意思,地址与显示位置如下,每行40个地址,1602只用到前16个,共两行,对应关系如图: 

根据写指令格式,由于地址为7位,在写入地址时,第8位恒为1,如图:

当我们想在指定位置写入内容时,要先指定地址,如在第一行第一位写入,地址位是00H,再加上DB7的1,即80H(0010000000),第二行第一位是40H,再加上DB7的1,即C0H(0011000000),依次类推。

比如要在第1行第3位写入“HELLO WOLRD”,即先写入地址,再写入数据:

write_com(0x40+0);  //第1行第3位
write_com(‘H’);
write_com(‘O’);
.....
write_com(‘D’);

如果是写在第2行第2位:

write_com(0x40+0x80+2);  //第2行第2位//数据与上面一样

(2)显示函数

为了程序的简洁与方便,我们将显示程序整合成一个显示函数:

​​​​​

void Display_1602(uchar x,uchar y,uchar *str){ unsigned char addr;    if (y == 0)  {    addr = 0x00 + x; //第一行的x位置显示  }  else  {    addr = 0x40 + x; //第二行x的位置显示  }  write_com(addr + 0x80);  while (*str != '\0')  {    write_data(*str++);  }}

      要实现上面显示就比较简单:

第1行第3位显示“HELLO WOLRD”:

Display_1602(3,1,”HELLO WOLRD”);

第2行第2位显示“HELLO WOLRD”:

Display_1602(2,2,”HELLO WOLRD”);

需要更多关于LCD1602资料

关注微信公众号“小亮的物联网之路”

发布了9 篇原创文章 · 获赞 4 · 访问量 229

猜你喜欢

转载自blog.csdn.net/weixin_44206126/article/details/104355202