#c

Arduino与1602 LCD显示屏

普通连接与I2C连接方式详解

#c
@魅客科创中心

CONTENTS

目录

1. 1602 LCD简介

1. 1602 LCD简介

  • 1602 LCD:一种常见的字符型液晶显示模块,能够显示2行,每行16个字符。
  • 主要特点
    • 成本低廉,易于获取。
    • 功耗低。
    • 可显示字母、数字、符号等。
  • 常见引脚:VSS, VDD, VO, RS, RW, E, D0-D7, A, K。
  • 应用场景:广泛应用于各种DIY电子项目,用于显示传感器数据、时钟、菜单等信息。

2 液晶显示原理

2.1 液晶显示原理

  • 液晶 (Liquid Crystal):一种特殊的物质状态,它既具有液体的流动性,又具有晶体的光学各向异性(即不同方向上光学性质不同)。其分子通常呈细长的棒状。
  • 核心原理:通过精确控制施加到液晶材料上的电场,改变液晶分子的排列状态,从而影响通过液晶的光线的偏振方向。再配合偏振片,实现对光线通过与否的控制,形成明暗对比,最终显示出图像或字符。
  • 字符型LCD (如1602):通过控制特定段电极的通断电,形成所需字符的点阵图案。

2.2 液晶显示原理:关键组件与工作流程

  1. 背光源 (Backlight):提供均匀的背景光。
  2. 第一偏振片 (Input Polarizer):将自然光转换为特定方向的偏振光。
  3. 液晶层 (Liquid Crystal Layer)
    • 液晶分子填充在两块带有透明电极的玻璃基板之间。
    • 玻璃基板内侧有取向膜,使得在不通电时,液晶分子从上到下呈90度扭曲排列(螺旋结构)。
    • 当偏振光通过这层扭曲的液晶时,其偏振方向也会随之旋转90度。
  4. 第二偏振片 (Output Polarizer):其偏振方向通常与第一偏振片垂直
  5. 像素显示逻辑
    • 不通电 (像素亮):光线通过第一偏振片 -> 经过扭曲液晶层,偏振方向旋转90度 -> 此时光线振动方向与第二偏振片方向一致 -> 光线通过第二偏振片,该像素点亮。
    • 通电 (像素暗):施加电场后,液晶分子克服扭曲力,顺着电场方向排列(垂直于玻璃基板),失去扭转光线偏振方向的能力 -> 光线通过第一偏振片后,直接到达第二偏振片 -> 由于其振动方向与第二偏振片垂直,光线被阻挡,该像素点暗。

3. 普通并行连接

3.1 普通并行连接

  • 连接方式:直接使用多个Arduino的数字IO口控制LCD的数据和控制引脚。
  • 所需引脚:通常至少需要6个Arduino的数字IO口 (RS, E, D4, D5, D6, D7),如果使用读功能(RW),则需要更多。
  • 接线图示例
    • LCD RS -> Arduino Pin 12
    • LCD E -> Arduino Pin 11
    • LCD D4 -> Arduino Pin 5
    • LCD D5 -> Arduino Pin 4
    • LCD D6 -> Arduino Pin 3
    • LCD D7 -> Arduino Pin 2
    • LCD RW -> GND (通常只写不读)
    • LCD VSS -> GND
    • LCD VDD -> 5V
    • LCD VO -> 连接到电位器中间引脚 (用于调节对比度)
    • LCD A (Anode) -> 5V (通过一个限流电阻,如220Ω)
    • LCD K (Kathode) -> GND

#---

3.2 普通并行连接 - 代码示例

#include <LiquidCrystal.h>

// 初始化LiquidCrystal库的引脚 (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // 设置LCD的列数和行数
  lcd.begin(16, 2);
  // 打印信息到LCD
  lcd.print("Hello, Arduino!");
}

void loop() {
  // 将光标设置到第二行第一列
  lcd.setCursor(0, 1);
  // 打印计数器
  lcd.print(millis() / 1000);
}

#---

3.3 普通并行连接 - 优缺点

  • 优点
    • 无需额外模块,成本相对较低(如果不算I2C模块的成本)。
    • 响应速度较快。
  • 缺点
    • 占用Arduino较多的IO口,对于IO资源紧张的项目可能不适用。
    • 接线相对复杂。

4. I2C连接方式

4.1 I2C连接方式

  • 连接方式:通过一个I2C接口转换模块(通常基于PCF8574芯片)将1602 LCD连接到Arduino的I2C总线。
  • 所需引脚:只需要Arduino的2个专用I2C引脚 (SDA, SCL)。
    • Uno, Nano: A4 (SDA), A5 (SCL)
    • Mega: 20 (SDA), 21 (SCL)
  • I2C转接板:将并行接口的LCD转换为I2C接口,简化接线。
  • 接线图示例
    • I2C模块 VCC -> Arduino 5V
    • I2C模块 GND -> Arduino GND
    • I2C模块 SDA -> Arduino SDA (A4 on Uno/Nano)
    • I2C模块 SCL -> Arduino SCL (A5 on Uno/Nano)

注意: 你可能需要先安装 LiquidCrystal_I2C 库。在Arduino IDE中,通过 工具 > 管理库 搜索并安装。

4.2 I2C连接方式 - 查找I2C地址

每个I2C设备都有一个唯一的地址。在使用I2C LCD前,需要知道其地址。常见的1602 LCD I2C模块地址有 0x270x3F

可以使用代码扫描I2C总线上的设备地址:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}

void loop() {
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for(address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) Serial.println("No I2C devices found\n");
  else Serial.println("done\n");
  delay(5000);
}

4.3 I2C连接方式 - 代码示例

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// 设置LCD的I2C地址 (例如0x27) 和尺寸 (16列2行)
// 对于常见的PCF8574模块,通常是:
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 如果是0x3F地址,则为: LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {
  // 初始化LCD
  lcd.init();
  // 点亮背光
  lcd.backlight();
  lcd.print("I2C LCD Test!");
}
void loop() {
  lcd.setCursor(0, 1);
  lcd.print("Time: ");
  lcd.print(millis() / 1000);
  delay(1000);
  lcd.clear(); // 清除第二行,避免数字重叠
  lcd.print("I2C LCD Test!"); // 重新打印第一行,因为clear会清除整个屏幕
}

4.4 I2C连接方式 - 优缺点

  • 优点
    • 极大节省Arduino的IO口,只需2个I2C引脚。
    • 接线简单明了。
    • 方便在同一I2C总线上连接多个设备。
  • 缺点
    • 需要额外的I2C转接模块,增加少量成本。
    • 响应速度可能略慢于并行连接(但在多数应用中影响不大)。
    • 需要正确配置I2C地址和使用对应的库。

5. 总结与展望

5. 总结与展望

  • 普通并行连接
    • 优点:直接,速度快。
    • 缺点:占用IO口多,接线复杂。
    • 适用:IO资源充足,对速度有一定要求的简单项目。
  • I2C连接方式
    • 优点:节省IO口,接线简单,方便扩展。
    • 缺点:需要I2C模块,速度略慢。
    • 适用:IO资源紧张,或需要连接多个I2C设备的项目。
  • 如何选择?
    • 如果你的Arduino IO口非常宝贵,或者你计划连接多个I2C设备,那么I2C方式是首选
    • 如果你只是做一个简单的显示,且IO口充足,普通并行连接也可以。
  • 展望
    • 1602 LCD是学习嵌入式系统和单片机开发的良好起点。
    • 掌握其使用方法后,可以尝试更高级的显示屏,如OLED、TFT等。
    • 结合传感器,制作更多有趣、实用的Arduino项目!

演讲者备注: - 欢迎学生,介绍1602 LCD及其在Arduino项目中的应用。 - 强调本讲义将介绍两种常见的1602 LCD连接和使用方法。

目录页: - 1602 LCD简介 - 液晶显示原理 - 普通并行连接方式 - I2C连接方式 - 示例代码与实践 - 总结

转场页: - 引入1602 LCD的基本概念和特点。

1602 LCD简介: - 什么是1602 LCD?(16列2行字符型液晶显示屏) - 主要特点:低成本、易于使用、显示字母数字等。 - 常见应用:项目数据显示、状态指示等。

转场页: - 简要介绍即将解释液晶显示的基本工作方式。

液晶显示原理: - 什么是液晶?(介于液体和固体之间的物质状态) - 液晶分子的特性:棒状,电场下有序排列。 - 偏振光:自然光通过偏振片后,振动方向单一的光。 - 显示过程: 1. 背光源发出光线。 2. 第一层偏振片使光线偏振。 3. 液晶层:通电时,液晶分子排列改变,不扭转或按特定方式扭转偏振光的振动方向;不通电时,按预设方式扭转。 4. 第二层偏振片:与第一层偏振方向垂直(或平行,取决于设计)。 5. 结果:若液晶扭转/不扭转光线使其能通过第二偏振片,则该点亮;反之则暗。通过控制各像素点液晶的通断电,形成字符或图像。 - 1602 LCD属于被动矩阵(通常是TN-LCD或STN-LCD)类型。

转场页: - 介绍1602 LCD的普通并行连接方式。

普通并行连接: - 引脚说明及功能 - 与Arduino的接线图(至少需要6个IO口) - Arduino代码示例 (使用LiquidCrystal库) - 优缺点分析

转场页: - 介绍1602 LCD的I2C连接方式。

I2C连接方式: - I2C通信协议简介 - I2C转接板 (PCF8574等) - 与Arduino的接线图 (只需要2个IO口:SDA, SCL) - Arduino代码示例 (使用LiquidCrystal_I2C库) - 如何查找I2C地址 - 优缺点分析

查找I2C地址: - 解释为什么需要查找地址。 - 提供一个简单的I2C地址扫描代码。

转场页: - 总结两种连接方式的特点和选择依据。

总结: - 对比普通连接和I2C连接的优缺点。 - 如何根据项目需求选择合适的连接方式。 - 鼓励学生动手实践。

讲义结束,感谢大家! 鼓励提问和动手实践。