Arduino教程:液晶显示器的使用详解
Arduino教程:液晶显示器的使用详解
液晶显示器(LCD)是Arduino项目中常用的人机交互设备,能够直观地显示字符、数字等信息。本文将详细介绍16x2液晶显示器的工作原理、与Arduino的连接方式(并行和串行)、代码实现以及常见操作,帮助读者掌握这一重要组件的使用方法。
16x2 液晶显示器的工作原理
结构与组成
16x2液晶显示器主要由液晶显示模块、控制器和驱动电路等构成。液晶显示模块包含液晶材料和玻璃基板,其核心原理是通过精准控制液晶分子的排列,改变光线的透过率,进而显示出字符和数字。控制器的作用是接收来自外部设备(如Arduino)的指令和数据,并将其转化为液晶显示模块能够识别的信号。驱动电路则为液晶显示模块提供必要的电压和电流,确保其正常工作。
通信接口
常见的16x2液晶显示器具备并行接口和串行接口两种类型。并行接口借助多个引脚同时传输数据,具有速度快的优势,但需要占用较多的引脚资源;串行接口则通过较少的引脚以串行方式传输数据,虽然速度相对较慢,却能节省引脚。本章将着重介绍并行接口和串行接口的液晶显示器与Arduino的连接和使用方法。
并行方式硬件连接
材料准备
- Arduino开发板(如Arduino Uno)
- 16x2液晶显示器
- 电位器(用于调节对比度)
- 杜邦线若干
连接步骤
- 电源连接:把液晶显示器的VSS引脚连接到Arduino的GND引脚,VDD引脚连接到Arduino的5V引脚,为显示器提供稳定的电源。
- 对比度调节:将液晶显示器的VO引脚连接到电位器的中间引脚,电位器的另外两个引脚分别连接到5V和GND。通过旋转电位器,可以灵活调节液晶显示器的对比度,使显示内容更加清晰易读。
- 寄存器选择(RS):将液晶显示器的RS引脚连接到Arduino的数字引脚12。RS引脚的作用是选择传输的数据是指令还是字符数据,高电平表示字符数据,低电平表示指令。
- 读写控制(RW):将液晶显示器的RW引脚连接到Arduino的GND引脚。由于在大多数情况下我们只进行写操作,将RW接地可以简化电路设计。
- 使能信号(E):将液晶显示器的E引脚连接到Arduino的数字引脚11。E引脚作为使能信号,在数据传输时,通过高低电平的变化来触发数据的读取或写入。
- 数据引脚(D4 - D7):将液晶显示器的D4 - D7引脚分别连接到Arduino的数字引脚5 - 8。在4位数据传输模式下,仅使用D4 - D7这4个数据引脚,能够有效减少引脚的使用。
- 背光控制:将液晶显示器的A(阳极)引脚通过一个220Ω的电阻连接到5V,K(阴极)引脚连接到GND,为显示器的背光提供电源。
连接图
+5V
|
|
[VDD] (LCD)
[VO] ---- [Potentiometer Middle Pin]
[VSS] ---- GND (Arduino)
[RS] ---- Digital Pin 12 (Arduino)
[RW] ---- GND (Arduino)
[E] ---- Digital Pin 11 (Arduino)
[D4] ---- Digital Pin 5 (Arduino)
[D5] ---- Digital Pin 6 (Arduino)
[D6] ---- Digital Pin 7 (Arduino)
[D7] ---- Digital Pin 8 (Arduino)
[A] ---- [220Ω Resistor] ---- +5V
[K] ---- GND (Arduino)
并行方式代码实现
使用LiquidCrystal库
Arduino提供了LiquidCrystal库,极大地方便了我们对液晶显示器的控制。以下是一个简单的示例代码:
#include <LiquidCrystal.h>
int seconds = 0;
// 创建LiquidCrystal对象,指定RS、E、D4、D5、D6、D7引脚
LiquidCrystal lcd(12, 11, 5, 6, 7, 8);
void setup() {
// 初始化液晶显示器,设置列数为16,行数为2
lcd.begin(16, 2);
// 将光标移动到第一行第一列
lcd.setCursor(0, 0);
// 在当前光标位置打印字符串
lcd.print("Hello, World!");
}
void loop() {
// 将光标移动到第二行第一列
lcd.setCursor(0, 1);
// 打印Arduino程序的运行时间(秒)
lcd.print(millis() / 1000);
// 延迟1秒,使显示的时间每秒更新一次
delay(1000);
}
代码解释
- 库的引入:
#include <LiquidCrystal.h>
,引入LiquidCrystal库,该库提供了一系列控制液晶显示器的函数和方法。 - 液晶显示器对象的初始化:
LiquidCrystal lcd(12, 11, 5, 6, 7, 8);
,创建一个LiquidCrystal对象lcd,并明确指定RS、E、D4、D5、D6、D7引脚的连接。 setup()
函数:lcd.begin(16, 2);
:对液晶显示器进行初始化操作,设置其列数为16,行数为2。lcd.setCursor(0, 0);
:将光标精准地移动到第一行第一列。lcd.print("Hello, World!");
:在当前光标位置打印字符串“Hello, World!”。loop()
函数:lcd.setCursor(0, 1);
:将光标移动到第二行第一列。lcd.print(millis() / 1000);
:打印Arduino程序从启动开始的运行时间(以秒为单位)。delay(1000);
:延迟1秒,确保显示的时间每秒更新一次。
串行方式硬件连接
材料准备
- Arduino开发板(如Arduino Uno)
- 16x2液晶显示器
- I2C转接板
- 杜邦线若干
连接步骤
- 电源连接:把I2C转接板的VCC引脚连接到Arduino的5V引脚,GND引脚连接到Arduino的GND引脚,为转接板和液晶显示器提供稳定的电源。
- I2C通信线连接:将I2C转接板的SDA引脚连接到Arduino的SDA引脚,SCL引脚连接到Arduino的SCL引脚,实现串行通信。
连接图
串行方式代码实现
使用Adafruit_LiquidCrystal库
#include <Adafruit_LiquidCrystal.h>
int seconds = 0;
// 创建Adafruit_LiquidCrystal对象
Adafruit_LiquidCrystal lcd(0);
void setup() {
// 初始化液晶显示器,设置列数为16,行数为2
lcd.begin(16, 2);
// 在当前光标位置打印字符串
lcd.print("Hello, World!");
}
void loop() {
// 将光标移动到第二行第一列
lcd.setCursor(0, 1);
// 打印秒数
lcd.print(seconds);
// 打开背光
lcd.setBacklight(1);
// 延迟500毫秒
delay(500);
// 关闭背光
lcd.setBacklight(0);
// 延迟500毫秒
delay(500);
// 秒数加1
seconds++;
}
代码解释
- 库的引入:
#include <Adafruit_LiquidCrystal.h>
,引入Adafruit_LiquidCrystal库,该库专门用于控制支持I2C接口的液晶显示器。 - 液晶显示器对象的初始化:
Adafruit_LiquidCrystal lcd(0);
,创建一个Adafruit_LiquidCrystal对象lcd,参数0表示设备地址。 setup()
函数:lcd.begin(16, 2);
:初始化液晶显示器,设置其列数为16,行数为2。lcd.print("Hello, World!");
:在当前光标位置打印字符串“Hello, World!”。loop()
函数:lcd.setCursor(0, 1);
:将光标移动到第二行第一列。lcd.print(seconds);
:打印变量seconds的值。lcd.setBacklight(1);
:打开液晶显示器的背光。delay(500);
:延迟500毫秒。lcd.setBacklight(0);
:关闭液晶显示器的背光。delay(500);
:再延迟500毫秒。seconds++;
:变量seconds的值加1。
常见操作
清屏
lcd.clear();
该函数的作用是清除液晶显示器上的所有内容,并将光标移动到第一行第一列。
光标控制
lcd.setCursor(col, row);
col表示列数(从0开始计数),row表示行数(从0开始计数)。该函数用于将光标移动到指定的位置。
显示字符和数字
lcd.print("Text"); // 显示字符串
lcd.print(123); // 显示数字
print()
函数非常强大,可以用于显示字符串、数字等各种数据类型。
总结
通过本章的学习,我们全面了解了16x2液晶显示器的工作原理,熟练掌握了其与Arduino的并行和串行硬件连接方式,并学会了使用LiquidCrystal库和Adafruit_LiquidCrystal库来控制液晶显示器显示字符和数字。同时,我们也探讨了双LCD的连接和代码实现。液晶显示器能够为Arduino项目提供直观的信息显示功能,在数据监测、智能设备等领域有着广泛的应用。在后续的项目中,你可以根据实际需求进一步扩展功能,如显示传感器数据、实现菜单界面等,让你的Arduino项目更加丰富和实用。