Lập trình giao tiếp LCD16x2 cho AVR trên CodeVisionAVR
Chào các bạn, hôm nay chúng ta tìm hiểu về LCD16x2 và làm thế nào để giao tiếp với nó. LCD được cấu tạo theo kiểu module có chip driver và màn hình LCD, đèn nền... Việc giao tiếp với chip driver là giao tiếp song song, có 2 chế độ giao tiếp là 8bit và 4bit, ta sử dụng kiểu 4bit vì ít chân giao tiếp hơn. Tại sao nó là LCD16x2 là vì màn hình LCD hiển thị được 16 ký tự trên một dòng và có 2 dòng, tương tự 16x4... lưu ý LCD12864 là màn hình sử dụng điểm ảnh pix có 128 điểm hàng ngang và 64 điểm hàng dọc dạng matrix. Có rất nhiều loại LCD nhưng bài hôm nay sẽ nói về LCD16x2.
Trong CodeVisionAVR được tích hợp sẵn thư viện cho LCD, chúng ta chỉ việc khai báo các hàm và sử dụng chúng. Ngoài ra CVAVR còn cho ta thay đổi cũng như cài đặt chân giao tiếp trong Setting của Project, việc cài đặt các bạn làm như sau:
B1: Vào Project chọn Configure trên thanh trình đơn của phần mềm
B2: Chọn các Tab tương ứng như hình:
Các bạn chọn các chân giao tiếp với LCD tươg ứng, chú ý là không được sử dụng các chân đã set cho các kết nối khác, ở trên sử dụng PORTD của ATmega8 làm ví dụ.
B3: Cuối cùng bấm OK để hoàn tất thay đổi, rồi các bạn chuyển sang phần code.
Ngoài thư viện của chip ta sẽ chèn thêm 2 thư viện là alcd.h và delay.h cả hai thư viện này đều dùng cho giao tiếp LCD.
Các hàm giao tiếp LCD trong thư viện alcd.h:
lcd_init(16); //Hàm khởi tạo LCD, ta truyền tham số 16 nghĩa là khởi tạo cho LCD16x2
lcd_puts("Nội dung"); //Hàm truyền chuỗi nội dung lên LCD
lcd_putchar(ký_tự); //Hàm truyền 1 ký tự lên LCD
lcd_gotoxy(X,Y); //Hàm chọn vị trí hiển thị, trong đó X là vị trí từ 0-15, Y là dòng 0-1
lcd_clear(); //Hàm xóa trắng màn hình
Code mẫu sẽ như sau:
#include <mega8.h> //Thu vien chip ATmega8
#include <delay.h> //Thu vien ham delay
#include <alcd.h> //Thu vien ham LCD
void main() //Chuong trinh chinh
{
lcd_init(16); //Khoi tao LCD 16x2
delay_ms(500); //Tao tre
lcd_puts("SangTaoClub.Net"); //Gui chuoi len LCD
delay_ms(1000);
lcd_clear(); //Xoa man hinh
lcd_puts("Test LCD for AVR");
delay_ms(500);
lcd_gotoxy(0,1);//Tro toi vi tri dau tien dong 2
lcd_puts("0123456789");
delay_ms(500);
lcd_gotoxy(13,1);
lcd_puts("OK!");
while(1); //CPU stop
}
Mạch mô phỏng ví dụ:
OK! Các bạn tải code và mô phỏng ví dụ trên về trong File đính kèm cuối bài viết.
Tải về đính kèm: