Arduino Màn hình LCD

Trong bài hướng dẫn LCD Arduino này, chúng ta sẽ học cách kết nối một LCD (màn hình tinh thể lỏng) với bảng Arduino. LCD rất phổ biến và được sử dụng rộng rãi trong các dự án điện tử để hiển thị thông tin. Có nhiều loại LCD. Bài hướng dẫn này lấy LCD 16x2 (16 cột và 2 hàng) làm ví dụ. Các loại LCD khác tương tự.

※ Lưu ý:

Nếu bạn muốn đơn giản hóa việc đấu dây, bạn có thể sử dụng LCD I2C thay thế. Xem Arduino - Màn hình LCD I2C.

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×LCD
1×Chiết áp
1×Alternatively, 10k Ohm Trimmer Potentiometer
1×Mô-đun chiết áp có núm xoay
1×(Hoặc) Potentiometer Kit
1×(Hoặc) Potentiometer Module with Knob
1×breadboard
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về màn hình LCD 16x2

Bố trí các chân

sơ đồ chân lcd

LCD có tối đa 16 chân. Trong các ứng dụng phổ biến nhất, chúng ta không sử dụng hết tất cả các chân.

Với sự hỗ trợ của thư viện LiquidCrystal, chúng ta thậm chí có thể sử dụng LCD mà không cần biết ý nghĩa của các chân này. Tuy nhiên, nếu bạn tò mò hoặc muốn tìm hiểu sâu, hãy xem các chân này và chức năng của chúng:

  • Chân GND: cần được kết nối với GND (0V).
  • Chân VCC: nguồn cấp cho LCD, cần được kết nối với VCC (5V).
  • Chân Vo (Độ tương phản LCD): điều khiển độ tương phản và độ sáng của LCD, có thể được kết nối với 5V (độ tương phản và độ sáng cao nhất), hoặc kết nối với một biến trở (để điều chỉnh độ tương phản và độ sáng).
  • Chân RS (Register Select): Có hai loại dữ liệu cần gửi cho LCD: lệnh (để điều khiển LCD) và dữ liệu. Hai loại này được gửi trên cùng một bus dữ liệu. Chân RS cho LCD biết dữ liệu trên bus là lệnh hay dữ liệu.
    • Nếu muốn gửi lệnh để điều khiển LCD, ta cần đặt chân RS ở mức LOW (ví dụ: đặt con trỏ đến một vị trí cụ thể, xóa màn hình ...).
    • Nếu muốn gửi dữ liệu để hiển thị trên LCD, ta cần đặt chân RS ở mức HIGH.
  • Chân R/W (Đọc/Viết): để chọn chế độ ĐỌC hoặc VIẾT.
    • Nếu muốn đọc dữ liệu từ LCD, chân này cần được đặt ở HIGH.
    • Nếu muốn gửi dữ liệu tới LCD, chân này cần được đặt ở LOW. Vì chúng ta chỉ dùng LCD này như một thiết bị OUTPUT, nên sẽ kéo chân này xuống LOW.
  • Chân EN (Kích hoạt): được dùng để bật LCD. HIGH để bật LCD, LOW để tắt LCD.
  • Các chân D0-D7 (Dữ liệu trên bus): mang dữ liệu và lệnh giữa Arduino và LCD. Có hai chế độ gửi dữ liệu: chế độ 4 bit và chế độ 8 bit.
  • Các chân A-K (Anode và Cathode): được dùng để cấp nguồn cho đèn nền LCD. Chân A cần kết nối với VCC. Chân K cần kết nối với GND.

Chế độ 4-bit và 8-bit

  • Chế độ 8-bit: 8 bit của một byte được gửi đồng thời trên các chân D0 đến D7.
  • Chế độ 4-bit: 8 bit của một byte được gửi hai lần, mỗi lần 4 bit trên các chân D4 đến D7.

Chế độ 8-bit nhanh hơn chế độ 4-bit, nhưng sử dụng nhiều chân hơn chế độ 4-bit. Việc chọn chế độ được thực hiện trong quá trình khởi tạo bằng cách gửi một lệnh tới LCD.

Hướng dẫn này sử dụng chế độ 4 bit, đây là chế độ được sử dụng phổ biến nhất.

Trong chế độ này, các chân của LCD:

  • 6 chân (RS, EN, D4, D5, D6 và D7) được kết nối với các chân của Arduino.
  • 4 chân (D0, D1, D2 và D3) không được kết nối.
  • 6 chân còn lại được kết nối với GND hoặc VCC hoặc với biến trở.

Bảng chân LCD ở chế độ 4 bit

LCD PINCONNECTED TO
01GNDGND
02VCC5V
03Vo5V or potentiometer's pin
04RSAn Arduino's pin
05R/WGND
06ENAn Arduino's pin
07D0NOT connected
08D1NOT connected
09D2NOT connected
10D3NOT connected
11D4An Arduino's pin
12D5An Arduino's pin
13D6An Arduino's pin
14D7An Arduino's pin
15A5V
16KGND

Tọa độ LCD

LCD 16x2 gồm 16 cột và 2 hàng. Các cột và hàng được đánh số từ 0.

tọa độ lcd Arduino

Cách hoạt động

Phần này chứa thông tin nâng cao có thể gây quá tải. Nếu bạn chưa chắc về nội dung, hãy bỏ qua và chuyển sang phần tiếp theo.

Quá trình gửi dữ liệu (để hiển thị) đến LCD:

  1. Arduino đặt chân RS ở mức HIGH (để chọn bộ thanh ghi dữ liệu).
  2. Arduino ghi dữ liệu lên các chân D4 đến D7 (bus dữ liệu).
  3. LCD nhận dữ liệu từ bus dữ liệu.
  4. LCD lưu dữ liệu nhận được vào điện trở dữ liệu vì chân RS ở mức HIGH. Sau đó, LCD hiển thị dữ liệu trên màn hình.

Quá trình gửi lệnh (để điều khiển) tới LCD (ví dụ: nhấp nháy màn hình LCD, đặt con trỏ ở một vị trí cụ thể, xóa màn hình ...):

  1. Arduino đặt chân RS ở mức LOW (để chọn thanh ghi lệnh)
  2. Arduino ghi lệnh lên các chân D4 → D7 (bus dữ liệu)
  3. LCD nhận dữ liệu trên bus dữ liệu
  4. LCD lưu dữ liệu nhận được vào thanh ghi lệnh vì chân RS ở mức LOW. Sau đó, LCD thực hiện hành động dựa trên giá trị của lệnh.

Arduino - màn hình LCD

Việc điều khiển LCD là một nhiệm vụ khá phức tạp. May mắn thay, nhờ thư viện LiquidCrystal, thư viện này giúp đơn giản hóa quá trình điều khiển LCD cho bạn để bạn không cần phải biết các lệnh ở mức thấp. Bạn chỉ cần kết nối Arduino với LCD và sử dụng các hàm của thư viện. Việc sử dụng LCD rất dễ dàng.

Sơ đồ đấu dây

sơ đồ nối dây lcd cho Arduino

This image is created using Fritzing. Click to enlarge image

Cách Lập Trình Cho Màn Hình LCD

  • Bao gồm thư viện:
#include <LiquidCrystal.h>
  • Xác định chân Arduino được kết nối với sáu chân LCD: RS, EN, D4, D4, D6, D7
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;

Một trong những ưu điểm của thư viện là chân trên Arduino kết nối với LCD có thể được cấu hình. Điều này làm cho việc kết nối Arduino với LCD và các cảm biến cũng như các bộ truyền động khác trở nên linh hoạt.

  • Khai báo một đối tượng LiquidCrystal:
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
  • Thiết lập số cột và số hàng của màn hình LCD.
lcd.begin(16, 2);
  • Di chuyển con trỏ đến vị trí mong muốn (column_index, row_index)
lcd.setCursor(column_index, row_index);
  • Hiển thị một thông điệp lên màn hình LCD.
lcd.print("Hello World!");

Có nhiều điều nữa mà chúng ta có thể làm với LCD (xem phần Làm nhiều hơn với LCD)

※ Lưu ý:

Bạn có thể chọn bất kỳ sáu chân nào của Arduino để kết nối với LCD, miễn là bạn chỉ định chân được kết nối trong mã Arduino.

Mã Arduino

#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.setCursor(0, 0); // move cursor to (0, 0) lcd.print("Arduino"); // print message at (0, 0) lcd.setCursor(2, 1); // move cursor to (2, 1) lcd.print("GetStarted.com"); // print message at (2, 1) } void loop() { }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào Tải lên nút trên Arduino IDE để tải mã lên Arduino
  • Xem kết quả trên màn hình LCD
hiển thị văn bản trên lcd bằng Arduino
  • Thử chỉnh sửa văn bản và vị trí

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Nhân vật tùy chỉnh

lcd.print() hàm chỉ hỗ trợ ký tự ASCII. Nếu bạn muốn hiển thị một ký tự đặc biệt hoặc biểu tượng (ví dụ: trái tim, Angry Bird), bạn cần sử dụng bộ tạo ký tự dưới đây.

LCD 16x2 có thể hiển thị 32 ký tự (2 hàng và 16 cột). Mỗi ký tự được tạo thành từ 40 điểm ảnh (8 hàng và 5 cột).

màn hình lcd Arduino 16x2 pixel

Trình tạo ký tự đại diện cho một ký tự (40 pixel). Bạn chỉ cần thực hiện các bước sau:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.createChar(0, customChar); // create a new custom character lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char at (2, 0) } void loop() { }

Kết quả trên màn hình LCD:

ký tự tùy chỉnh cho lcd

Nhiều ký tự tùy chỉnh

Chúng ta có thể tạo tối đa 8 ký tự tùy chỉnh (được đánh số từ 0 đến 7). Ví dụ dưới đây tạo và hiển thị ba ký tự.

#include <LiquidCrystal.h> // LCD pins <--> Arduino pins const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.begin(16, 2); // set up number of columns and rows lcd.createChar(0, customChar0); // create a new custom character (index 0) lcd.createChar(1, customChar1); // create a new custom character (index 1) lcd.createChar(2, customChar2); // create a new custom character (index 2) lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char 0 at (2, 0) lcd.setCursor(4, 0); // move cursor to (4, 0) lcd.write((byte)1); // print the custom char 1 at (4, 0) lcd.setCursor(6, 0); // move cursor to (6, 0) lcd.write((byte)2); // print the custom char 2 at (6, 0) } void loop() { }

Kết quả trên màn hình LCD:

nhiều ký tự tùy chỉnh cho lcd

Tóm tắt: cách sử dụng ký tự tùy chỉnh trên LCD

  • Sử dụng trình tạo ký tự ở trên để tạo mã nhị phân cho ký tự tùy chỉnh.
  • Khai báo mã nhị phân cho ký tự tùy chỉnh (sao chép từ bước ở trên).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Tạo ký tự tùy chỉnh và gán cho một chỉ mục (từ 0 đến 7) trong hàm setup()
lcd.createChar(index, customChar);
  • Hiển thị ký tự tùy chỉnh trên LCD bất cứ lúc nào, ở bất cứ đâu (trong hàm setup() hoặc loop())
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position

Thách thức bản thân

Sử dụng LCD để thực hiện một trong các dự án sau: