利用Arduino驱动LCD显示屏
目的
本教程描述了如何使用Arduino驱动LCD显示屏。
概述
Arduino开发板属于非常流行的单片机开发板,该板的一个常用功能就是用驱动LCD屏,通常用来将信息传递给用户。在本教程中,我将教您如何使用Arduino单片机开发板和Adafruit I2C/SPI LCD驱动模块来驱动LCD。
设备
- Arduino Uno R3 – https://www.adafruit.com/product/50
- I2C/SPI LCD 驱动模块 – https://www.adafruit.com/product/292
- RGB LCD 20×4 – https://www.adafruit.com/product/499
- 9V, 1A 电源适配器 – https://www.adafruit.com/product/63
- 跳线 – https://www.amazon.com/GenBasic-Female-Solderless-Breadboard-Prototyping/dp/B01MS9GY7W/ref=sr_1_1_sspa?s=electronics&ie=UTF8&qid=1515705634&sr=1-1-spons&keywords=jumper+wires&psc=1
- USB 电缆 (A-to-B) – https://www.amazon.com/AmazonBasics-USB-2-0-Cable-Male/dp/B00NH11KIK
- 面包板 – https://www.amazon.com/Elegoo-Breadboard-Solderless-Distribution-Connecting/dp/B01EV6LJ7G/ref=sr_1_1_sspa?s=electronics&ie=UTF8&qid=1515705714&sr=1-1-spons&keywords=breadboard&psc=1
目录
- 电路接线
- 编写代码
- 配置
- 设置
- 循环
- 上传并运行程序
程序
1. 电路接线
LCD通常需要连接很多线才能工作。随时管理所有这些连接可能既繁琐又烦人。幸运的是,Adafruit制造了一款可兼容大多数LCD的I2C/SPI LCD驱动模块。该驱动模块可方便地将您的单片机和LCD之间的连接数量减少到4个。
我总是喜欢用Fritzing绘制接线图(图1:Arduino-LCD原理图)。Fritzing是一款开源原理图设计和PCB布线软件。Fritzing的下载地址(可选)如下:https://fritzing.org/home/
LCD上的引脚1连至LCD驱动模块上的引脚1。其余引脚按顺序连接。这可以在面包板上完成,也可以将驱动模块焊接到LCD上,正如我所做的这样。
I2C和SPI是两种非常流行的串行接口总线。本教程将介绍使用I2C连接Arduino和LCD驱动模块,但是LCD驱动模块也可以连接SPI接口。您可以通过跳接驱动模块上的焊接跳线(图2:LCD驱动模块上的焊接跳线)来设置I2C地址(A0、A1、A2)或使能SPI(SPI使能)。本教程中使用I2C的唯一电路是LCD驱动模块,所以我们不需要更改当前配置。这意味着LCD驱动模块的地址为0(0x00)。
要将LCD驱动模块连接到Arduino,应将5V和Arduino上的接地引脚连至LCD驱动模块上的5V和接地引脚。这会为LCD和LCD驱动模块提供电源。注:LCD需要至少5V才能正常工作。接下来的两个连接是串行数据和串行时钟。串行时钟连接(橙色线)位于Arduino的SCL引脚和驱动模块的CLK引脚之间。串行数据连接(蓝线)位于Arduino的SDA引脚和驱动模块的DAT引脚之间。
2. 编写代码
2.1 配置
代码的第一部分是包含Adafruit_LiquidCrystal头文件。然后,您就可以使用该库中的函数。由于Arduino IDE会自动下载Adafruit_LiquidCrystal库,本教程没有包含Arduino库的下载步骤。
接下来,我们将LCD驱动模块地址设为0(请记住,我们没有跨接任何焊接跳线)。
最后,我创建了一个名为timer的全局变量,稍后在代码的循环部分中使用。
2.2 设置
LCD在写入之前需要进行初始化。这可以通过“begin”函数实现,该函数会告诉LCD驱动模块显示器上有多少个字符。由于我使用的LCD具有背光功能,因此我也打开背光。
现在LCD已经初始化完毕,我写了“Test Code”来检查一切是否正常。该代码将光标设定为起始位置,将“Test”写入显示屏,等待2秒钟,然后清除显示。
2.3 循环
代码的循环部分利用millis()函数并除以1000来计算程序的运行时间。然后代码使用print和setCursor函数在LCD上显示程序时间。随后,循环代码等待一秒钟,然后重复。
3. 上传并运行程序
将代码上传到Arduino。确保Arduino已经连接9V电源适配器,因为USB电源不足以为Arduino和LCD显示器同时供电。程序开始执行后,设置部分运行完成后,您应该在LCD显示屏上看到“Test”字样(图6:LCD显示“Test”)。循环部分开始执行后,您将会看到程序的运行时间,而且每秒更新一次(图7:LCD显示程序运行时间 – 8(s))。恭喜!您现在拥有一款适用于Arduino板的简单易用LCD显示屏,并可将其用作未来项目的显示屏。提示:I2C是一个慢速总线,如果您持续更新液晶显示器,那么会影响单片机执行其他任务的时间。
附件:Arduino_LED代码
/* Project: Arduino LCD
* Written by: Chris Marella
* Date: January 11, 2018
*/
// include the Adafruit LCD Library:
#include
// Connect the the LCD Backpack via I2C, default address #0 (A0-A2 not jumpered)
Adafruit_LiquidCrystal lcd(0);
//Global Variables
int timer; //create a global variable for a timer
void setup() {
//LCD Configuration
lcd.begin(19,3); //The begin function tells the LCD driver the size of your LCD screen (columns x rows)
lcd.setBacklight(HIGH); //setBacklight controls the LCD backlight
//Test Code
lcd.setCursor(0,0); //setCursor function sets the position of the character cursor (column x row)
lcd.print("Test"); //Prints "Test" across the LCD
delay(2000); //Wait for 2 seconds
lcd.clear(); //clear function clears the LCD screen
}
void loop() {
timer = millis()/1000; //set timer variable to how long program has been running in seconds
lcd.setCursor(0,0); //set LCD cursor to 0,0
lcd.print("Time:"); //print time on LCD row 1
lcd.setCursor(0,1); //move LCD cursor to row 2
lcd.print(timer); //print the current program run time
lcd.setCursor(0,2); //move LCD cursor to row 3
lcd.print("(s)"); //print "(s)" for seconds
delay(1000); //wait 1 second to update
}