1.简介

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

2.硬件参数

(1) LCD1602主要技术参数
a.显示容量:16×2个字符
b.芯片工作电压:4.5—5.5V
c.工作电流:2.0mA(5.0V)
d.模块最佳工作电压:5.0V
e.字符尺寸:2.95×4.35(W×H)mm
(2) 引脚定义
在这里插入图片描述
LCD1602引脚主要有逻辑电源引脚VDD,VSS;背光带电源引脚BLA,BLK;数据引脚D0-D7、RS、R/W、EN;偏压信号引脚VL;其中:

  1. VL引脚:为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度;
  2. RS引脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器
  3. R/W引脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
  4. 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设计资料及例程 请关注公众号,首页回复“1602”获取资料
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐