Site icon Tài liệu miễn phí cho Giáo viên, học sinh.

LCD giao tiếp với vi điều khiển

Lập trình giao tiếp giữa vi điều khiển Pic và Lcd

Màn hình tinh thể lỏng hay LCD (Liquid crystal display)

Đây là loại thiết bị hiển thị cấu tạo bởi các tế bào (các điểm ảnh) chứa tinh thể lỏng có khả năng thay đổi tính phân cực của ánh sáng và do đó thay đổi cường độ ánh sáng truyền qua khi kết hợp với các kính lọc phân cực. Chúng có ưu điểm là phẳng, cho hình ảnh sáng, chân thật và tiết kiệm năng lượng.

Ở đây chúng ta chỉ đề cập đến module Text LCD trong lập trình vi điều khiển. Các module này có kích thước lớn nhỏ khác nhau và thường có các tên gọi LCD Số ký tự x số dòng. Ví dụ: LCD 16×2 – có nghĩa là màn hình lcd này có 16 ký tự và 2 dòng.

Hình ảnh thực tế của LCD 16×2

Hình ảnh của LCD 16×2, trên phần mềm Proteus

Bạn thấy trên lcd có 8 bit dữ liệu từ D0 đến D7, bạn có hai sự lựa chọn cho việc kết nối LCD với vi điều khiển (config), một là kết nối truyền dữ liệu 4 bit (config 4bit), hai là truyền dữ liệu 8 bit (config 8bit). Trong bài hướng dẫn này mình chia sẻ sơ đồ kết nối truyền dữ liệu 4 bit, bạn xem hình bên dưới sẽ rõ hơn:

Kết nối LCD 16×2 với vi điều khiển pic 16f877A theo kiểu 4bit

Trong sơ đồ trên ta chỉ sử dụng 4 bit từ D4-D7 (data lines) để truyền dữ liệu  từ vi điều khiển pic 16f877A đến LCD 16×2. Hai chân RS, E (control lines) dùng để điều khiển LCD, VEE kết nối với một biến trở để điều chỉnh độ sáng của LCD.

Như vậy, chúng ta đã biết khái niệm về LCD và cách kết nối chúng với vi điều khiển, sau đây chúng ta sẽ học cách lập trình trên vi điều khiển để xuất dữ liệu lên LCD bằng chương trình mikaroC compiler . Trên trình biên dịch mikroC đã hỗ trợ thư viện LCD, bạn chỉ cần định nghĩa port và gọi vài hàm là có thể hoàn thành việc xuất dữ liệu. Sau đây là các hàm trong thư viện LCD trên mikroC compiler:

Trước tiên chúng ta cần thiết đặt các data lines và control lines như sau:

// LCD module connections
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
// End LCD module connections

Sau đây là một Project hoàn chỉnh về việc xuất dữ liệu ra LCD:

/*Project: Hoc lap trinh giao tiep LCD 4bit, ket noi RD0..RD3 den D4...D7 cua LCD
 RD4 ket noi RS, RD5 ket noi E.
 MCU: pic 16f877A
 Author: Huynh Minh Trung
web: http://giaoan.link
 */
 
// LCD module connections
sbit LCD_RS at RD4_bit;
sbit LCD_EN at RD5_bit;
sbit LCD_D4 at RD0_bit;
sbit LCD_D5 at RD1_bit;
sbit LCD_D6 at RD2_bit;
sbit LCD_D7 at RD3_bit;
sbit LCD_RS_Direction at TRISD4_bit;
sbit LCD_EN_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD0_bit;
sbit LCD_D5_Direction at TRISD1_bit;
sbit LCD_D6_Direction at TRISD2_bit;
sbit LCD_D7_Direction at TRISD3_bit;
// End LCD module connections

unsigned char *text;
void main() {
TRISD = 0x00; //Trisd as output
PORTD = 0x00; //Clear port d
text="CHAO BAN DEN";

Lcd_Init(); //Khoi tao LCD
Lcd_Cmd(_LCD_BLINK_CURSOR_ON); //Con tro nhap nhay
Delay_ms(2000);
Lcd_Out(1,2,text); //Xuat du lieu tu bien text ra vi tri dong 1, cot 1
Lcd_Cmd(_LCD_SECOND_ROW); //Di chuyen con tro den dong 2
Delay_ms(2000);
Lcd_out(2,1,"dientudieukhien"); //Xuat chuoi du lieu ra dong 2, cot 2
}

Video mô phỏng bằng chương trình Proteus về xuất dữ liệu LCD:
Bạn có thể tải project theo link bên dưới về tham khảo, gồm code c, file mô phỏng bằng proteus:

Exit mobile version