Trong bài viết này, tôi sẽ hướng dẫn cho các bạn cách giao tiếp một màn hình LCD 16×2 với Arduino Uno. Không giống như các bo mạch phát triển thông thường, giao tiếp một màn hình LCD với Arduino khá dễ dàng. Ở đây chúng ta không phải lo lắng về việc gửi và nhận dữ liệu. Chúng ta chỉ cần định rõ các chân và nó sẽ sẵn sàng để hiển thị dữ liệu trên màn hình LCD.
Chuẩn bị
Phần cứng
Tên linh kiện | Số lượng |
Arduino Uno | 1 |
LCD 16×2 | 1 |
Biến trở 10k | 1 |
Breadboard | 1 |
Dây cắm Breadboard |
Phần mềm: Arduino IDE
Giới thiệu về LCD 16×2
LCD (Liquid Crystal Display – Màn hình tinh thể lỏng) được sử dụng trong nhiều thiết bị như lò vi sóng, máy tính v.v.. Chúng đóng một vai trò rất quan trọng trong các hệ thống nhúng. Màn hình LCD có rất nhiều ưu điểm so với các dạng hiển thị khác: Nó có khả năng hiển thị ký tự đa dạng, trực quan (chữ, số và ký tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn ít tài nguyên hệ thống và giá thành rẽ,…
Chức năng các chân
Chân | Ký hiệu | Mô tả |
1 | VSS | Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển |
2 | VDD | Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với nguồn điện áp 5V của mạch điều khiển |
3 | V0 | Điều chỉnh độ tương phản của LCD. |
4 | RS |
Chân chọn thanh ghi (Register Select). Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi. |
5 | R/W | Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc. |
6 | E |
Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E. |
7-14 | D0 – D7 |
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MCU. Có 2 chế độ sử dụng 8 đường bus này : |
15 | A | Nguồn dương cho đèn nền |
16 | K | GND cho đèn nền |
Sơ đồ kết nối LCD 16×2 với Arduino
Các kết nối được thực hiện cho màn hình LCD 16×2 được đưa ra dưới đây:
- Bốn chân dữ liệu D4 đến D7 được kết nối với bốn chân (0 đến 3) của Arduino.
- Chân chọn thanh ghi RS (Register Select) và chân cho E (Enable) chân được kết nối với chân 4 và chân 5 của Arduino.
- Chân VSS của màn hình LCD được nối đất trong khi chân VDD được kết nối với nguồn điện áp 5V.
- V0 của LCD được kết nối với biến trở 10KΩ để thay đổi độ sáng của màn hình LCD. Nếu không cần chỉnh độ tương phản của LCD thì chân này được nối đất.
- Chân RW được kết nối với mặt đất.
Arduino cho phép người dùng sử dụng LCD ở chế độ 4 bit. Loại giao tiếp này cho phép người dùng giảm số chân sử dụng trên Arduino, không giống như các vi điều khiển khác, ARDUINO không cần lập trình riêng để sử dụng nó ở chế độ 4 bit vì theo mặc định Arduino được thiết lập để giao tiếp ở chế độ 4 bit. Trong sơ đồ mạch bên trên bạn có thể thấy tôi đã sử dụng giao tiếp 4 bit (D4-D7).
Tóm lại, với sơ đồ mạch được kết nối như ở trên tôi đang kết nối 6 chân của LCD để điều khiển trong đó 4 chân là chân dữ liệu và 2 chân để điều khiển.
Chương trình
#include<LiquidCrystal.h>
LiquidCrystal lcd (5, 4, 3, 2, 1, 0); // khởi tạo các chân giao tiếp
void setup ()
{
lcd.begin(16, 2); // khởi tạo màn hình LCD 16×2
}
void loop ()
{
lcd.setCursor (0, 0); //đặt con trỏ tại hàng 0 cột 0
lcd.print (“dientuadenz.com”); // In ra màn hình lcd dòng chữ dientuadenz.com
lcd.setCursor (0,1); //đặt con trỏ tại cột 0 dòng 1
lcd.print (“Chao cac ban”); // In ra màn hình LCD dòng chữ Chao cac ban
}
Giải thích
Chương trình trên cho thấy màn hình LCD hiển thị các chuỗi Electronicshub và LCD 16X2.
Arduino cung cấp một thư viện được xây dựng cho màn hình LCD. File header là Liquid Crystal.h được khai báo để lấy tất cả các hàm từ thư viện này. Điều này có thể hỗ trợ chế độ hoạt động 8 bit hoặc chế độ 4 bit.
Dòng tiếp theo “Liquid Crystal lcd(RS,E,D4,D5,D6,D7)” xác định các chân của Arduino được giao tiếp với màn hình LCD. Ví dụ trong mạch của chúng ta chân RS của LCD được kết nối với chân 5 của Arduino. 5 được viết thay cho RS.
Trong hàm setup () khởi tạo LCD được thực hiện. Việc khởi tạo LCD chỉ được thực hiện khi nó được khai báo trong hàm Setup (). Void cho biết không có giá trị trả về.
Dòng lệnh tiếp theo là “lcd.begin (16 × 2)” 16 x 2 cho biết số hàng và cột của màn hình LCD.
Void loop () cho biết việc thực thi liên tục câu lệnh. Lệnh trong vòng lặp này được lặp lại cho đến khi reset bộ điều khiển.
Lcd.setCursor (cột, hàng) đặt điểm con trỏ. Hãy nhớ rằng chỉ có 2 hàng và 16 cột trong màn hình LCD.
Lcd.print (“”) in ra chuỗi ký tự được ghi trong dấu “”.
Chương trình trên chỉ đơn giản là hiển thị chuỗi ký tự trên màn hình LCD. Để cuộn màn hình hiển thị, chương trình được viết lại như sau:
// Thêm thư viện
#include <LiquidCrystal.h>
//Khai báo các chân giao tiếp
LiquidCrystal lcd (5, 4, 3, 2, 1, 0);
void setup()
{
// Khởi tạo LCD
lcd.begin(16, 2);
// In dòng chữ dientuadenz.com ra LCD
lcd.print(“dientuadenz.com”);
delay(1000);
}
void loop() {
// Cuộn 13 vị trí sang trái
for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
// Cuộn 1 vị trí sang trái:
lcd.scrollDisplayLeft();
// đặt tốc độ di chuyển của màn hình
delay(500);
}
// Cuộn 29 vị trí sang phải:
for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
// Cuộn 1 vị trí sang phải:
lcd.scrollDisplayRight();
// đặt tốc độ di chuyển của màn hình
delay(500);
}
// Cuộn 16 vị trí sang trái
for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
// Cuộn 1 vị trí sang trái:
lcd.scrollDisplayLeft();
// đặt tốc độ di chuyển của màn hình
delay(500);
}
// delay:
delay(1000);
}