ĐIỀU KHIỂN HIỂN THỊ LCD
Xin chào các bạn!
Trong bài học hôm nay, chúng ta sẽ tìm hiểu về cách sử dụng LCD 16×2 để hiển thị dữ liệu với Arduino.
LCD là thiết bị rất phổ biến, dùng để hiển thị thông tin như số đo, trạng thái hệ thống, đồng hồ thời gian thực,…
Ở bài này, chúng ta sẽ sử dụng LCD loại 16×2, tức là 16 ký tự mỗi dòng, 2 dòng – và điều khiển nó bằng chế độ 4-bit tiêu chuẩn.
🛠️ PHẦN 1: LINH KIỆN CẦN CHUẨN BỊ
🔧 Truy cập https://www.tinkercad.com. Trong Tinkercad, bạn cần kéo:
- Arduino UNO
- LCD 16×2
- 1 biến trở (potentiometer) 10kΩ (để điều chỉnh độ tương phản LCD)
- Dây nối
🔌 PHẦN 2: SƠ ĐỒ KẾT NỐI LCD 16×2 (CHẾ ĐỘ 4-BIT)
LCD Pin | Kết nối |
---|---|
VSS | GND |
VDD | 5V |
VO | Chân giữa biến trở |
RS | D12 |
RW | GND |
E | D11 |
D4 | D5 |
D5 | D4 |
D6 | D3 |
D7 | D2 |
A | 5V (qua điện trở nếu muốn giảm sáng) |
K | GND |
📌 Biến trở được nối 3 chân:
- 2 chân ngoài nối 5V và GND
- Chân giữa nối vào pin VO của LCD
💻 PHẦN 3: MÃ CODE MẪU
#include <LiquidCrystal.h>
// Chân RS = 12, E = 11, D4-D7 = 5-2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2); // Khởi động LCD 16x2
lcd.print("Xin chao!"); // In dòng đầu tiên
}
void loop() {
lcd.setCursor(0, 1); // Đặt con trỏ về đầu dòng thứ 2
lcd.print(millis() / 1000); // Hiển thị thời gian đã trôi qua (s)
lcd.print(" s"); // Thêm chữ "s"
delay(1000); // Cập nhật mỗi 1 giây
}
📘 GIẢI THÍCH CODE
LiquidCrystal lcd(...)
: khai báo đối tượng LCD với thứ tự chân nốilcd.begin(16, 2)
: khởi tạo LCD với 2 dòng, 16 ký tự mỗi dònglcd.print("Xin chao!")
: in chuỗi lên LCDlcd.setCursor(0, 1)
: chuyển xuống dòng 2, vị trí cột 0millis()/1000
: hiển thị số giây từ khi khởi động
▶️ PHẦN 4: CHẠY MÔ PHỎNG TRONG TINKERCAD
- Nhấn Start Simulation
- Quan sát LCD:
- Dòng 1 hiện: “Xin chao!”
- Dòng 2 sẽ hiển thị: số giây đang tăng lên, ví dụ:
5 s
,6 s
,7 s
…
🎯 PHẦN 5: TỔNG KẾT
Sau bài học này, các bạn đã biết:
- Cách kết nối LCD 16×2 với Arduino ở chế độ 4-bit
- Cách in dữ liệu văn bản và số lên LCD
- Cách cập nhật dữ liệu định kỳ (ở đây là số giây đã trôi qua)
🧠 GỢI Ý MỞ RỘNG
- In cảm biến nhiệt độ, độ ẩm lên LCD
- Kết hợp với nút nhấn để chuyển chế độ hiển thị
- Dùng LCD I2C để đơn giản hóa kết nối (chỉ cần 2 dây: SDA, SCL)
🧠 BÀI TẬP THỰC HÀNH
🧪 Bài 1: Hiển thị nhiệt độ từ cảm biến nhiệt độ LM35
🎯 Mục tiêu:
- Kết nối cảm biến nhiệt độ LM35 với Arduino
- Đọc nhiệt độ và hiển thị lên LCD 16×2 theo thời gian thực
🧠 Kỹ năng:
- Đọc tín hiệu analog
- Tính toán từ điện áp → nhiệt độ
- Cập nhật LCD mỗi giây
🧪 Bài 2: Đồng hồ đếm ngược 10 giây trên LCD
🎯 Mục tiêu:
- LCD hiển thị số từ 10 xuống 0
- Sau khi kết thúc, in ra “Het gio!”
🧠 Kỹ năng:
- Sử dụng biến đếm giảm
- Quản lý thời gian bằng
millis()
hoặcdelay()
- Giao tiếp LCD linh hoạt
🧪 Bài 3: Hiển thị nội dung động – cuộn văn bản
🎯 Mục tiêu:
- Hiển thị dòng chữ dài hơn 16 ký tự
- Văn bản tự động cuộn sang trái như băng LED
🧠 Kỹ năng:
- Dùng
lcd.scrollDisplayLeft()
- Lập trình hiệu ứng hiển thị đẹp
🧪 Bài 4: Nhấn nút để chuyển nội dung trên LCD
🎯 Mục tiêu:
- Nhấn nút để chuyển giữa 2–3 nội dung khác nhau
- Ví dụ: Nhiệt độ / Giờ hệ thống / Câu chào
🧠 Kỹ năng:
- Đọc nút nhấn với
INPUT_PULLUP
- Thay đổi trạng thái hiển thị theo điều kiện
- Dùng
lcd.clear()
vàsetCursor()
🧪 Bài 5: Nhận dữ liệu từ Serial và hiển thị lên LCD
🎯 Mục tiêu:
- Gửi văn bản từ Serial Monitor
- Arduino nhận và in nội dung đó lên LCD
🧠 Kỹ năng:
- Giao tiếp UART (Serial)
- Dùng
Serial.readStringUntil('\n')
- Hiển thị dữ liệu chuỗi lên LCD