Giao tiếp LCD 16×2 với Arduino

0
3677
Giao tiếp Arduino và LCD 16x2

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.
+ Logic “0”: Bus D0-D7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” – write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” – read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.

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.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra D0-D7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.

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 :
+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit D7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ D4 tới D7, bit MSB là D7

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

Mạch kết nối LCD 16x2 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

//Thêm thư viện LiquidCrystal – nó có sẵn vì vậy bạn không cần cài thêm gì cả

#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);

}

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây