格物致知、诚意正心
希望您的Arduino项目显示状态消息或传感器读数吗?那么这些LCD显示器可能是最合适的选择。它们是极为常见的快捷方式,可以为您的项目添加可读的界面。
本教程将介绍使用角色液晶显示器启动和运行所需的所有知识。不仅基于16×2(1602)的任何字符LCD(例如16×4、16×1、20×4等)都是基于日立公司称为HD44780的并行接口LCD控制器芯片的。因为,Arduino社区已经开发了一个库来处理HD44780 LCD。这样我们就可以立即将它们连接起来。
这些LCD非常适合仅显示文本/字符,因此被称为“字符LCD”。显示器具有LED背光灯,可以两行显示32个ASCII字符,每行显示16个字符。
如果仔细观察,实际上可以看到显示屏上每个字符的小矩形以及组成字符的像素。这些矩形中的每一个都是5×8像素的网格。
尽管它们仅显示文本,但它们的大小和颜色确实多种多样:例如16×1、16×4、20×4,蓝色背景为白色文本,绿色为黑色文本,等等。
好消息是,所有这些显示器都是“可互换的”-如果您用一个显示器构建项目,则只需拔下它,然后使用您选择的另一个尺寸/彩色LCD。您的代码可能必须调整为更大的尺寸,但至少接线是相同的!
在深入研究连接和示例代码之前,让我们首先看一下LCD引脚排列。
地线 应该连接到Arduino的地面。
VCC 是LCD的电源,我们连接了Arduino上的5伏引脚。
Vo(LCD对比度)控制LCD的对比度和亮度。使用带有电位计的简单分压器,我们可以对对比度进行微调。
RS(寄存器选择)引脚可以让Arduino告知LCD它是发送命令还是发送数据。基本上,该引脚用于区分命令和数据。
例如,当RS引脚设置为LOW时,我们将向LCD发送命令(例如将光标设置到特定位置,清除显示,向右滚动显示,依此类推)。当RS引脚设置为HIGH时,我们将向LCD发送数据/字符。
读/写(R / W)LCD上的PIN引脚用于控制您是要从LCD读取数据还是向LCD写入数据。由于我们只是将此LCD用作输出设备,因此我们将将此引脚连接为LOW。这将强制其进入“写入”模式。
E(启用)引脚用于启用显示。这意味着,当此引脚设置为LOW时,LCD不会理会R / W,RS和数据总线线路的状况。当此引脚设置为高电平时,LCD正在处理传入的数据。
D0-D7(数据总线)是承载我们发送到显示器的8位数据的引脚。例如,如果我们想在显示屏上看到大写的“ A”字符,我们会将这些引脚设置为LCD的0100 0001(根据ASCII表)。
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上建立引脚3的连接,该引脚控制显示屏的对比度和亮度。为了进行精细的对比度调整,我们将在5V和GND之间连接一个10K电位器。将电位器的中心引脚(抽头)连接到LCD的引脚3。
就是这样!现在打开Arduino,您将看到背光灯亮起。在旋转电位器上的旋钮时,您应该注意到出现了矩形的第一行。如果发生这种情况,恭喜!您的LCD运转良好。
在开始上传代码并将数据发送到显示器之前,让我们将LCD连接到Arduino。
LCD上有很多针脚(总共16个针脚),我们将向您展示如何进行接线。但是,好消息是,对于我们连接到Arduino而言,并非所有这些引脚都是必需的。
我们知道有8条数据行将原始数据传送到显示器。但是,HD44780 LCD的设计方式是我们可以仅使用4个数据引脚(4位模式)而不是8个(8位模式)与LCD通讯。这为我们节省了4个引脚!
因此,回顾一下,我们将使用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。
下图显示了如何接线。
这样,您现在就可以上传一些代码并打印显示了。
以下测试草图将打印“ Hello World!”。液晶显示屏上显示信息。尝试一下草图,然后我们将对其进行详细剖析。
// include the library code: #include <LiquidCrystal.h> // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Clears the LCD screen lcd.clear(); } void loop() { // Print a message to the LCD. lcd.print(" Hello world!"); // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // Print a message to the LCD. lcd.print(" LCD Tutorial"); }
如果一切正常,您应该在显示屏上看到类似的内容。
草图首先包括LiquidCrystal库。如本教程前面所述,Arduino社区具有一个名为LiquidCrystal的库,该库使对LCD模块的编程变得不那么困难。您可以在Arduino的官方网站上找到有关该库的更多信息。
// include the library code: #include <LiquidCrystal.h>
接下来,我们必须创建一个LiquidCrystal对象。该对象使用6个参数,并指定将哪些Arduino引脚连接至LCD的RS引脚,使能引脚和数据引脚:d4,d5,d6和d7。
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
现在,您已经声明了LiquidCrystal对象,您可以访问特定于LCD的特殊方法(即函数)。
在“设置”功能中:我们将使用两个功能:第一个功能是begin()。这用于指定显示器的尺寸,即显示器具有多少列和行。如果使用的是16×2字符LCD,则传递参数16和2;否则,输入0。如果您使用的是20×4 LCD,请传递参数20和4。
begin()
第二个功能是clear()。这将清除LCD屏幕并将光标移到左上角。
clear()
lcd.begin(16, 2); lcd.clear();
在“循环”功能中:我们将使用该print()功能来显示在屏幕第一行看到的消息。
print()
// Print a message to the LCD. lcd.print(" Hello world!");
接下来,我们将通过调用函数setCursor()将光标位置设置为第二行。光标位置指定了您需要在LCD上显示新文本的位置。左上角被视为col = 0,第0行
setCursor()
lcd.setCursor(0, 1); lcd.print(" LCD Tutorial");
您可以对LiquidCrystal对象使用一些有用的功能。下面列出了其中的几个:
home()
blink()
lcd.cursor()
noBlink()
lcd.noCursor()
lcd.scrollDisplayRight()
lcd.scrollDisplayLeft()
如果在显示屏上发现字符枯燥无味,则可以为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矩阵中定义了一行字符。而字节中的零和一则指示该行中的哪些像素应打开,哪些像素应被关闭。
createChar()
下图演示了如何在显示器上使用这些自定义字符。
// include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // make some custom characters: byte Heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte Bell[8] = { 0b00100, 0b01110, 0b01110, 0b01110, 0b11111, 0b00000, 0b00100, 0b00000 }; byte Alien[8] = { 0b11111, 0b10101, 0b11111, 0b11111, 0b01110, 0b01010, 0b11011, 0b00000 }; byte Check[8] = { 0b00000, 0b00001, 0b00011, 0b10110, 0b11100, 0b01000, 0b00000, 0b00000 }; byte Speaker[8] = { 0b00001, 0b00011, 0b01111, 0b01111, 0b01111, 0b00011, 0b00001, 0b00000 }; byte Sound[8] = { 0b00001, 0b00011, 0b00101, 0b01001, 0b01001, 0b01011, 0b11011, 0b11000 }; byte Skull[8] = { 0b00000, 0b01110, 0b10101, 0b11011, 0b01110, 0b01110, 0b00000, 0b00000 }; byte Lock[8] = { 0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 }; void setup() { // initialize LCD and set up the number of columns and rows: lcd.begin(16, 2); // create a new character lcd.createChar(0, Heart); // create a new character lcd.createChar(1, Bell); // create a new character lcd.createChar(2, Alien); // create a new character lcd.createChar(3, Check); // create a new character lcd.createChar(4, Speaker); // create a new character lcd.createChar(5, Sound); // create a new character lcd.createChar(6, Skull); // create a new character lcd.createChar(7, Lock); // Clears the LCD screen lcd.clear(); // Print a message to the lcd. lcd.print("Custom Character"); } // Print All the custom characters void loop() { lcd.setCursor(0, 1); lcd.write(byte(0)); lcd.setCursor(2, 1); lcd.write(byte(1)); lcd.setCursor(4, 1); lcd.write(byte(2)); lcd.setCursor(6, 1); lcd.write(byte(3)); lcd.setCursor(8, 1); lcd.write(byte(4)); lcd.setCursor(10, 1); lcd.write(byte(5)); lcd.setCursor(12, 1); lcd.write(byte(6)); lcd.setCursor(14, 1); lcd.write(byte(7)); }
包含库之后,我们需要初始化八个字节的自定义字符数组。
byte Heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
在设置中,我们必须使用createChar()函数创建自定义字符。该函数有两个参数。第一个是0到7之间的数字,以保留8个受支持的自定义字符之一。第二个参数是字节数组的名称。
// create a new character lcd.createChar(0, Heart);
在循环的下一步中,要显示自定义字符,请使用write()function,并使用保留的字符号作为参数。
write()
// byte(0) represents Heart character. lcd.write(byte(0));
您的邮箱地址不会被公开。 必填项已用 * 标注
评论 *
显示名称 *
邮箱 *
网站
在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。