如何将 16x2 液晶显示屏与 Arduino 进行连接使用
扫描二维码
随时随地手机看文章
简介
倘若你的 Arduino 项目不仅能发出闪烁的灯光或驱动电机运转,还能向你清晰地说明它正在做什么的话,那会是怎样的情景呢?
在本节课中,您将学习如何使用 16x2 液晶显示屏来显示信息,了解幕后所发生的情况,并使您的项目显得更加精致和专业。
这是“Arduino 初学者教程”系列的第 14 课,也是这类课程中那种能让学习过程感觉更加“真实”的一课。
让我们开始吧。
物资;供应品
对于这个项目,您将需要:
•Arduino UNO
•I/O 扩展护罩
•液晶显示屏
•四针电线
了解液晶显示屏模块
这是随“MindPlus Arduino 编程套装”一同配备的液晶显示屏模块,正是我们在本系列的 24 期内容中一直使用的那套套装。
乍一看,它似乎太过简单了:正面有一个屏幕,背面有一些电子元件,还有一个仅四个针脚的连接器,这已经暗示着接线过程会相当简便。
如果你仔细观察显示屏的底部前端,就会看到上面印着“LCD 1602”字样。这个名称确切地告诉我们这是何种类型的屏幕。
“16”指的是每行能够显示的字符数量,而“2”指的是行数。换句话说,这种显示屏最多能在第一行显示 16 个字符,在第二行也能显示 16 个字符。
尽管我们称之为“字符显示”,但每个字符并非是一个单独的完整块状物。如果你给屏幕通电并仔细观察,就会发现每个字母或数字都是由一个由小点组成的网格构成的。
具体来说,每个字符都是由一个 5×8 像素的矩阵构成的。通过控制不同的像素开启或关闭,液晶显示屏就能绘制出字母、数字和符号。
一旦你明白了这个细节,这款显示器的各种局限性和可能性也就变得清晰明了了。
您还会发现其他格式的液晶显示屏。有些尺寸较小,比如 16x1 显示屏,而有些则较大,比如 16x4。它们还具有不同的颜色,例如绿色或蓝色。尽管存在这些差异,但其基本理念是相同的。
I2C 通信及其重要性
如果我们将模块翻转过来,并将注意力集中在连接器上,就会立刻注意到两个明显的标签:SDA 和 SCL。这些标签告诉我们,这款液晶显示屏采用的是 I2C 通信方式。
在 I2C 接口配置中,SDA 引脚负责传输数据,而且有趣的是,它能够双向传输数据。
SCL 引脚传输时钟信号,该信号由主设备生成。在我们的例子中,Arduino 起到主设备的作用,控制着通信过程。
I2C 的最大优势之一在于它能让多个设备共用同一对导线。只要每个设备都有其独特的地址,您就可以将多个传感器、显示器和模块连接到相同的 SDA 和 SCL 线路上。
这的确实非常强大,尤其对于初学者项目而言更是如此,因为它能确保布线保持整洁、简单,并且便于排查故障。
如果你之前使用过 Arduino,那么你可能见过另一种不使用 I2C 协议的液晶显示屏。这类显示屏通常有较多的引脚,连接它们需要更多的线路连接和配置工作。因此,很多人最终会购买一个 I2C 适配器,并将其焊接到标准液晶显示屏的背面。
该适配器通常会包含一个名为 PCF8574 的芯片。这个芯片充当 I2C 输入/输出扩展器的功能。简单来说,它就是为显示屏添加 I2C 通信功能的部件。值得一提的是,这个芯片不仅适用于液晶显示屏,还可以用于控制 LED、传感器以及其他模块。
现在理论部分就讲到这里吧。咱们还是动手去做点实际的东西吧。
在我们开始项目之前,我想感谢 DFRobot 公司为我们提供了这次课程的赞助。
DFRobot 是全球领先的为创客、教育工作者和工程师提供硬件产品的企业之一。
在他们的在线商店里,您可以找到开展下一个项目所需的各种物品,从电机、传感器、微控制器到单板计算机、人工智能设备等等应有尽有。
如果你打算打造一些酷炫的东西,我强烈建议你去看看他们的产品。他们的产品质量上乘,价格也非常合理。
在本系列教程中,我使用的是“MindPlus Arduino 编程套件”,因为它包含了你开展 Arduino 项目所需的一切工具。
再次感谢 DFRobot 对此系列的支持,感谢你们让 STEM 教育能够惠及更多人。
启动项目
那我们继续吧,开始组装我们的第一个液晶显示器项目。
首先将 I/O 扩展板安装到你的 Arduino UNO 上。这个扩展板使得连接模块变得更加容易,并且还能使所有部件保持整齐有序。
接下来,使用四针电缆将液晶模块连接到屏蔽板上。SCL 引脚连接到 A5,SDA 引脚连接到 A4。该显示屏的工作电压范围为 3.3 至 5 伏,因此可以安全地与大多数 Arduino 板配合使用。
一旦硬件准备就绪,就前往本系列的 GitHub 仓库。在描述中会找到相关链接。打开第 14 课的文件夹,复制名为“test-lcd”的文件,并将其粘贴到你的 Arduino IDE 中。
在上传代码之前,请确保已安装了 DFRobot_RGBLCD1602 库。完成此操作后,点击“上传”。
如果所有连接都正确无误,您应该会在屏幕上看到“第 14 课 - 液晶模块”这一信息。这就是我们取得的第一个成功。
理解代码
现在让我们放慢速度,仔细看看这段代码实际在做什么。
首先,我们要引入正确的库,并创建一个能够控制液晶显示屏的对象。你可以将这个对象视为我们与屏幕进行直接通信的途径。
在 setup() 函数内部,我们初始化显示屏、清除之前的所有数据,并打印出我们的信息。需要记住的一个重要细节是,每行只能显示 16 个字符。如果您的信息长度超过这个限制,您就需要将其分两行显示,下面就是这样的实现方式。
如果这部分内容您仍觉得难以理解,别担心。我有一整套关于 Arduino 编程基础的课程,如果您想更深入地理解的话,那读一读也是很有帮助的。
但接下来便出现了有趣的问题:倘若你的信息内容实在太过冗长,以至于无法仅用两行文字来表达清楚,那该怎么办呢?
创建滚动文字效果
我们不必试图一次性展示所有内容,而是可以采用一种滑动或滚动的效果,使得在任何特定时刻只有一部分信息是可见的。这种技术在许多实际设备中都有应用,从打印机到工业控制面板等等。
要实际体验一下效果,请返回 GitHub 仓库,复制名为“滑动文本”的示例代码,将其上传至你的 Arduino 设备,然后观察液晶显示屏。您会看到一条长长的文本信息在屏幕上流畅地滚动。
那么,这是如何运作的呢?
这段示例的开头部分以及 setup() 函数与之前的示例几乎完全相同,因此真正的重点在于 loop() 函数。这就是逻辑所在的地方。
核心思想是将信息不看作一条直线,而视为一个圆圈。想象一下文字写在一个环上。当你读到结尾时,会立即回到开头重新开始。这种方法使我们能够实现无限滚动的效果,而无需担心信息的起始位置或结束位置。
由于液晶显示屏每次只能显示 16 个字符,所以该代码会构建一个名为“visibleText”的临时字符串。这个字符串准确地表示了在特定时刻屏幕上应显示的内容。
一个 for 循环会运行 16 次,每次对应显示窗口中的一列内容。在每次迭代中,它都会从消息中选取下一个字符。
模运算用于在字符串末尾到达时进行循环处理,这就是为什么模运算符在这里如此重要。它确保代码不会超出边界,并使文本能够流畅地滚动。
构建完 16 位字符串后,该代码会将其输出到液晶显示屏上,然后将位置向前移动一个字符,并等待一段短暂的延迟。调整这个延迟时间会改变滚动的速度。
其结果是呈现出一条清晰、流畅且连贯的滚动信息。
本文编译自hackster.io





