You are on page 1of 10

Giao tiếp LCD và Arduino thông qua

module I2C ( PCF8574 )

Mục lục:
1. Giới thiệu module LCD_I2C..................................2
2. Chuẩn bị.................................................................3
3. Sơ đồ kết nối...........................................................6
4. Cài đặt thư viện......................................................7
5. Chương trình..........................................................8
6. Giải thích chương trình..........................................9
7. Chạy chương trình................................................10

1
1.Giới thiệu module LCD_I2C

Module I2C là module giá rẻ được sử dụng để giao tiếp với LCD 1602, 2004,...
thông qua giao tiếp I2C, module được tích hợp sẵn biến trở để điều chỉnh độ tương
phản.

Ưu điểm:

 Tiết kiệm chân điều khiển do giao tiếp I2C chỉ cần 2 dây là SDA và SCL.
 Module được tích hợp sẵn biến trở chỉnh độ tương phản.

Khuyết điểm:

 Tốc độ truyền dữ liệu sẽ chậm hơn so với cách giao tiếp truyền thống, tuy
nhiên nếu chỉ truyền dữ liệu thông thường thì chênh lệch này không đáng kể.

2
2. Chuẩn bị
 Laptop có cài phần mềm Arduino (nhấn vào đây để tải phần mềm Arduino)
 1 Testboard.

 1 Arduino UNO (hoặc board arduino tương đương). Nếu các bạn sài
Arduino bản chip dán thì cài thêm driver (driver)

3
 1 Dây cáp để nạp cho Arduino.

 1 LCD 1602 hoặc 2004.

 1 Module I2C LCD (giới thiệu ở đầu bài viết).

4
 4 Dây cắm testboard (đực - cái), nếu sử dụng các board khác UNO thì
chuẩn bị dây tương ứng.

Các bạn hàn sẵn module với LCD như hình:

5
3. Sơ đồ kết nối

Tiến hành kết nối như hình trên

Arduino Module
5V VCC
GND GND
A4 SDA
A5 SCL

6
4.Cài đặt thư viện.
 Từ giao diện của chương trình Arduino, nhấn tổ hợp phím “Ctrl + Shift + I”
 Tìm kiếm từ khóa “LiquidCrystal”

 Cài đặt thư viện như trong ảnh

Lưu ý cài đúng thư viện để tránh lỗi xảy ra.

7
5. Chương trình.
#include <Wire.h>                   
#include <LiquidCrystal_I2C.h>      

LiquidCrystal_I2C lcd(0x27, 16, 2);

int k, i = 0;

uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};  


uint8_t note[8]  = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check[8] = {0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0};
uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
uint8_t retarrow[8] = {0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};

void setup()
{
 lcd.init();                       
 lcd.backlight();                  

 lcd.createChar(0, bell);          


 lcd.createChar(1, note);
 lcd.createChar(2, clock);
 lcd.createChar(3, heart);
 lcd.createChar(4, duck);
 lcd.createChar(5, check);
 lcd.createChar(6, cross);
 lcd.createChar(7, retarrow);

 lcd.setCursor(0, 0);              


 lcd.print("Hello, world!");       

 lcd.setCursor(7, 1);              


 for (k = 0; k < 8; k++)
 {
   lcd.write(k);               
 }
}

void loop()
{
 lcd.setCursor(0, 1);              
 lcd.print(i);                     
 delay(500);
 i++;
}

8
6. Giải thích chương trình.
#include <Wire.h>                   // Khai báo thư viện I2C
#include <LiquidCrystal_I2C.h>      // Khai báo thư viện LCD_I2C

LiquidCrystal_I2C lcd(0x27, 16, 2); // Cài đặt địa chỉ của module, số hàng
,cột của LCD

int k, i = 0;

uint8_t bell[8]  = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};  // Mã của các kí tự
đặc biệt
uint8_t note[8]  = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
uint8_t duck[8]  = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
uint8_t check[8] = {0x0, 0x1, 0x3, 0x16, 0x1c, 0x8, 0x0};
uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
uint8_t retarrow[8] = {0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};

void setup()
{
 lcd.init();                       // Khởi tạo LCD
 lcd.backlight();                  // Bật đèn nền

 lcd.createChar(0, bell);          // Tạo kí tự đặc biệt (tối đa 8 kí tự)


 lcd.createChar(1, note);
 lcd.createChar(2, clock);
 lcd.createChar(3, heart);
 lcd.createChar(4, duck);
 lcd.createChar(5, check);
 lcd.createChar(6, cross);
 lcd.createChar(7, retarrow);

 lcd.setCursor(0, 0);              // Đặt vị trí con trỏ (cột 1, dòng 1)


 lcd.print("Hello, world!");       // In kí tự ra LCD

 lcd.setCursor(7, 1);              // Đặt vị trí con trỏ (cột 8, dòng 2)


 for (k = 0; k < 8; k++)
 {
   lcd.write(k);               // In hết 8 kí tự đặt biệt ra LCD
 }
}

void loop()
{
 lcd.setCursor(0, 1);              // Đặt vị trí con trỏ (cột 1, dòng 2)
 lcd.print(i);                     // In biến i ra LCD
 delay(500);
 i++;
}

9
7. Chạy chương trình.

Chúc các bạn thành công !

10

You might also like