Hướng dẫn thiết lập màn hình LCD trên Arduino

0
7495
Giao tiếp LCD và Arduino

Trong hướng dẫn này, tôi sẽ giải thích cách thiết lập màn hình LCD trên Arduino và  cho các bạn thấy tất cả các cách khác nhau mà bạn có thể lập trình. Tôi sẽ chỉ cho bạn cách in chữ, cuộn chữ, tạo các ký tự tùy chỉnh, nhấp nháy chữ và vị trí chữ. Chúng tuyệt vời cho bất kỳ dự án nào xuất dữ liệu và chúng có thể làm cho dự án của bạn thú vị và tương tác hơn nhiều.

Màn hình tôi đang sử dụng là màn hình LCD 16×2. Bạn có thể tự hỏi tại sao nó được gọi là màn hình LCD 16×2. Phần 16×2 có nghĩa là màn hình LCD có 2 dòng và có thể hiển thị 16 ký tự trên mỗi dòng. Do đó, màn hình LCD 16×2 có thể hiển thị tối đa 32 ký tự cùng một lúc. Có thể hiển thị hơn 32 ký tự bằng cách cuộn.

Code trong bài viết này được viết cho màn hình LCD sử dụng bộ điều khiển (driver) chuẩn Hitachi HD44780. Nếu màn hình LCD của bạn có 16 chân thì có lẽ nó có bộ điều khiển Hitachi HD44780. Các màn hình này có thể được kết nối ở chế độ 4 bit hoặc 8 bit. Việc lắp đặt LCD ở chế độ 4 bit thường được ưu tiên vì nó sử dụng bốn dây ít hơn chế độ 8 bit. Trong thực tế, không có sự khác biệt đáng kể về hiệu suất giữa hai chế độ. Trong hướng dẫn này, tôi sẽ kết nối màn hình LCD ở chế độ 4 bit.

Kết nối màn hình LCD với ARDUINO

Dưới đây là sơ đồ các chân trên màn hình LCD tôi đang sử dụng. Các kết nối từ mỗi chân đến Arduino sẽ giống nhau, nhưng các chân của bạn có thể được bố trí khác nhau trên màn hình LCD. Hãy chắc chắn kiểm tra datasheet hoặc tìm nhãn trên màn hình LCD cụ thể của bạn:

Ngoài ra, bạn có thể cần phải hàn header 16 chân vào màn hình LCD của mình trước khi kết nối với breadboard. Theo sơ đồ dưới đây để nối màn hình LCD với Arduino của bạn:

Thiết lập màn hình LCD trên Arduino

Điện trở trong sơ đồ trên thiết lập độ sáng đèn nền. Giá trị điển hình của điện trở này là 220Ω, nhưng các giá trị khác cũng sẽ hoạt động. Điện trở nhỏ hơn sẽ làm cho đèn nền sáng hơn.

Biến trở được sử dụng để điều chỉnh độ tương phản màn hình. Tôi thường sử dụng một biến trở 10kΩ, nhưng các giá trị khác cũng sẽ làm việc.

Lập trình Arduino

Tất cả các chương trình dưới đây sử dụng thư viện LiquidCrystal được cài đặt sẵn với Arduino IDE. Thư viện (library) là một tập hợp các hàm có thể dễ dàng được thêm vào một chương trình theo khuôn dạng viết tắt.

Để sử dụng thư viện, nó cần được đưa vào chương trình. Dòng 1 trong đoạn code dưới đây thực hiện điều này bằng lệnh #include <LiquidCrystal.h>. Khi bạn include một thư viện trong một chương trình, tất cả các code trong thư viện được nạp vào Ardunio cùng với code cho chương trình của bạn.

Bây giờ chúng ta đã sẵn sàng để tham gia vào lập trình! Tôi sẽ đi qua những điều thú vị hơn bạn có thể làm trong một thời điểm, nhưng bây giờ cho phép chỉ cần chạy một chương trình thử nghiệm đơn giản. Chương trình này sẽ in “hello, world!” lên màn hình. Nhập code này vào Arduino IDE và nạp nó vào board Arduino:

void setup() {

  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {
}

Màn hình LCD của bạn sẽ trông như thế này:

Các tùy chọn màn hình LCD

Có 19 hàm (function) khác nhau trong thư viện LiquidCrystal có sẵn cho chúng ta sử dụng. Các hàm này làm những việc như thay đổi vị trí của văn bản, di chuyển văn bản trên màn hình hoặc bật/tắt màn hình. Sau đây là một mô tả ngắn về từng hàm và cách sử dụng nó trong một chương trình.

LiquidCrystal()

Hàm LiquidCrystal () thiết lập các chân mà Arduino sử dụng để kết nối với màn hình LCD. Bạn có thể sử dụng bất kỳ chân số nào của Arduino để điều khiển màn hình LCD. Chỉ cần đặt số pin Arduino bên trong dấu ngoặc đơn theo thứ tự này: LiquidCrystal (RS, E, D4, D5, D6, D7). RS, E, D4, D5, D6, D7 là các chân LCD.

Ví dụ: giả sử bạn muốn chân D7 cuả LCD kết nối với chân 12 Arduino. Chỉ cần đặt “12” vào vị trí của D7 trong hàm như thế này: LiquidCrystal (RS, E, D4, D5, D6, 12). Hàm này cần được đặt trước phần void setup () của chương trình.

lcd.begin()

Hàm này này thiết lập kích thước của màn hình LCD. Nó cần phải được đặt trước bất kỳ hàm LiquidCrystal nào khác trong phần void setup () của chương trình. Số hàng và cột được chỉ định qua lệnh lcd.begin (cột, hàng). Đối với màn hình LCD 16 × 2, bạn sẽ sử dụng lcd.begin (16, 2) và cho màn hình LCD 20 × 4, bạn sẽ sử dụng lcd.begin (20, 4).

lcd.clear()

Hàm này xóa mọi văn bản hoặc dữ liệu đã được hiển thị trên màn hình LCD. Nếu bạn sử dụng lcd.clear () với hàm lcd.print () và hàm delay () trong phần void loop (), bạn có thể thực hiện một chương trình nhấp nháy văn bản đơn giản:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  }
void loop() {
  lcd.print(“hello, world!”);

  delay(500);

lcd.home()

Hàm này đặt con trỏ ở góc trên bên trái của màn hình và in bất kỳ văn bản tiếp theo nào từ vị trí đó. Ví dụ: code này thay thế ba chữ cái đầu tiên của “hello world!” bằng chữ X:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {

  lcd.home();

lcd.setCursor()

Tương tự, nhưng hữu ích hơn lcd.home () là lcd.setCursor (). Hàm này đặt con trỏ (và bất kỳ văn bản được in nào) ở bất kỳ vị trí nào trên màn hình. Nó có thể được sử dụng trong phần void setup () hoặc void loop () trong chương trình của bạn.

Vị trí con trỏ được xác định với lcd.setCursor (cột, hàng). Các tọa độ cột và hàng bắt đầu từ 0 (tương ứng 0-15 và 0-1). Ví dụ, bằng cách sử dụng lcd.setCursor (2, 1) trong phần void setup () của chương trình “hello, world!” Ở trên in “hello, world!” vào dòng dưới và chuyển nó sang hai khoảng trống bên phải:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(2, 1);
  lcd.print(“hello, world!”);
}
void loop() {

lcd.write()

Bạn có thể sử dụng hàm này để ghi các loại dữ liệu khác nhau vào màn hình LCD, ví dụ như dữ liệu đọc từ cảm biến nhiệt độ hoặc tọa độ từ mô-đun GPS. Bạn cũng có thể sử dụng nó để in các ký tự tùy chỉnh mà bạn tự tạo ra. Sử dụng lcd.write () trong phần void setup () hoặc void loop () trong chương trình của bạn.

lcd.print()

Hàm này được sử dụng để in văn bản ra màn hình LCD. Nó có thể được sử dụng trong phần void setup () hoặc phần void loop () của chương trình.

Để in các chữ cái và các từ, đặt dấu ngoặc kép (“”) xung quanh văn bản. Ví dụ, để in hello, world !, sử dụng lệnh lcd.print (“hello, world!”).

Để in số, không cần dấu ngoặc kép. Ví dụ: để in 123456789, hãy sử dụng lệnh lcd.print (123456789).

lcd.print () có thể in các số thập phân, nhị phân, thập lục phân và bát phân. Ví dụ:

  • lcd.print(100, DEC) prints “100”;
  • lcd.print(100, BIN) prints “1100100”
  • lcd.print(100, HEX) prints “64”
  • lcd.print(100, OCT) prints “144”

lcd.Cursor()

Hàm này tạo ra một con trỏ hiển thị. Con trỏ là một đường ngang được đặt bên dưới ký tự tiếp theo sẽ được in ra màn hình LCD.

Hàm lcd.noCursor () tắt con trỏ. lcd.cursor () và lcd.noCursor () có thể được sử dụng cùng nhau trong phần void loop () để tạo một con trỏ nhấp nháy tương tự như những gì bạn thấy trong nhiều trường nhập văn bản:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {
  lcd.cursor();
}

Chương trình trên đặt con trỏ nhấp nháy sau dấu chấm than trong “hello, world!”

Các con trỏ có thể được đặt ở bất kỳ đâu trên màn hình bằng hàm lcd.setCursor (). Chương trình này đặt con trỏ nhấp nháy ngay bên dưới dấu chấm than trong “hello, world!”:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {
  lcd.setCursor(12, 1);
{
lcd.blink()

Hàm này tạo ra một con trỏ kiểu khối nhấp nháy khoảng 500 ms mỗi chu kỳ. Sử dụng hàm trong phần void loop (). Hàm lcd.noBlink () tắt con trỏ khối nhấp nháy.

lcd.display()


Hàm này mở bất kỳ văn bản hoặc con trỏ nào đã được in trên màn hình LCD. Hàm lcd.noDisplay () tắt bất kỳ văn bản hoặc con trỏ nào được in trên màn hình LCD mà không xóa đi khỏi bộ nhớ của màn hình LCD.

Hai hàm này có thể được sử dụng cùng nhau trong phần void loop () để tạo hiệu ứng văn bản nhấp nháy. Code này sẽ bật và tắt chữ “hello, world!”:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {
  lcd.display();
{

lcd.scrollDisplayLeft()

Hàm này lấy mọi thứ được in ra màn hình LCD và di chuyển sang trái. Nó nên được sử dụng trong phần void loop () với một lệnh delay theo sau nó. Hàm sẽ di chuyển văn bản 40 dấu cách sang trái trước khi nó lặp lại ký tự đầu tiên. Code này di chuyển văn bản “hello, world!” sang bên trái, với tốc độ một giây cho mỗi ký tự:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
  lcd.print(“hello, world!”);
}
void loop() {
  lcd.scrollDisplayLeft();
{
Các chuỗi văn bản dài hơn 40 khoảng trắng sẽ được in sang dòng 1 sau vị trí thứ 40, trong khi bắt đầu chuỗi sẽ tiếp tục in ở dòng 0.

lcd.scrollDisplayRight()

Hàm này hoạt động như lcd.scrollDisplayLeft (), nhưng di chuyển văn bản sang bên phải.

lcd.autoscroll()

Hàm này lấy một chuỗi văn bản và cuộn nó từ phải sang trái theo số lượng ký tự của chuỗi ký tự. Ví dụ, nếu bạn có một chuỗi văn bản dài 3 ký tự, nó sẽ dịch chuyển văn bản 3 dấu cách sang trái với mỗi bước:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);
}
void loop() {
  lcd.setCursor(0, 0);
  lcd.autoscroll();
{
Giống như các hàm lcd.scrollDisplay (), văn bản có thể dài tới 40 ký tự trước khi lặp lại. Thoạt nhìn, hàm này có vẻ ít hữu ích hơn so với các hàm lcd.scrollDisplay (), nhưng nó có thể rất hữu ích cho việc tạo hình động với các ký tự tùy chỉnh.

lcd.noAutoscroll()

lcd.noAutoscroll () tắt chức năng lcd.autoscroll (). Sử dụng hàm này trước hoặc sau lcd.autoscroll () trong phần void loop () để tạo chuỗi các văn bản cuộn hoặc các hình động.

lcd.rightToLeft()

Hàm này thiết lập hướng văn bản được in ra màn hình. Chế độ mặc định là từ trái sang phải bằng lệnh lcd.leftToRight (), nhưng bạn có thể thấy một số trường hợp khi xuất văn bản theo hướng ngược lại là có ích:

lcd.begin(16, 2);

  lcd.setCursor(12, 0);
  lcd.rightToLeft();
  lcd.print(“hello, world!”);
}
void loop() {
}

Code này in chữ “hello, world!” Thành “! Dlrow, olleh”. Trừ khi bạn chỉ định vị trí của con trỏ với lcd.setCursor (), văn bản sẽ in từ vị trí (0, 1) và chỉ ký tự đầu tiên của chuỗi sẽ hiển thị.

lcd.createChar()

Lệnh này cho phép bạn tạo các ký tự tùy chỉnh của riêng bạn. Mỗi ký tự của một màn hình LCD 16 × 2 có chiều rộng 5 pixel và chiều cao 8 pixel. Bạn có thể tạo ra  tối đa 8 ký tự tùy chỉnh khác nhau trong một chương trình. Để thiết kế các ký tự của riêng bạn, bạn sẽ cần tạo một ma trận nhị phân của ký tự tùy chỉnh của bạn từ trình tạo ký tự LCD hoặc tự vẽ bản đồ đó. Code này tạo ra một biểu tượng độ (°):

void setup()

{
  lcd.createChar(0, customChar);
  lcd.begin(16, 2);
  lcd.write((uint8_t)0);
 }
void loop() {

}

Có rất nhiều điều thú vị bạn có thể thực hiện với các màn hình LCD 16 × 2 này! Hãy thử kết hợp một số hàm này và xem điều gì xảy ra bạn nhé.

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