Hướng dẫn add thư viên lcd cho arduino

Qua bài viết hôm nay chúng ta sẽ đi sâu vào tìm hiểu các sử dụng LCD và giao tiếp với module IC2 nhé.

Giới thiệu LCD 16×2

Hướng dẫn add thư viên lcd cho arduino
Màn hình LCD 16×2

Thông số kỹ thuật LCD 16×2

LCD 16×2 được sử dụng để hiển thị trạng thái hoặc các thông số.

  • LCD 16×2 có 16 chân trong đó 8 chân dữ liệu (D0 – D7) và 3 chân điều khiển (RS, RW, EN).
  • 5 chân còn lại dùng để cấp nguồn và đèn nền cho LCD 16×2.
  • Các chân điều khiển giúp ta dễ dàng cấu hình LCD ở chế độ lệnh hoặc chế độ dữ liệu.
  • Chúng còn giúp ta cấu hình ở chế độ đọc hoặc ghi.

LCD 16×2 có thể sử dụng ở chế độ 4 bit hoặc 8 bit tùy theo ứng dụng ta đang làm.

Module I2C Arduino

Hướng dẫn add thư viên lcd cho arduino
Module I2C LCD 16×2

LCD có quá nhiều nhiều chân gây khó khăn trong quá trình đấu nối và chiếm dụng nhiều chân trên vi điều khiển.

Module I2C LCD ra đời và giải quyết vấn để này cho bạn.

Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN, D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.

Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4, …) và tương thích với hầu hết các vi điều khiển hiện nay.

Ưu điểm

  • Tiết kiệm chân cho vi điều khiển.
  • Dễ dàng kết nối với LCD.

Thông số kĩ thuật

  • Điện áp hoạt động: 2.5-6V DC.
  • Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780).
  • Giao tiếp: I2C.
  • Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2).
  • Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt.
  • Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD.

Để sử dụng màn hình LCD giao tiếp I2C sử dụng Arduino thì ta cần cài đặt thư viện Liquidcrystal_I2C. Tại đây

  • Xem thêm: Hướng dẫn thêm thư viện trong Arduino IDE.

Các lỗi thường gặp khi sử dụng I2C LCD

  • Hiển thị một dãy ô vuông.
  • Màn hình chỉ in ra một ký tự đầu.
  • Màn hình nhấp nháy.

Các lỗi này chủ yếu là do sai địa chỉ bus, để fix lỗi các bạn thay địa chỉ mặc định là “0x27” thành “0x3F.

Trong trường hợp vẫn không được các bạn fix lỗi bằng cách nạp code tìm địa chỉ bus của I2C.

Sau khi tìm xong các bạn thay địa chỉ vừa tìm được vào vị trí “0x27” là xong.

  • Các bạn có thể tải code tìm địa chỉ bus ở đây. Tải ngay.

Giao tiếp I2C LCD Arduino

Module I2C LCD 16×2 Arduino UNO GND GND VCC 5V SDA A4/SDA SCL A5/SCL

Sơ đồ đấu nối

Hướng dẫn add thư viên lcd cho arduino
Sơ đồ đấu nối giao tiếp IC2 với LCD 16×2.

Các linh kiện cần thiết cho dự án:

Tên linh kiện Số lượng Shopee Arduino UNO R3 1 Mua ngay Dây cáp nạp 1 Mua ngay Màn hình LCD 16×2 1 Mua ngay Module I2C LCD 16×2 1 Mua ngay Dây cắm (Đực – Cái) 1 Mua ngay

Code mẫu

include

include

LiquidCrystal_I2C lcd(0x3F,16,2); void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(2,0); lcd.print("Arduinokit.vn"); lcd.setCursor(0,1); lcd.print("Xin chao cac ban"); } void loop() { }

Giải thích code

LiquidCrystal_I2C lcd(0x3F,16,2);

  • Đặt địa chỉ LCD là 0x3F cho màn hình LCD 16×2.
  • 16 là số cột của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 20.
  • 2 là số dòng của màn hình (nếu dùng loại màn hình 20×4) thì thay bằng 4.

lcd.init();

Khởi động màn hình LCD, bắt đầu cho phép Arduino sử dụng màn hình.

lcd.backlight();

Bật đèn nền LCD 16×2.

lcd.setCursor(2,0);

Đưa con trỏ tới hàng 1, cột 3.

Lưu ý: giá trị hàng và cột bắt đầu từ số 0 có nghĩa 0 là hàng(cột) 1.

lcd.print("Arduinokit.vn");

Xuất ra dòng chữ Arduinokit.vn tại vị trí con trỏ ở hàng 1, cột 3.

lcd.setCursor(0,1); lcd.print("Xin chao cac ban");

Đoạn code này thì tương tự như trên, xuất ra dòng chữ “Xin chao cac ban” tại vị trí con trỏ ở hàng 2, cột 1.

Bây giờ thì các bạn upload chương trình và xem kết quả nhé.

Lời kết

Qua bài hôm nay các bạn biết cách làm thế nào để hiển thị các ký tự và chuỗi ký tự lên LCD 16×2 và biết cách giao tiếp I2C.

Như tiêu đề, hôm nay, mình xin giới thiệu library cho arduino sử dụng để điều khiển màn hình homephone. Màn hình homephone giá bao rẻ, độ phân giải cực cao, lại dễ sử dụng. Sau đây là một số hướng dẫn khi sử dụng thư viện. Các bạn sẽ sở hữu một màn hình cực lớn để làm GAME với xuất thông tin đó nhé.

I. HƯỚNG DẪN KẾT NỐI MÀN HÌNH HOMEPHONE VỚI LCD

Chúng ta có thể sử dụng 5 chân của Arduino kết nối với màn hình homephone.

Ví dụ ở đây sẽ là

Arduino Homephone 9 SDIN 8 SLK 7 A 6 RESET 5 CS

Lưu ý: Cũng có thể kết nối bằng cách sử dụng các chân khác (cả digital và analog đều được) trên Arduino để kết nối đến màn hình.

II. CÁC HÀM KHỞI ĐỘNG VÀ KHAI BÁO SỬ DỤNG MÀN HÌNH

Hướng dẫn add thư viên lcd cho arduino

  • Dòng 1: thêm thư viện
  • Dòng 2: chỉ định chân của Arduino kết nối đến homephone lcd như theo thứ tự đã nêu ở mục trước.
  • Tiếp đó vào chương trình chạy một lần
    • Dòng 5: lcd.begin khởi động lcd.
    • Dòng 6: cài đặt độ tương phản cho màn hình lcd
    • Dòng 7: xóa màn hình.
    • Dòng 8: hiển thị màn hình. Hàm này sẽ được sử dụng để hiện thị thông tin sau khi sử dụng các hàm vẽ khác.
      Ghi chú: nên xóa màn hình trước khi sử dụng nếu màn hình có hiện các điểm ảnh không mong muốn.

III. CÁC HÀM VẼ CƠ BẢN

1. Vẽ một điểm ảnh

Hướng dẫn add thư viên lcd cho arduino

lcd.drawPixel(x, y, color)

Hàm này sử dụng để vẽ một điểm ảnh tại tọa độ x, y và màu sắc do các bạn định nghĩa (black, white).

Ví dụ:

  • Vẽ một điểm đen, tọa đô 1,1 trên màn hình, sau đó dùng hàm lcd.display() để hiển thị điểm ảnh đó trên màn hình.

lcd.drawPixel(1, 1, black); lcd.display();

  • Vẽ một điểm trắng tọa độ 2,2 trên màn hình tương tự sử dụng hàm lcd.display() để hiển thị trên màn hình.

lcd.drawPixel(1, 1, black); lcd.display();

2. Vẽ một đường thẳng

lcd.drawLine(x0, y0, x1, y1, color);

Hàm này để vẽ một đoạn thẳng đi nối hai điểm (x0,y0) và (x1, y1), và màu sắc của đường thẳng do các bạn định nghĩa (black, white)

Ví dụ:

  • Vẽ một đoạn thẳng nối hai điểm (2, 5) và (4, 3) đường màu đen

lcd.drawLine(2, 5, 4, 3, black); lcd.display();

  • Tương tự mới một đoạn thẳng màu trắng

lcd.drawLine(2, 5, 4, 3, white); lcd.display();

3. Vẽ một hình vuông hay hình chữ nhật

lcd.drawRect(x0, y0, w, h, color);

Hàm này để vẽ một hình vuông, chữ nhật trong đó điểm (x0, y0) là tọa độ đặt điểm đầu tiên của hình chữ nhật, w chiều dài, h chiều rộng và màu sắc

Ví dụ:

  • Vẽ hình chữ nhật có điểm bắt đầu từ tọa độ (1, 1) chiều dài 15, chiều rộng 5 màu đen

lcd.drawRect(1, 1, 15, 5, black); lcd.display();

  • Hoàn toàn có thể cho 2 chiều bằng nhau để tạo hình vuông.

4. Tô màu hình vuông hay hình chữ nhật

lcd.fillRect(x0, y0, w, h, color);

Ví dụ

Hàm này để tô màu cho một hình vuông, chữ nhật trong đó điểm (x0, y0) là tọa độ đặt điểm đầu tiên của hình chữ nhật, w chiều dài, h chiều rộng và màu sắc

Tương tự như ví dụ trên

  • Tô mầu hình chữ nhật (toàn màu đen) có điểm bắt đầu từ tọa độ (1, 1) chiều dài 15, chiều rộng 5

lcd.fillRect(1, 1, 15, 5, black); lcd.display();

  • Với mầu trắng

lcd.drawPixel(1, 1, black); lcd.display();

0

5. Vẽ hình tròn

lcd.drawPixel(1, 1, black); lcd.display();

1

Hàm này cho phép vẽ đường tròn có tâm (x0, y0) và đường kính r, màu sắc của đường tròn.

Ví dụ:

  • Vẽ đường tròn tâm A (15, 15) đường kính 10, màu đen

lcd.drawPixel(1, 1, black); lcd.display();

2

  • Tương tự với màu trắng chúng ta chỉ việc thay black = white

6. Tô màu hình tròn

lcd.drawPixel(1, 1, black); lcd.display();

3

Hàm này cho phép tô toàn bộ màu trong hình tròn

Ví dụ:

  • Tô màu đường tròn tâm A (15, 15) đường kính 10, màu đen

lcd.drawPixel(1, 1, black); lcd.display();

4

7. Vẽ hình tam giác

lcd.drawPixel(1, 1, black); lcd.display();

5

Hàm này cho phép vẽ một hình tam giác nối 3 đỉnh tại 3 tọa độ A(x0, y0), B(x1, y1), C(x2, y2)

Ví dụ:

  • Vẽ đường tam giác qua 3 điểm A(15, 20); B (7, 9); C(8, 15);

lcd.drawPixel(1, 1, black); lcd.display();

6

  • Tương tự có thể vẽ với màu trắng, thay black = white

8. Viết chữ

lcd.drawPixel(1, 1, black); lcd.display();

7

Hàm này cho phép mình đưa lên màn hình dòng chữ mà mình muốn hiển thị tại bất cứ tọa độ nào trên màn hình. Các câu lệnh để viết chữ như sau:

Ví dụ:

  • Viết chữ hello tại tọa độ (15,15) chữ đen nền trắng

lcd.drawPixel(1, 1, black); lcd.display();

8

IV. Tải về thư viện

Các bạn có thể download tài liệu đó trên github của mình

https://github.com/nhatthanh228/homephone_LCD

Ngoài ra, mình rất mong muốn các bạn có thể đóng góp chỉnh sửa thư viện để nó hoàn chỉnh hơn,

Có vấn đề gì cứ liên lạc với mình bằng cách bình luận ở bên dưới, hi vọng mình sẽ trả lời được những câu hỏi của các bạn.