0°

16×2字符显示LCD1602模块与Arduino

想要你的Arduino项目显示状态信息,传感器读数,或者你只是想创建自己的无尽赛跑游戏?这些LCD显示器可能是最佳选择。它们非常常见,是为项目添加可读界面的快捷方式。

本教程将介绍启动和运行字符LCD所需了解的所有内容。不仅仅是16×2(1602),而且基于日立的并行接口LCD控制器芯片的任何字符LCD(例如,16×4,16×1,20×4等)都 称为HD44780。因为,Arduino社区已经开发了一个处理HD44780 LCD的库; 所以我们马上来学习一下吧。

提示

LCD是液晶显示器的缩写。它基本上是一个使用液晶产生可见图像的显示单元。

当电流施加到这种特殊类型的晶体时,它会变成不透明状态,阻挡屏幕后面的背光。结果,与其他区域相比,特定区域将变暗。这就是字符在屏幕上的显示方式。

硬件概述

这些LCD非常适合显示文本/字符,因此称为“字符LCD”。显示器有一个LED背光,可以在两行中显示32个ASCII字符,每行16个字符。

16×2字符LCD模块与Arduino

如果仔细观察,您实际上可以看到显示屏上每个字符的小矩形以及构成字符的像素。这些矩形中的每一个都是5×8像素的网格。

虽然它们只显示文字,但它们有许多尺寸和颜色:例如,16×1,16×4,20×4,蓝色背景上有白色文字,绿色上有黑色文字等等。

好消息是所有这些显示都是“可交换的” – 如果你用一个显示你的项目,你可以拔掉它并使用你选择的另一个尺寸/颜色的LCD。您的代码可能需要调整到更大的尺寸,但至少接线是相同的!

16×2字符LCD引脚

在深入研究连接和示例代码之前,让我们先来看一下LCD Pinout。

16×2字符LCD模块与Arduino

GND 应连接到Arduino的GND。

VCC 是LCD的电源,我们连接Arduino上的5伏引脚。

Vo(LCD对比度) 控制LCD的对比度和亮度。使用带电位计的简单分压器,我们可以对对比度进行微调。

RS(寄存器选择) 引脚让Arduino告诉LCD它是发送命令还是数据。基本上,该引脚用于区分命令和数据。 

例如,当RS引脚设置为LOW时,我们将向LCD发送命令(例如将光标设置到特定位置,清除显示,向右滚动显示等等)。当RS引脚设置为HIGH时,我们将数据/字符发送到LCD。

 LCD上的R / W(读/写)引脚用于控制是从LCD读取数据还是将数据写入LCD。由于我们只是将此LCD用作OUTPUT器件,因此我们将此引脚置为低电平。这迫使它进入WRITE模式。

E(启用) 引脚用于启用显示。这意味着,当此引脚设置为低电平时,LCD不关心R / W,RS和数据总线的情况; 当此引脚设置为HIGH时,LCD正在处理输入数据。

D0-D7(数据总线) 是带有我们发送到显示器的8位数据的引脚。例如,如果我们想在显示器上看到大写的’A’字符,我们将这些引脚设置为0100 0001(根据ASCII表)到LCD。

AK(阳极和阴极) 引脚用于控制LCD的背光。

测试字符LCD

现在我们谈到了有趣的东西。我们来测试你的液晶显示器。

首先,将Arduino Uno的5V和GND引脚连接到面包板电源导轨,然后将LCD插入面包板。

现在我们将启动LCD。LCD有两个独立的电源连接; 一个(引脚1和引脚2)用于LCD本身,另一个(引脚15和引脚16)用于LCD背光。将LCD上的引脚1和16连接到GND,将LCD上的引脚2和15连接到5V。

注意

绝大多数LCD都具有用于LED背光的内置串联电阻。如果您碰巧有一个不包含电阻的LCD,则需要在5V和引脚15之间添加一个。

要计算串联电阻的值,请查看数据手册中的最大背光电流和典型的背光电压降。使用简单的欧姆定律,您可以计算电阻值。

如果您找不到数据表,那么使用220O电阻应该是安全的,但是这么高的值可能会使背光略微变暗。

接下来,我们将在LCD上连接Pin 3,控制显示器的对比度和亮度。为了进行精细的对比度调整,我们将在5V和GND之间连接一个10K电位器; 将电位计的中心引脚(抽头)连接到LCD上的引脚3。

16×2字符LCD模块与Arduino

现在!现在打开Arduino,你会看到背光亮起来。当您旋转电位计上的旋钮时,您应该注意到第2行矩形出现。如果发生这种情况,恭喜!你的液晶显示器做得很好。

接线 – 使用Arduino Uno连接16×2字符LCD

在我们上传代码并将数据发送到显示器之前,让我们将LCD连接到Arduino。

LCD有很多引脚(总共16个引脚),我们将向您展示如何连线。但是,好消息是并非所有这些引脚都是我们连接到Arduino所必需的。

我们知道有8条数据线将原始数据传送到显示器。但是,HD44780 LCD的设计方式是我们只能使用4个数据引脚(4位模式)而不是8个(8位模式)与LCD通信。这节省了我们4个IO口!

4位模式和8位模式有什么区别?

使用8位模式更快,因为使用4位模式需要一半的时间。因为在8位模式下,您只需一次性写入数据。但是,在4位模式下,您必须将一个字节分成2个半字节,将其中一个位移到右侧4位,然后执行2次写操作。

因此,4位模式通常用于保存I / O引脚。但是,当应用程序需要速度且至少有10个I / O引脚可用时,最好使用8位模式。

所以回顾一下,我们将使用4位模式连接LCD,因此我们只需要6个引脚:RS,EN,D7,D6,D5和D4与LCD通信。

现在,让我们将LCD显示器连接到Arduino。LCD上的四个数据引脚(D4-D7)将连接到#4-7的Arduino数字引脚。LCD上的Enable引脚将连接到Arduino#2,LCD上的RS引脚将连接到Arduino#1。

下图显示了如何连接所有内容。

16×2字符LCD模块与Arduino

有了这个,您现在可以上传一些代码并进行显示打印。

Arduino代码

以下测试程序将打印“Hello World!” 液晶显示屏上的信息。尝试写一下,然后我们将详细剖析它:

//包括库代码:
#include 


// 创建一个LCD对象。参数:(rs,enable,d4,d5,d6,d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() 
{
	// 设置LCD的列数和行数:
	lcd.begin(16, 2);

	// 清除LCD屏幕
	lcd.clear();
}

void loop() 
{
	// 将信息打印到液晶显示屏。
	lcd.print(" Hello world!");

	// 将光标设置为第0行第1行
	// (注意:第1行是第二行,因为计数从0开始):
	lcd.setCursor(0, 1);
	// 将信息打印到液晶显示屏。
	lcd.print(" LCD Tutorial");
}

程序首先加入了LiquidCrystal库。正如本教程前面提到的,Arduino社区有一个名为LiquidCrystal的库,它使得LCD模块的编程变得更加简单。

//包括库代码:
#include 

接下来我们要创建一个LiquidCrystal对象。该对象使用6个参数,并指定哪些Arduino引脚连接到LCD的RS引脚,使能引脚和数据引脚:d4,d5,d6和d7。

// 创建一个LCD对象。参数:(rs,enable,d4,d5,d6,d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

现在您已声明了LiquidCrystal对象,您可以访问特定于LCD的特殊方法(也称为函数)。

在’setup’函数中:我们将使用两个函数:第一个函数是 begin() 。这用于指定显示的尺寸,即显示器具有多少列和行。如果您使用16×2字符LCD,请传递参数16和2; 如果您使用20×4 LCD,请传递参数20和4.您明白了?

第二个功能是 clear() 。这会清除LCD屏幕并将光标移动到左上角。

lcd.begin(16, 2);
lcd.clear();

在’循环’功能中:我们将使用print()  显示我们在屏幕第一行看到的消息的 功能。

// 将信息打印到液晶显示屏。
lcd.print(" Hello world!");

接下来我们将通过调用函数setCursor()  将光标位置设置为第二行 。光标位置指定您需要在LCD上显示新文本的位置。左上角被认为是col = 0,row = 0

lcd.setCursor(0, 1);
lcd.print(" LCD Tutorial");
16×2字符LCD模块与Arduino

如果一切顺利,你应该在显示器上看到这样的东西。

 LiquidCrystal Library中的其他有用功能

您可以使用LiquidCrystal 对象使用一些有用的函数 。其中很少列出如下:

  • 如果您只想将光标定位在LCD的左上方而不清除显示屏,请使用 home()
  • 有许多应用程序,如turbo C ++编译器或记事本++,其中按键盘上的“插入”键更改光标。就像那样,您可以使用blink() 或 更改LCD上的光标 lcd.cursor() 。
  • blink() 功能显示5×8像素的闪烁块,同时 lcd.cursor() 在下一个字符将被写入的位置显示下划线(线)。
  • 您可以使用此 noBlink() 功能关闭闪烁的LCD光标并 lcd.noCursor() 隐藏LCD光标。
  • 您可以使用lcd.scrollDisplayRight() 一个空格向右滚动显示内容,或使用 一个空格 lcd.scrollDisplayLeft() 。如果要连续滚动文本,则需要在“for循环”中使用这些函数。

16×2字符LCD的自定义字符生成

如果您在显示屏上发现无聊且不引人注意的字符,则可以为LCD创建自己的自定义字符(字形)和符号。当您想要显示不属于标准ASCII字符集的字符时,它们非常有用 。

注意

基于Hitachi HD44780控制器的所有LCD显示器都有两种类型的存储器,用于存储定义的字符,称为CGROM和CGRAM(字符发生器ROM和RAM)。CGROM内存是非易失性的,不能修改; CGRAM内存是易失性的,可以随时修改。

CGROM用于存储可以使用ASCII代码显示的所有永久字体。例如,如果我们写0x41然后在显示器上我们得到字符’A’。CGRAM是另一种可用于存储用户定义字符的内存。

该RAM限制为64字节。意思是,对于基于5×8像素的LCD; CGRAM中最多可存储8个用户定义的字符。对于基于5×10像素的LCD,只能存储4个用户自定义字符。

正如我们在本教程前面所讨论的那样,显示器上的字符是以5×8像素矩阵形成的,因此您需要在该矩阵中定义自定义字符。要定义字符,您将使用LiquidCrystal库的 createChar()函数。

要使用 createChar() ,首先要设置一个8字节的数组。数组中的每个字节(仅考虑5位)定义了5×8矩阵中的一行字符。然后,字节中的0和1表示该行中的哪些像素应该打开以及哪些像素应该关闭。

自定义字符生成器

直到现在创建自定义角色并不容易!我们为字符LCD创建了一个在线工具 。你能看到下面的蓝色网格吗?这是在线工具的截图。您可以单击任意5×8像素来设置/清除该特定像素。当您单击像素时,角色的代码将生成在网格旁边。此代码可以直接用于Arduino程序。进入在线工具:点击进入

16×2字符LCD模块与Arduino

你的想象力是无限的。唯一的限制是LiquidCrystal库仅支持八个自定义字符。但是不要失望,看看光明的一面,至少我们有八个角色。

下面的程序演示了如何在显示器上使用这些自定义字符。

已有3人支付

包含库之后,我们需要初始化八个字节的自定义字符数组。

byte Heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

在设置中,我们必须使用该createChar() 函数创建自定义角色 。该函数有两个参数。第一个是0到7之间的数字,以便保留8个支持的自定义字符之一。第二个参数是字节数组的名称。

// 创造一个新角色
lcd.createChar(0, Heart);

接下来在循环中,要显示我们使用write() 函数的自定义字符 ,作为参数,我们使用我们保留的字符数。

已有3人支付

16×2字符LCD模块与Arduino

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论