Màn hình là bộ phận cần thiết của bất kỳ máy móc nào cho dù đó là bất kỳ thiết bị gia dụng hay máy công nghiệp nào. Màn hình không chỉ hiển thị các tùy chọn điều khiển để vận hành máy mà còn hiển thị trạng thái và đầu ra của tác vụ được thực hiện bởi máy đó. Có nhiều loại màn hình được sử dụng trong điện tử như màn hình 7 đoạn, màn hình LCD 16x2, màn hình cảm ứng TFT, màn hình OLED, v.v.
Màn hình LCD 16x2 là mô-đun hiển thị cơ bản nhất và cũng được sử dụng trong một số thiết bị điện tử nhỏ như máy tính, đồng hồ kỹ thuật số, v.v. Chúng tôi đã thực hiện rất nhiều dự án sử dụng LCD 16x2 bao gồm giao tiếp cơ bản với các vi điều khiển khác:
- Giao diện LCD với Vi điều khiển 8051
- Giao diện LCD với Vi điều khiển ATmega32
- Giao diện LCD với Vi điều khiển PIC
- Giao diện LCD 16x2 với Arduino
- Giao diện LCD 16x2 với Raspberry Pi bằng Python
Trong hướng dẫn này, chúng ta sẽ thấy cách giao diện màn hình LCD 16x2 với vi điều khiển Atmega16 AVR và hiển thị thông báo chào mừng đơn giản.
Thành phần bắt buộc
- Atmega16
- Mô-đun LCD 16x2
- Người nhảy
- Breadboard
Sơ đồ mạch
Lập trình Atmega16 cho màn hình LCD 16x2
Lập trình không yêu cầu bất kỳ thư viện bên ngoài nào. Ở đây, Atmega16 được lập trình bằng USBASP và Atmel Studio7.0. Chương trình hoàn chỉnh và Video làm việc được đưa ra ở cuối dự án, chỉ cần tải lên chương trình trong Atmega16 và xoay 10k POT để điều chỉnh độ sáng của màn hình LCD.Ban đầu xác định Tần số CPU và bao gồm các thư viện cần thiết đi kèm với Gói Atmel Studio, chẳng hạn như để truy cập các chân IO và
Xác định chân RS và EN của màn hình LCD trong chương trình. Các Ghim RS được sử dụng để chọn dữ liệu và thanh ghi lệnh. Ghim kích hoạt sẽ chốt dữ liệu.
#define en PA3 #define rs PA2
Cũng xác định rằng PORT nào của Atmega16 sẽ được sử dụng để giao tiếp với LCD. Ở đây, PORTA được sử dụng.
#define lcdDirection DDRA #define lcdPort PORTA
Bước tiếp theo là xây dựng một hàm sẽ chấp nhận một lệnh bằng cách truyền một tham số. Có rất nhiều lệnh LCD HEX. Các lệnh Hex được sử dụng để xác định chức năng của LCD. Vì chúng tôi đang sử dụng Chế độ 4 bit của LCD, byte (8 bit) sẽ được gửi thành hai gói. Một gói sẽ là Upper Nibble (4-bit) và gói khác sẽ là Lower Nibble (4-bit).
void lcdCommand (lệnh char không dấu) { lcdPort = (lcdPort & 0x0F) - (lệnh & 0xF0); lcdPort & = ~ (1 <
Bước tiếp theo sẽ là chấp nhận các ký tự và gắn nó vào cổng của màn hình LCD. Các ký tự nhận được sau đó được gửi đến màn hình LCD bằng nibble. Hàm nhận ký tự bằng cách sử dụng tham số truyền và sau đó lấy ký tự trên và dưới. Chân 'rs' được đặt thành cao cho thanh ghi dữ liệu và sau đó một xung tăng được gửi để chốt dữ liệu. Tương tự, nibble thấp hơn được gửi bằng cách thay đổi giá trị của enable và gửi xung tăng cho enable.
void lcdChar (chuỗi ký tự không dấu) { lcdPort = (lcdPort & 0x0F) - (chuỗi & 0xF0); lcdPort - = (1 <
Hàm này chỉ chuyển đổi ký tự thành chuỗi và có thể được sử dụng trong chương trình sau này khi cần viết chuỗi.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Bây giờ một chức năng được viết chỉ để xóa màn hình. Bạn chỉ cần gửi lệnh 01 trong HEX và sau đó chỉ cần đặt con trỏ về vị trí ban đầu.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Bây giờ trong chức năng chính, màn hình LCD được khởi tạo. Ban đầu thiết lập hướng PORT cho màn hình LCD để giao diện. Ở đây, PORT được đặt là OUTPUT vì vậy hãy đặt FF.
lcdDirection = 0xFF; _delay_ms (20)
Sau đó, đặt màn hình LCD ở chế độ 4-bit bằng cách gửi 02 ở dạng hex. Cũng gửi 28 ở dạng hex để đặt nó ở 2 dòng, pixel ma trận 15x7 ở chế độ 4 bit.
lcdCommand (0x02); lcdCommand (0x28);
Các 0c lệnh và 06 được sử dụng để kiểm soát vị trí con trỏ. Và cuối cùng chỉ cần xóa màn hình bằng cách gửi 01 trong hex. Thao tác này sẽ kết thúc quá trình khởi tạo LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Sau khi khởi tạo xong chỉ cần kiểm tra màn hình LCD bằng cách gửi một chuỗi. Ở đây chúng tôi đang gửi một chuỗi " Giao diện LCD " ở hàng thứ nhất.
lcdString ("Giao diện LCD");
Sau đó, di chuyển con trỏ đến hàng tiếp theo bằng cách gửi lệnh c0 trong hex. Và cuối cùng trên vị trí này, hãy viết chuỗi "With Atmega1 6".
lcdCommand (0xC0); lcdString ("Với Atmega16");
Phần này kết thúc hướng dẫn đầy đủ về Giao diện màn hình LCD 16x2 với Atmega16. Lưu ý rằng nếu bạn không nhận được bất kỳ hình ảnh hoặc pixel nào thì hãy kiểm tra hệ thống dây điện của bạn theo mã và sơ đồ mạch hoặc thay đổi giá trị của POT được gắn vào chân V0 của LCD. Nếu bạn có bất kỳ nghi ngờ hoặc đề xuất nào thì bạn có thể liên hệ với chúng tôi bằng cách viết thư cho diễn đàn của chúng tôi hoặc bình luận bên dưới.