Bộ hiển thị là thiết bị đầu ra quan trọng nhất trong các dự án nhúng và các sản phẩm điện tử. Màn hình LCD 16x2 là một trong những đơn vị hiển thị được sử dụng nhiều nhất. LCD 16x2 có nghĩa là có hai hàng, trong đó 16 ký tự có thể được hiển thị trên mỗi dòng và mỗi ký tự chiếm không gian ma trận 5X7 trên LCD. Trong hướng dẫn này, chúng ta sẽ kết nối mô-đun LCD 16X2 với vi điều khiển 8051 (AT89S52). Giao diện LCD với vi điều khiển 8051 có thể trông khá phức tạp đối với người mới, nhưng sau khi hiểu khái niệm, nó sẽ trông rất đơn giản và dễ dàng. Mặc dù có thể mất thời gian vì bạn cần hiểu và kết nối 16 chân của LCD với vi điều khiển. Vì vậy, trước tiên chúng ta hãy hiểu 16 chân của mô-đun LCD.
Chúng ta có thể chia nó thành năm loại, Chân nguồn, chân tương phản, Chân điều khiển, Chân dữ liệu và chân Đèn nền.
thể loại |
Ghim KHÔNG. |
Tên ghim |
Chức năng |
Chân điện |
1 |
VSS |
Chân nối đất, kết nối với mặt đất |
2 |
VDD hoặc Vcc |
Pin điện áp + 5V |
|
Pin tương phản |
3 |
V0 hoặc VEE |
Thiết lập độ tương phản, kết nối với Vcc thông qua một biến trở. |
Ghim điều khiển |
4 |
RS |
Đăng ký Chọn ghim, RS = 0 Chế độ lệnh, RS = 1 Chế độ dữ liệu |
5 |
RW |
Ghim Đọc / Ghi, RW = 0 Chế độ ghi, RW = 1 Chế độ đọc |
|
6 |
E |
Kích hoạt, xung cao đến thấp cần kích hoạt màn hình LCD |
|
Ghim dữ liệu |
7-14 |
D0-D7 |
Ghim dữ liệu, Lưu trữ dữ liệu được hiển thị trên màn hình LCD hoặc các lệnh |
Ghim đèn nền |
15 |
LED + hoặc A |
Để cấp nguồn cho Đèn nền + 5V |
16 |
LED- hoặc K |
Đèn nền |
Tất cả các chân có thể hiểu rõ ràng theo tên và chức năng của chúng, ngoại trừ các chân điều khiển, vì vậy chúng được giải thích bên dưới:
RS: RS là chân chọn thanh ghi. Chúng tôi cần đặt nó thành 1, nếu chúng tôi đang gửi một số dữ liệu để hiển thị trên màn hình LCD. Và chúng tôi sẽ đặt nó thành 0 nếu chúng tôi gửi một số lệnh như xóa màn hình (mã hex 01).
RW: Đây là chân Đọc / ghi, chúng tôi sẽ đặt nó thành 0, nếu chúng tôi định ghi một số dữ liệu trên màn hình LCD. Và đặt nó thành 1, nếu chúng ta đang đọc từ mô-đun LCD. Nói chung, giá trị này được đặt thành 0, vì chúng ta không cần đọc dữ liệu từ màn hình LCD. Chỉ một hướng dẫn "Nhận trạng thái LCD", cần được đọc một số lần.
E: Chân này được sử dụng để kích hoạt mô-đun khi có xung từ cao xuống thấp. Một xung 450 ns nên được đưa ra. Quá trình chuyển đổi từ CAO xuống THẤP làm cho mô-đun BẬT.
Có một số hướng dẫn lệnh đặt trước trong LCD, chúng tôi đã sử dụng chúng trong chương trình của chúng tôi bên dưới để chuẩn bị cho LCD (trong hàm lcd_init ()). Dưới đây là một số hướng dẫn lệnh quan trọng:
Mã Hex |
Lệnh tới thanh ghi lệnh LCD |
0F |
BẬT LCD, BẬT con trỏ |
01 |
Màn hình hiển thị rõ ràng |
02 |
Trở về nhà |
04 |
Con trỏ giảm dần (di chuyển con trỏ sang trái) |
06 |
Con trỏ tăng dần (di chuyển con trỏ sang phải) |
05 |
Chuyển màn hình sang phải |
07 |
Chuyển màn hình sang trái |
0E |
Hiển thị BẬT, con trỏ nhấp nháy |
80 |
Buộc con trỏ về đầu dòng đầu tiên |
C0 |
Buộc con trỏ đến đầu dòng thứ hai |
38 |
2 dòng và ma trận 5 × 7 |
83 |
Con trỏ dòng 1 vị trí 3 |
3C |
Kích hoạt dòng thứ hai |
08 |
TẮT hiển thị, con trỏ TẮT |
C1 |
Chuyển đến dòng thứ hai, vị trí 1 |
OC |
Hiển thị BẬT, con trỏ TẮT |
C1 |
Chuyển đến dòng thứ hai, vị trí 1 |
C2 |
Chuyển đến dòng thứ hai, vị trí 2 |
Sơ đồ mạch và giải thích
Sơ đồ mạch cho giao tiếp LCD với vi điều khiển 8051 được hiển thị trong hình trên. Nếu bạn đã hiểu cơ bản về 8051 thì bạn phải biết về EA (PIN 31), XTAL1 & XTAL2, RST pin (PIN 9), Vcc và Ground Pin của vi điều khiển 8051. Tôi đã sử dụng các Ghim này trong mạch trên. Nếu bạn không có bất kỳ ý tưởng nào về điều đó thì tôi khuyên bạn nên đọc Bài viết này Giao diện LED với Vi điều khiển 8051 trước khi xem qua Giao diện LCD.
Vì vậy, ngoài các chân trên, chúng ta đã kết nối các chân dữ liệu (D0-D7) của LCD với vi điều khiển Cổng 2 (P2_0 - P2_7). Và điều khiển các chân RS, RW và E vào chân 12,13,14 (chân 2,3,4 của cổng 3) tương ứng của vi điều khiển.
PIN 2 (VDD) và PIN 15 (Nguồn cung cấp đèn nền) của màn hình LCD được kết nối với điện áp (5v), và PIN 1 (VSS) và PIN 16 (Đèn nền nền) được kết nối với đất.
Chân 3 (V0) được nối với điện áp (Vcc) thông qua một biến trở 10k để điều chỉnh độ tương phản của LCD. Chân giữa của biến trở được nối với PIN 3 và hai chân còn lại nối với nguồn điện áp và nối đất.
Giải thích mã
Tôi đã cố gắng giải thích mã thông qua các nhận xét (trong chính mã).
Như tôi đã giải thích trước đó về chế độ lệnh và chế độ dữ liệu, bạn có thể thấy rằng trong khi gửi lệnh (hàm lcd_cmd), chúng tôi đã đặt RS = 0, RW = 0 và xung CAO đến THẤP được cấp cho E bằng cách đặt nó là 1, sau đó là 0. Ngoài ra khi gửi dữ liệu (function lcd_data) tới LCD, chúng ta đã đặt RS = 1, RW = 0 và xung HIGH đến LOW được cấp cho E bằng cách đặt nó từ 1 đến 0. Hàm msdelay () đã được tạo để tạo độ trễ tính bằng mili giây và được gọi thường xuyên trong chương trình, nó được gọi để mô-đun LCD có thể có đủ thời gian để thực hiện các hoạt động và lệnh bên trong.
Vòng lặp while đã được tạo để in chuỗi, hàm này đang gọi hàm lcd_data mỗi lần để in một ký tự cho đến ký tự cuối cùng (null terminator- '\ 0').
Chúng tôi đã sử dụng hàm lcd_init () để chuẩn bị sẵn sàng màn hình LCD bằng cách sử dụng các lệnh đặt trước (đã giải thích ở trên).