🌱 Actuator - Màn hình LCD 16x2 Display và Cách giao tiếp Vi điều khiển

🌱 Actuator - Màn hình LCD 16x2 Display và Cách giao tiếp Vi điều khiển

   LCD 16x2 là một trong những module hiển thị phổ biến nhất trong các dự án điện tử và vi điều khiển. Với khả năng hiển thị 2 dòng, mỗi dòng 16 ký tự, LCD 16x2 được sử dụng rộng rãi trong các ứng dụng từ đơn giản đến phức tạp như: đồng hồ số, máy đo nhiệt độ, hệ thống giám sát, và nhiều dự án DIY khác.

   Bài viết này sẽ hướng dẫn chi tiết về LCD 16x2, từ cấu tạo, nguyên lý hoạt động, cách kết nối với vi điều khiển, đến lập trình điều khiển cơ bản. Đây là kiến thức nền tảng quan trọng cho bất kỳ ai muốn làm việc với các hệ thống nhúng.

1. Giới thiệu về LCD 16x2

   LCD (Liquid Crystal Display) 16x2 là loại màn hình hiển thị ký tự dạng chấm (dot matrix) có khả năng hiển thị 16 ký tự trên mỗi dòng và có tổng cộng 2 dòng. Mỗi ký tự được tạo thành từ ma trận điểm ảnh 5×8 hoặc 5×10.

1.1. Ưu điểm của LCD 16x2

  • Giá thành rẻ: Phổ biến và dễ tìm mua với giá cả hợp lý
  • Dễ sử dụng: Giao diện đơn giản, nhiều thư viện hỗ trợ
  • Tiêu thụ điện năng thấp: Phù hợp cho các ứng dụng chạy pin
  • Hiển thị rõ ràng: Dễ đọc trong nhiều điều kiện ánh sáng
  • Tương thích rộng: Hoạt động với hầu hết các vi điều khiển

1.2. Ứng dụng phổ biến

  • Đồng hồ số và báo thức
  • Máy đo nhiệt độ, độ ẩm
  • Hệ thống giám sát và điều khiển
  • Máy tính tiền, cân điện tử
  • Thiết bị y tế, công nghiệp
  • Các dự án DIY và học tập

1.3. Cấu tạo và chân tín hiệu

   LCD 16x2 thường có 16 chân kết nối (một số loại có thêm chân đèn nền). Mỗi chân có chức năng riêng biệt để điều khiển và cung cấp nguồn cho LCD.

LCD 1602 Pin Configuration

↪ Bảng chức năng các chân

Chân Tên Chức năng
1 VSS Nối đất (GND) - 0V
2 VDD Nguồn dương +5V
3 VEE/V0 Điều chỉnh độ tương phản (contrast)
4 RS Register Select: 0=Lệnh, 1=Dữ liệu
5 R/W Read/Write: 0=Ghi, 1=Đọc
6 E Enable: Xung kích hoạt
7-14 DB0-DB7 8 đường dữ liệu (Data Bus)
15 A/LED+ Nguồn dương đèn nền (Backlight +)
16 K/LED- Nguồn âm đèn nền (Backlight -)

1.4. Chi tiết về các chân quan trọng

⚠️ Chân VSS và VDD (Nguồn điện)

  • VSS nối với GND của mạch
  • VDD cấp nguồn +5V (có thể từ 4.5V đến 5.5V)
  • Dòng tiêu thụ: khoảng 1-2mA (không tính đèn nền)

💡 Chân VEE/V0 (Điều chỉnh độ tương phản)

  • Điều chỉnh độ tương phản của màn hình
  • Thường nối với biến trở 10kΩ để điều chỉnh
  • Điện áp: 0V (tối đa) đến 5V (tối thiểu)
  • Nếu không thấy chữ, hãy điều chỉnh biến trở này

🔌 Chân RS, R/W, E (Điều khiển)

  • RS (Register Select): Chọn thanh ghi
    • RS=0: Ghi lệnh vào Instruction Register (IR)
    • RS=1: Ghi/đọc dữ liệu từ Data Register (DR)
  • R/W (Read/Write): Chọn chế độ đọc/ghi
    • R/W=0: Ghi dữ liệu vào LCD
    • R/W=1: Đọc dữ liệu từ LCD
    • Thường nối GND (chỉ ghi) để tiết kiệm chân
  • E (Enable): Xung kích hoạt
    • Dữ liệu được chốt khi E chuyển từ cao xuống thấp
    • Độ rộng xung tối thiểu: 450ns (ở 5V)

📊 Chân DB0-DB7 (Data Bus)

  • 8 đường dữ liệu song song
  • Có thể sử dụng chế độ 8-bit (DB0-DB7) hoặc 4-bit (DB4-DB7)
  • Chế độ 4-bit tiết kiệm 4 chân vi điều khiển
  • DB7 cũng là chân Busy Flag khi đọc trạng thái

2. Chip điều khiển HD44780

   Hầu hết các LCD 16x2 sử dụng chip điều khiển HD44780 (Datasheet) hoặc tương thích. Chip này tích hợp sẵn các chức năng điều khiển LCD, giúp đơn giản hóa việc lập trình.

Hitachi HD44780 LCD control

2.1. Các thành phần chính của HD44780

2.1.1. Instruction Register (IR) - Thanh ghi lệnh

  • Lưu trữ các mã lệnh điều khiển LCD
  • Ví dụ: xóa màn hình, dịch con trỏ, bật/tắt hiển thị
  • Truy cập khi RS=0

2.1.2. Data Register (DR) - Thanh ghi dữ liệu

  • Lưu trữ dữ liệu ký tự cần hiển thị
  • Dữ liệu được ghi vào DDRAM hoặc CGRAM
  • Truy cập khi RS=1

2.1.3. DDRAM (Display Data RAM)

  • Bộ nhớ lưu trữ dữ liệu hiển thị: 80 bytes (80 ký tự)
  • Địa chỉ dòng 1: 0x00 đến 0x0F (0-15)
  • Địa chỉ dòng 2: 0x40 đến 0x4F (64-79)
  • Mỗi địa chỉ tương ứng với một vị trí hiển thị
Vị trí Địa chỉ DDRAM
Dòng 1, cột 1-16 0x00, 0x01, 0x02, ... 0x0F
Dòng 2, cột 1-16 0x40, 0x41, 0x42, ... 0x4F

2.1.4. CGROM (Character Generator ROM)

  • Bộ nhớ ROM chứa 208 mẫu ký tự 5×8 dots
  • Bao gồm: chữ cái, số, ký tự đặc biệt, ký tự Nhật Bản
  • Không thể thay đổi (chỉ đọc)
  • Mỗi ký tự có mã ASCII tương ứng

2.1.5. CGRAM (Character Generator RAM)

  • Bộ nhớ RAM cho phép tạo 8 ký tự tùy chỉnh (5×8 dots)
  • Hoặc 4 ký tự tùy chỉnh (5×10 dots)
  • Có thể lập trình để tạo biểu tượng, ký tự đặc biệt
  • Địa chỉ: 0x00 đến 0x3F (64 bytes)

2.1.6. Busy Flag (BF)

  • Cờ báo hiệu LCD đang bận xử lý lệnh
  • BF=1: LCD đang bận, không nhận lệnh mới
  • BF=0: LCD sẵn sàng nhận lệnh
  • Đọc qua chân DB7 khi RS=0, R/W=1

2.2. Address Counter (AC)

  • Bộ đếm địa chỉ tự động tăng/giảm sau mỗi lần ghi/đọc
  • Xác định vị trí hiện tại trong DDRAM hoặc CGRAM
  • Có thể đọc giá trị AC để biết vị trí con trỏ

3. Các phương pháp giao tiếp LCD

   LCD 16x2 hỗ trợ hai phương pháp giao tiếp chính: 8-bit và 4-bit. Mỗi phương pháp có ưu nhược điểm riêng.

3.1. Giao tiếp 8-bit

   Sử dụng tất cả 8 đường dữ liệu DB0-DB7 để truyền dữ liệu.

LCD 1602 8-bit Communication

Ưu điểm:

  • Truyền dữ liệu nhanh (1 lần truyền/byte)
  • Code đơn giản
  • Dễ debug

Nhược điểm:

  • Cần nhiều chân vi điều khiển (tổng là 11 chân)
  • Lãng phí tài nguyên nếu MCU có ít chân

3.2. Giao tiếp 4-bit

   Chỉ sử dụng 4 đường dữ liệu DB4-DB7, tiết kiệm 4 chân vi điều khiển.

LCD 1602 4-bit Communication

Ưu điểm:

  • Tiết kiệm chân vi điều khiển (chỉ cần 7 chân)
  • Phù hợp với MCU có ít chân I/O
  • Vẫn đủ nhanh cho hầu hết ứng dụng

Nhược điểm:

  • Chậm hơn 8-bit (cần 2 lần truyền/byte)
  • Code phức tạp hơn một chút
  • Cần gửi 4-bit cao trước, 4-bit thấp sau

3.3. So sánh 8-bit vs 4-bit

Tiêu chí 8-bit 4-bit
Số chân cần 11 chân 7 chân
Tốc độ Nhanh hơn Chậm hơn x2
Độ phức tạp code Đơn giản Phức tạp hơn
Ứng dụng MCU nhiều chân MCU ít chân
Khuyến nghị Học tập, prototype Sản phẩm thực tế

💡 Lưu ý quan trọng về chế độ 4-bit:

  • Khi khởi động, LCD mặc định ở chế độ 8-bit
  • Phải gửi lệnh chuyển sang 4-bit theo trình tự đặc biệt
  • Sau khi chuyển sang 4-bit, mọi lệnh đều gửi 2 lần (4-bit cao trước)
  • Không thể chuyển ngược từ 4-bit về 8-bit mà không reset

4. Giao tiếp giữa Vi điều khiển và màn hình LCD

   Để giao tiếp giữa các vi điều khiển với màn hình LCD 1602, việc cần làm là gửi các command từ vi điều khiển sang LCD tuân theo flow của LCD quy định.

    Sẽ có 2 thông tin chính được gửi, đó là:

  • Lệnh (Command): Những chỉ dẫn cho LCD ví dụ clear màn hình, di chuyển con trỏ, ...
  • Dữ liệu (Data): Các ký tự hiển thị lên màn hình.

    Duới đây là flow và presudo-code sử dụng để giao tiếp gửi command và data sang LCD1602.

LCD 1602 Send Command
LCD 16x02 Communicate with Microcontroller

5. Khởi tạo LCD

   Khởi tạo là bước quan trọng nhất khi làm việc với LCD. Nếu khởi tạo sai, LCD sẽ không hoạt động hoặc hiển thị sai.

5.1. Khởi tạo tự động bởi mạch nội

   Khi cấp nguồn, mạch reset nội của HD44780 tự động khởi tạo với các thiết lập sau:

  • Chế độ 8-bit
  • Hiển thị 1 dòng
  • Font 5×8 dots
  • Tắt hiển thị
  • Tắt con trỏ
  • Chế độ tăng địa chỉ (increment)

⚠️ Điều kiện để reset tự động hoạt động:

  • Nguồn VCC phải tăng từ 0V lên 4.5V trong thời gian 0.1ms đến 10ms
  • Sau khi VCC đạt 4.5V, phải đợi thêm 15ms
  • Nếu không đáp ứng điều kiện này, phải khởi tạo bằng lệnh

5.2. Khởi tạo bằng lệnh (8-bit mode)

   Đây là trình tự khởi tạo chuẩn cho chế độ 8-bit:

LCD 1602 8-bit mode initialization

5.3. Khởi tạo bằng lệnh (4-bit mode)

   Khởi tạo 4-bit phức tạp hơn vì phải chuyển từ 8-bit sang 4-bit:

LCD 1602 4-bit mode initialization

❗ Một số lỗi thường gặp khi khởi tạo:

  • Không đợi đủ thời gian sau khi cấp nguồn
  • Quên gửi lệnh Function Set 3 lần đầu tiên
  • Ở chế độ 4-bit, quên gửi 4-bit cao trước
  • Không kiểm tra Busy Flag giữa các lệnh
  • Xung Enable quá ngắn hoặc quá dài

6. Các lệnh cơ bản

   HD44780 có tập lệnh phong phú để điều khiển LCD. Dưới đây là các lệnh quan trọng nhất.

6.1. Bảng tổng hợp các lệnh

Lệnh Mã Hex Chức năng Thời gian
Clear Display 0x01 Xóa toàn bộ màn hình 1.52ms
Return Home 0x02 Đưa con trỏ về đầu 1.52ms
Entry Mode Set 0x04-0x07 Thiết lập chế độ nhập 37μs
Display Control 0x08-0x0F Bật/tắt hiển thị, con trỏ 37μs
Cursor/Display Shift 0x10-0x1F Dịch con trỏ/màn hình 37μs
Function Set 0x20-0x3F Thiết lập chế độ hoạt động 37μs
Set CGRAM Address 0x40-0x7F Đặt địa chỉ CGRAM 37μs
Set DDRAM Address 0x80-0xFF Đặt địa chỉ DDRAM 37μs

6.2. Chi tiết các lệnh quan trọng

6.2.1. Clear Display (0x01)


Mã lệnh: 0x01
Chức năng:
  - Xóa toàn bộ nội dung hiển thị
  - Ghi khoảng trắng (0x20) vào tất cả DDRAM
  - Đưa con trỏ về vị trí (0,0)
  - Đặt lại chế độ increment
Thời gian thực thi: 1.52ms

6.2.2. Return Home (0x02)


Mã lệnh: 0x02
Chức năng:
  - Đưa con trỏ về vị trí (0,0)
  - Đưa màn hình về vị trí ban đầu nếu đã bị dịch
  - KHÔNG xóa nội dung DDRAM
Thời gian thực thi: 1.52ms

6.2.3. Entry Mode Set (0x04-0x07)


Mã lệnh: 0 0 0 0 0 1 I/D S
  I/D: 1=Increment (tăng), 0=Decrement (giảm)
  S: 1=Shift display, 0=No shift

Ví dụ:
  0x06: Increment, No shift (phổ biến nhất)
  0x07: Increment, Shift left
  0x04: Decrement, No shift
  0x05: Decrement, Shift right

6.2.4. Display Control (0x08-0x0F)


Mã lệnh: 0 0 0 0 1 D C B
  D: 1=Display ON, 0=Display OFF
  C: 1=Cursor ON, 0=Cursor OFF
  B: 1=Blink ON, 0=Blink OFF

Ví dụ:
  0x0C: Display ON, Cursor OFF, Blink OFF (phổ biến)
  0x0E: Display ON, Cursor ON, Blink OFF
  0x0F: Display ON, Cursor ON, Blink ON
  0x08: Display OFF

6.2.5. Function Set (0x20-0x3F)


Mã lệnh: 0 0 1 DL N F x x
  DL: 1=8-bit, 0=4-bit
  N: 1=2 lines, 0=1 line
  F: 1=5×10 dots, 0=5×8 dots

Ví dụ:
  0x38: 8-bit, 2 lines, 5×8 font (phổ biến cho 8-bit)
  0x28: 4-bit, 2 lines, 5×8 font (phổ biến cho 4-bit)
  0x30: 8-bit, 1 line, 5×8 font
  0x20: 4-bit, 1 line, 5×8 font

6.2.6. Set DDRAM Address (0x80-0xFF)


Mã lệnh: 1 A6 A5 A4 A3 A2 A1 A0
  A6-A0: Địa chỉ DDRAM (0-127)

Ví dụ:
  0x80: Dòng 1, cột 1 (địa chỉ 0x00)
  0x8F: Dòng 1, cột 16 (địa chỉ 0x0F)
  0xC0: Dòng 2, cột 1 (địa chỉ 0x40)
  0xCF: Dòng 2, cột 16 (địa chỉ 0x4F)

Công thức:
  Dòng 1: 0x80 + cột (0-15)
  Dòng 2: 0xC0 + cột (0-15)

7. Lập trình điều khiển LCD

   Phần này sẽ hướng dẫn lập trình điều khiển LCD bằng ngôn ngữ C cho vi điều khiển 8051 (có thể áp dụng tương tự cho các MCU khác).

8. Tạo ký tự tùy chỉnh

    LCD 16x2 cho phép tạo tối đa 8 ký tự tùy chỉnh (5×8 dots) lưu trong CGRAM. Đây là tính năng hữu ích để tạo biểu tượng, ký tự đặc biệt.

8.1. Cấu trúc CGRAM

  • CGRAM có 64 bytes (8 ký tự × 8 bytes/ký tự)
  • Địa chỉ CGRAM: 0x00 đến 0x3F
  • Mỗi ký tự chiếm 8 bytes (8 dòng × 5 bits/dòng)
  • Ký tự tùy chỉnh có mã từ 0x00 đến 0x07
Ký tự Địa chỉ CGRAM Mã hiển thị
Ký tự 0 0x00 - 0x07 0x00
Ký tự 1 0x08 - 0x0F 0x01
Ký tự 2 0x10 - 0x17 0x02
... ... ...
Ký tự 7 0x38 - 0x3F 0x07

8.2. Thiết kế ký tự tùy chỉnh

   Mỗi ký tự là ma trận 5×8. Mỗi dòng được biểu diễn bằng 5 bits (bit 0-4), bit 1 = điểm sáng, bit 0 = điểm tối.

LCD custom character

Ví dụ: Tạo ký tự trái tim trên màn hình LCD ❤


Dòng 0: 0 0 0 0 0 → 0x00
Dòng 1: 0 1 0 1 0 → 0x0A
Dòng 2: 1 1 1 1 1 → 0x1F
Dòng 3: 1 1 1 1 1 → 0x1F
Dòng 4: 0 1 1 1 0 → 0x0E
Dòng 5: 0 0 1 0 0 → 0x04
Dòng 6: 0 0 0 0 0 → 0x00
Dòng 7: 0 0 0 0 0 → 0x00 (dòng con trỏ)

    ↪ Tool tạo mã hex và code sử dụng cho Custom Character (HD44780 LCD Modules) ... @TODO

8.3. Code tạo ký tự tùy chỉnh

#include <stdint.h>

//----------------------------------------------------------
// Hàm tạo ký tự tùy chỉnh (Custom Character)
void lcd_create_char(uint8_t location, const uint8_t *pattern) {
uint8_t i;

// location: 0–7 (chỉ có 8 vị trí CGRAM)
// Địa chỉ CGRAM = 0x40 + (location * 8)
lcd_command(0x40 + (location * 8));

// Ghi 8 bytes pattern vào CGRAM
for (i = 0; i < 8; i++) {
lcd_data(pattern[i]);
}

// Quay lại DDRAM (chế độ hiển thị bình thường)
lcd_command(0x80);
}

//----------------------------------------------------------
// Pattern ký tự trái tim (Heart)
const uint8_t heart[8] = {
0x00, // _____
0x0A, // _#_#_
0x1F, // #####
0x1F, // #####
0x0E, // _###_
0x04, // __#__
0x00, // _____
0x00 // _____
};

// Pattern ký tự mặt cười (Smile)
const uint8_t smile[8] = {
0x00, // _____
0x0A, // _#_#_
0x0A, // _#_#_
0x00, // _____
0x11, // #___#
0x0E, // _###_
0x00, // _____
0x00 // _____
};

//----------------------------------------------------------
// Hàm main
int main(void) {
lcd_init();

// Tạo ký tự tùy chỉnh
lcd_create_char(0, heart); // CGRAM slot 0
lcd_create_char(1, smile); // CGRAM slot 1

// Hiển thị chuỗi
lcd_goto(0, 0);
lcd_string("Custom Char:");

lcd_goto(1, 0);
lcd_data(0); // Hiển thị trái tim ❤️
lcd_data(' ');
lcd_data(1); // Hiển thị mặt cười 🙂

while (1);
}

8.4. Ví dụ các ký tự tùy chỉnh hữu ích


// Ký tự độ C (°C)
unsigned char degree[8] = {
    0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00
};

// Ký tự mũi tên lên
unsigned char arrow_up[8] = {
    0x04, 0x0E, 0x15, 0x04, 0x04, 0x04, 0x04, 0x00
};

// Ký tự mũi tên xuống
unsigned char arrow_down[8] = {
    0x04, 0x04, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00
};

// Ký tự chuông
unsigned char bell[8] = {
    0x04, 0x0E, 0x0E, 0x0E, 0x1F, 0x00, 0x04, 0x00
};

// Ký tự pin đầy
unsigned char battery_full[8] = {
    0x0E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0E
};

// Ký tự pin yếu
unsigned char battery_low[8] = {
    0x0E, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x1F, 0x0E
};

💡 Mẹo thiết kế ký tự tùy chỉnh:

  • Sử dụng giấy kẻ ô 5×8 để vẽ thiết kế trước
  • Dòng 8 (cuối cùng) thường để trống cho con trỏ
  • Có thể dùng tool online để thiết kế: LCD Custom Character Generator
  • Lưu ý: CGRAM sẽ mất khi tắt nguồn, cần tạo lại mỗi lần khởi động

9. Xử lý sự cố thường gặp

   Dưới đây là các vấn đề thường gặp khi làm việc với LCD 16x2 và cách khắc phục.

9.1. Không có gì hiển thị trên LCD

Nguyên nhân và giải pháp:

  • Chưa cấp nguồn đúng
    • Kiểm tra VDD (+5V) và VSS (GND)
    • Đo điện áp bằng đồng hồ vạn năng
    • Đảm bảo nguồn đủ dòng (ít nhất 50mA)
  • Độ tương phản chưa điều chỉnh
    • Xoay biến trở 10kΩ ở chân V0/VEE
    • Nếu không có biến trở, thử nối V0 xuống GND
  • Kết nối sai chân
    • Kiểm tra lại sơ đồ đấu nối
    • Đảm bảo không nhầm lẫn VDD và VSS
  • LCD bị hỏng
    • Thử với LCD khác để xác nhận

9.2. Chỉ thấy các ô vuông đen

Nguyên nhân và giải pháp:

  • LCD chưa được khởi tạo
    • Kiểm tra hàm lcd_init() có được gọi không
    • Đảm bảo delay đủ thời gian sau khi cấp nguồn
  • Trình tự khởi tạo sai
    • Xem lại trình tự khởi tạo theo datasheet
    • Đảm bảo gửi lệnh Function Set 3 lần đầu tiên
  • Xung Enable không đúng
    • Kiểm tra hàm lcd_enable()
    • Đảm bảo xung EN đủ rộng (>450ns)

9.3. Hiển thị ký tự lạ hoặc sai

Nguyên nhân và giải pháp:

  • Chế độ 4-bit/8-bit không khớp
    • Đảm bảo code và cách đấu nối phù hợp
    • Nếu dùng 4-bit, chỉ nối DB4-DB7
  • Timing không chính xác
    • Tăng thời gian delay giữa các lệnh
    • Kiểm tra tần số thạch anh MCU
  • Nhiễu trên đường tín hiệu
    • Dùng dây ngắn, tránh dây dài
    • Thêm tụ lọc 100nF gần chân VDD
  • Gửi sai mã ASCII
    • Kiểm tra bảng mã ASCII của LCD
    • Một số ký tự đặc biệt có mã khác

9.4. Chỉ hiển thị 1 dòng

Nguyên nhân và giải pháp:

  • Function Set sai
    • Đảm bảo bit N=1 trong lệnh Function Set
    • 0x38 (8-bit) hoặc 0x28 (4-bit) cho 2 dòng
  • Địa chỉ DDRAM sai
    • Dòng 2 bắt đầu từ 0xC0, không phải 0x10
    • Sử dụng hàm lcd_goto() để đặt vị trí

9.5. Hiển thị chậm hoặc nhấp nháy

Nguyên nhân và giải pháp:

  • Không kiểm tra Busy Flag
    • Thêm delay đủ lâu giữa các lệnh
    • Hoặc implement hàm đọc Busy Flag
  • Delay quá ngắn
    • Tăng thời gian delay lên 2-5ms
    • Lệnh Clear Display cần 1.52ms
  • Nguồn không ổn định
    • Thêm tụ lọc 100μF và 100nF
    • Kiểm tra nguồn có đủ dòng không

9.6. Checklist debug

Bước Kiểm tra Giá trị mong đợi
1 Đo điện áp VDD 4.5V - 5.5V
2 Đo điện áp V0 0V - 1V (điều chỉnh được)
3 Kiểm tra kết nối RS, RW, EN Nối đúng chân MCU
4 Kiểm tra data bus DB0-DB7 hoặc DB4-DB7
5 Đo xung EN bằng oscilloscope >450ns, cạnh xuống chốt dữ liệu
6 Kiểm tra trình tự khởi tạo Theo đúng datasheet
7 Kiểm tra delay >40ms sau cấp nguồn
8 Thử code đơn giản nhất Chỉ khởi tạo và hiển thị "A"

10. Kết luận

   LCD 16x2 là một module hiển thị cơ bản nhưng vô cùng hữu ích trong các dự án điện tử và vi điều khiển. Qua bài viết này, chúng ta đã tìm hiểu:

  • Cấu tạo và nguyên lý hoạt động của LCD 16x2
  • Chip điều khiển HD44780 và các thành phần bên trong
  • Hai phương pháp giao tiếp: 8-bit và 4-bit
  • Quy trình khởi tạo LCD đúng cách
  • Các lệnh cơ bản để điều khiển LCD
  • Cách lập trình điều khiển LCD bằng C
  • Tạo ký tự tùy chỉnh trong CGRAM
  • Xử lý các sự cố thường gặp
    Với kiến thức nền tảng này, bạn đã sẵn sàng để tích hợp LCD 16x2 vào các dự án của mình. Hãy thực hành nhiều và đừng ngại thử nghiệm!

>>>>>> Follow ngay <<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn
//