- IC điều khiển LCD ma trận 16x2 HD44780:
- Hiển thị một ký tự tùy chỉnh trên màn hình LCD 16x2:
- Giải thích về lập trình và làm việc:
- Kết nối và kiểm tra mạch:
Trong hướng dẫn trước của chúng tôi, chúng tôi đã học Cách giao diện màn hình LCD 16 * 2 với Vi điều khiển PIC. Chúng tôi khuyên bạn nên xem qua nó trước khi tiếp tục, nếu bạn là người mới bắt đầu sử dụng vi điều khiển PIC. Trước đây chúng ta cũng đã tìm hiểu cơ bản về PIC sử dụng chương trình nhấp nháy LED và bộ định thời trong Vi điều khiển PIC. Bạn có thể xem ở đây tất cả các hướng dẫn về Học vi điều khiển PIC bằng trình biên dịch MPLABX và XC8.
Trong hướng dẫn này, hãy để chúng tôi làm cho nó thú vị hơn bằng cách tạo các ký tự tùy chỉnh của riêng chúng tôi và hiển thị chúng trên màn hình LCD bằng Vi điều khiển PIC PIC16F877A. Ngoài ra, có một số ký tự tùy chỉnh được sử dụng chủ yếu được xác định trước do chính vi mạch HD44780A đưa ra, chúng ta cũng sẽ xem cách chúng ta có thể sử dụng chúng. Như đã giải thích trong hướng dẫn trước của chúng tôi, màn hình LCD của chúng tôi có bộ điều khiển Hitachi HD44780 được nhúng trên đó giúp chúng tôi hiển thị các ký tự. Mỗi ký tự mà chúng tôi hiển thị đã được xác định trước bên trong ROM của HD44780 IC. Chúng ta sẽ tìm hiểu về IC điều khiển LCD HD44780, trước khi hiển thị ký tự trên LCD.
IC điều khiển LCD ma trận 16x2 HD44780:
Để hiển thị một ký tự tùy chỉnh, bằng cách nào đó chúng ta phải nói với IC rằng ký tự tùy chỉnh sẽ trông như thế nào. Để làm được điều đó, chúng ta nên biết về Ba loại Ký ức hiện diện bên trong IC điều khiển LCD HD44780:
Bộ tạo ký tự ROM (CGROM): Nó là bộ nhớ chỉ đọc, như đã nói trước đó, chứa tất cả các mẫu của các ký tự được xác định trước bên trong nó. ROM này sẽ khác nhau tùy theo từng loại IC Giao diện và một số có thể có một số ký tự tùy chỉnh được xác định trước với chúng.
Display Data RAM (DDRAM): Đây là bộ nhớ truy cập ngẫu nhiên. Mỗi khi chúng ta hiển thị một ký tự, mẫu của nó sẽ được lấy từ CGROM và chuyển sang DDRAM và sau đó sẽ được đưa lên màn hình. Nói một cách đơn giản, DDRAM sẽ có các mẫu của tất cả các ký tự hiện đang được hiển thị trên Màn hình LCD. Bằng cách này cho mỗi chu kỳ, IC không cần lấy dữ liệu từ CGROM và giúp nhận được tần suất cập nhật ngắn
Bộ tạo ký tự RAM (CGRAM): Đây cũng là bộ nhớ truy cập ngẫu nhiên, vì vậy chúng ta có thể ghi và đọc dữ liệu từ nó. Như tên của nó, bộ nhớ này sẽ là bộ nhớ có thể được sử dụng để tạo ký tự tùy chỉnh. Chúng ta phải tạo một mẫu cho ký tự và viết nó trong CGRAM, mẫu này có thể được đọc và hiển thị trên Màn hình khi được yêu cầu.
Bây giờ, vì chúng ta đã hiểu cơ bản về các loại Bộ nhớ có trong IC giao diện HD44780. Chúng ta hãy xem qua biểu dữ liệu của nó để hiểu thêm một chút.
Như, biểu dữ liệu ngụ ý, HD44780 IC đã cung cấp 8 Vị trí để lưu trữ các mẫu tùy chỉnh của chúng tôi trong CGRAM, ngoài ra ở bên phải chúng ta có thể thấy rằng có một số ký tự được xác định trước cũng có thể được hiển thị trên Màn hình LCD của chúng tôi. Hãy để chúng tôi xem chúng tôi có thể làm điều đó như thế nào.
Hiển thị một ký tự tùy chỉnh trên màn hình LCD 16x2:
Để hiển thị một ký tự tùy chỉnh, trước tiên chúng ta phải tạo một mẫu cho nó và sau đó lưu nó vào CGRAM. Vì chúng ta đã có sẵn các hàm thư viện nên sẽ dễ dàng thực hiện việc này bằng một số lệnh đơn giản. Đây là Thư viện cho các hàm LCD, nhưng ở đây chúng tôi đã sao chép-dán tất cả các hàm Thư viện trong chính chương trình, vì vậy không cần đưa tệp tiêu đề này vào chương trình của chúng tôi. Ngoài ra, hãy xem bài viết này để biết LCD cơ bản hoạt động và các sơ đồ chân của nó.
Bước đầu tiên là tạo một mẫu hoặc ký tự tùy chỉnh. Như chúng ta biết, mỗi ký tự là sự kết hợp của 5 * 8 chấm. Chúng ta phải chọn điểm (pixel) nào nên tăng cao và điểm nào nên ở mức thấp. Đơn giản chỉ cần vẽ một hộp như bên dưới và tô bóng các vùng dựa trên nhân vật của bạn. Nhân vật của tôi ở đây là một người đàn ông dính (hy vọng nó giống như một). Sau khi được tô bóng, bạn chỉ cần viết giá trị nhị phân tương đương của mỗi byte như hình dưới đây.
Chỉ cần đặt '1' vào vùng được tô bóng và '0' trên vùng không được tô bóng cho mỗi byte, và đó là mẫu tùy chỉnh của chúng tôi đã sẵn sàng. Tương tự, tôi đã tạo 8 mã mẫu tùy chỉnh cho 8 không gian bộ nhớ của chúng tôi, trình bày nó là CGROM. Chúng được liệt kê trong bảng dưới đây.
S.NO: |
Nhân vật tùy chỉnh |
Mã mẫu |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
số 8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Lưu ý: Không bắt buộc phải tải tất cả 8 khoảng trắng được cung cấp trong CGRAM.
Giải thích về lập trình và làm việc:
Bây giờ mã mẫu của chúng ta đã sẵn sàng, chúng ta chỉ cần tải chúng vào CGRAM của LCD và hiển thị chúng bằng vi điều khiển PIC. Để tải chúng vào CGRAM, chúng ta có thể tạo một mảng 5 * 8 các phần tử và tải từng byte bằng cách sử dụng ' vòng lặp for '. Mảng mã mẫu được hiển thị bên dưới:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Mã cho không gian bộ nhớ CGRAM 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0b00000, // Mã cho Vùng nhớ CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Mã cho vùng nhớ CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000, // Mã cho bộ nhớ CGRAM không gian 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Mã cho không gian bộ nhớ CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Mã cho không gian bộ nhớ CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Mã vùng nhớ CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Mã vùng nhớ CGRAM 8};
Mỗi không gian bộ nhớ được tải với mẫu ký tự tôn trọng của nó. Để tải mẫu này vào IC HD44780, bảng dữ liệu của HD44780 phải được tham chiếu, nhưng nó chỉ là các dòng lệnh có thể được sử dụng để đặt địa chỉ của CGRAM
// *** Nạp char tùy chỉnh vào CGROM *** ////// Lcd_Cmd (0x04); // Đặt địa chỉ CGRAM Lcd_Cmd (0x00); //.. đặt Địa chỉ CGRAM for (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Quay lại Trang chủ Lcd_Cmd (2); //.. quay lại Trang chủ // *** Đã hoàn tất tải char tùy chỉnh *** //////
Ở đây, bên trong ' vòng lặp for' mỗi giá trị nhị phân được tải vào CGROM. Sau khi mẫu được tải, các ký tự tùy chỉnh có thể được hiển thị bằng cách chỉ cần gọi vị trí của mẫu bằng cách sử dụng hàm void Lcd_Print_Char (char data) như hình bên dưới.
Lcd_Print_Char (0); // Hiển thị ký tự tùy chỉnh 0 Lcd_Print_Char (1); // Hiển thị ký tự tùy chỉnh 1 Lcd_Print_Char (2); // Hiển thị ký tự tùy chỉnh 2 Lcd_Print_Char (3); // Hiển thị ký tự tùy chỉnh 3 Lcd_Print_Char (4); // Hiển thị ký tự tùy chỉnh 4 Lcd_Print_Char (5); // Hiển thị ký tự tùy chỉnh 5 Lcd_Print_Char (6); // Hiển thị ký tự tùy chỉnh 6 Lcd_Print_Char (7); // Hiển thị ký tự tùy chỉnh 7
In ký tự đặc biệt được xác định trước:
IC HD44780 có một số ký tự đặc biệt được xác định trước được lưu trữ trong DDROM. Các ký tự này có thể được in trực tiếp lên màn hình bằng cách tham chiếu đến giá trị nhị phân của nó trong biểu dữ liệu.
Ví dụ: Giá trị nhị phân của ký tự "ALPHA" là 0b11100000. Cách lấy điều này có thể được hiểu trong hình dưới đây, tương tự như vậy bạn có thể nhận giá trị cho bất kỳ ký tự đặc biệt nào được xác định trước trong IC.
Khi giá trị nhị phân được biết, ký tự tương ứng có thể được in ra màn hình bằng cách sử dụng hàm void Lcd_Print_Char (char data) như hình dưới đây, Lcd_Print_Char (0b11100000); // giá trị nhị phân của alpha từ bảng dữ liệu
Các mã hoàn chỉnh của dự án này được đưa ra dưới đây trong phần Mã, cũng kiểm tra các chi tiết video giải thích ở phần cuối của hướng dẫn này.
Kết nối và kiểm tra mạch:
Dự án này không có bất kỳ yêu cầu phần cứng bổ sung nào, chúng tôi chỉ sử dụng các kết nối tương tự từ hướng dẫn giao diện LCD trước đó và sử dụng cùng một bảng mà chúng tôi đã tạo trong Hướng dẫn nhấp nháy đèn LED. Như mọi khi, chúng ta hãy mô phỏng chương trình bằng Proteus để xác minh đầu ra của chúng ta.
Khi chúng ta đã chạy mô phỏng như mong đợi, hãy trực tiếp ghi mã vào thiết lập Phần cứng của chúng ta. Đầu ra của chương trình sẽ như thế này:
Vì vậy, đó là cách bạn có thể Hiển thị bất kỳ Ký tự tùy chỉnh nào trên màn hình LCD 16x2 bằng Vi điều khiển PIC với trình biên dịch MPLABX và XC8. Ngoài ra, hãy xem loạt bài học đầy đủ về vi điều khiển PIC của chúng tôi tại đây.