Bài 6: Hướng Dẫn Viết Thư Viện LCD16x2 Cho PIC
Có thể bạn quan tâm
Giới thiệu
Thiết bị hiển thị LCD (Liquid Crystal Display) được sử dụng trong rất nhiều các ứng dụng của Vi điều khiển. LCD có rất nhiều ưu điểm so với các dạng hiển thị khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẻ.
Để hiển thị được LCD thì vi điều khiển phải thông qua con chip chuyên dùng thống thường đó là chip HD44780 của Hitachi. Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780) bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết.
Hình 1. Sơ đồ chân của LCD
Bảng 1. Các chân trên module LCD và chức năng của chúng
Vss | Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển. |
Vdd | Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với Vcc = 5V của mạch điều khiển. |
Vee | Chân này dùng để điều chỉnh độ tương phản của LCD. Thông thường điện áp Vee được thay đổi bằng biến trở. |
RS | Chân chọn thanh ghi (Register Select). Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.+ Logic “0”: Bus DB0-DB7 sẽnối với thanh ghi lệnh IR của LCD (ở chế độ”ghi” – write) hoặc nối với bộ đếm địa chỉ của LCD (ởchế độ”đọc” – read) + Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD. |
R/W | Chân chọn chế độ đọc/ghi (Read/Write).+ Logic “0”: LCD hoạt động ởchế độ ghi. + Logic “1”: LCD ở chế độ đọc. |
E | Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E. + Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low to-high transition) ởchân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp |
DB0 -DB7 | Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này :+ Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7. + Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7 Thông thường sẽ dùng chế độ giao tiếp 4bit để tiết kiệm số lượng chân. |
A | Nguồn dương cho đèn nền |
K | GND cho đèn nền |
Giao tiếp với HD44780.
Tiếp theo mình xin hướng dẫn chế độ giao tiếp 4 bit để hiển thị LCD dùng chip HD44780. Theo datasheet HD44780 thì đầu tiên phải cài đặt thông số ban đầu cho LCD trước khi cho nó làm việc, trình tự các bước như sau:
Bảng 2. Khởi tạo thông số ban đầu cho LCD
Bước | Công việc |
0 | Cấp điện cho LCD |
1 | Delay tối thiểu 15ms để điện áp cấp cho LCD lên 4.5V |
2 | Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 1 1 |
3 | Delay tối thiêu 5ms |
4 | Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 1 1 |
5 | Delay tối thiểu 100us |
7 | Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 1 1 |
8 | Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 1 0 |
9 | 1 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 1 12 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 N F * * |
10 | 1 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 0 02 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 1 0 0 0 |
11 | 1 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 0 02 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 0 1 |
12 | 1 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 0 0 02 – Set các bit tương ứng với mức logic: RS R/W DB7 DB6 DB5 DB40 0 0 1 I/D S |
Kết thúc khởi tạo LCD |
Lưu ý:
- N = 0; 1 hàng
- F = 0; 5 × 8 dot font.
- I/D =1 : Tăng
- S=0 : Không dịch.
Thư viện LCD16x2 cho PIC
Thư viện LCD 16×2 đươc viết gồm 2 phần:
- File LCD.h: là file header dùng để khai báo chân LCD sử dụng.
- File LCD_Functions.c: là file chưa các hàm LCD.
LCD.h
Các chân của LCD được kết nối với chân nào của vi điều khiển thì khai báo trong file header này. Ví dụ: Chân E được kết nói với PIN_B5 của PIC…
C
1 2 3 4 5 6 7 8 9 10 | #ifndef _LCD_ #define _LCD_ #define LCD_RS PIN_B3 #define LCD_RW PIN_B4 #define LCD_EN PIN_B5 #define LCD_D4 PIN_D4 #define LCD_D5 PIN_D5 #define LCD_D6 PIN_D6 #define LCD_D7 PIN_D7 #endif |
LCD_Fucntions.c
Trong file này chứa các hàm:
- void LCD_Enable(void): Tạo xung Enable để giao tiếp với LCD.
- void LCD_Send4Bit( unsigned char Data ): Truyền 4bit dữ liệu xuống LCD.
- void LCD_SendCommand (unsigned char command ): Gửi 1 lệnh xuống LCD (Một lệnh thì có 8 bit dữ liệu)
- void LCD_Init (void): Khởi tạo ban đầu cho LCD.
- void LCD_PutChar ( unsigned char Data ): Hiển thị 1 ký tự lên LCD.
- void LCD_Puts (char *s): Hiển thị một chuỗi lên LCD.
- void LCD_Clear(): Xóa màn hình LCD
- void LCD_Gotoxy(unsigned char row, unsigned char col): hiển thị bắt đầu tại vị trí hàng row, cột col
void LCD_Enable(void)
C
1 2 3 4 5 6 7 | void LCD_Enable(void) { output_high(LCD_EN); delay_us(3); output_low(LCD_EN); delay_us(50); } |
void LCD_Send4Bit( unsigned char Data )
C
1 2 3 4 5 6 7 | void LCD_Send4Bit( unsigned char Data ) { output_bit(LCD_D4,Data&0x01); output_bit(LCD_D5,(Data>>1)&1); output_bit(LCD_D6,(Data>>2)&1); output_bit(LCD_D7,(Data>>3)&1); } |
void LCD_SendCommand (unsigned char command )
C
1 2 3 4 5 6 7 | void LCD_SendCommand (unsigned char command ) { LCD_Send4Bit ( command >>4 );/* Gui 4 bit cao */ LCD_Enable () ; LCD_Send4Bit ( command ); /* Gui 4 bit thap*/ LCD_Enable () ; } |
void LCD_Init (void)
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | void LCD_Init (void) { output_low(LCD_RS); output_low(LCD_RW); delay_ms(20); LCD_Send4Bit(0x03); LCD_Enable(); delay_ms(10); LCD_Send4Bit(0x03); LCD_Enable(); delay_ms(10); LCD_Send4Bit(0x03); LCD_Enable(); delay_ms(10); LCD_Send4Bit(0x02); LCD_Enable(); delay_ms(10); LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5×8 //Function Set: 8-bit, 1 Line, 5×7 Dots 0x30 //Function Set: 8-bit, 2 Line, 5×7 Dots 0x38 //Function Set: 4-bit, 1 Line, 5×7 Dots 0x20 //Function Set: 4-bit, 2 Line, 5×7 Dots 0x28 LCD_SendCommand( 0x0C); //Display on Cursor on: 0x0E 0x0F //Display on Cursor off: 0x0C //Display on Cursor blinking: 0x0F LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh Entry Mode LCD_SendCommand( 0x01 ); // Clear Display (also clear DDRAM content) } |
void LCD_PutChar ( unsigned char Data )
C
1 2 3 4 5 6 | void LCD_PutChar ( unsigned char Data ) { output_high(LCD_RS); LCD_SendCommand( Data ); output_low(LCD_RS); } |
void LCD_Puts (char *s)
C
1 2 3 4 5 6 7 8 | void LCD_Puts (char *s) { while (*s) { LCD_PutChar(*s); s++; } } |
void LCD_Clear():
C
1 2 3 4 5 | void LCD_Clear() { LCD_SendCommand(0x01); delay_ms(10); } |
void LCD_Gotoxy(unsigned char row, unsigned char col)
C
1 2 3 4 5 6 7 8 9 10 11 | void LCD_Gotoxy(unsigned char row, unsigned char col) { unsigned char address; if(!row) address = (0x80 + col); else address = (0xC0 + col); delay_us(500); LCD_SendCommand(address); delay_us(50); } |
Mô phỏng Proteus
Hình 3. Sơ đồ mô phỏng trong Proteus |
DOWNLOAD: thư viện LCD
Share this:
Từ khóa » Thư Viện Pic16f877a
-
Thư Viện LCD.c Pic16f877a [Lưu Trữ] - PIC Vietnam
-
BÀI 3 HƯỚNG DẪN TẠO THƯ VIỆN PIC16F877A SCHEMATIC
-
Thư Viện Chương Trình C Cho CCS PIC Bởi LDNam
-
Vi điều Khiền PIC 16F877A PDF - Download Thư Viện Tài Liệu Miên Phí
-
Tong Hop Code Ccs Cho Pic16f877a Picvietnam
-
(PDF) View Full Version : CCS C For PIC16F877A
-
Lập Trình PIC16F877A - TaiLieu.VN
-
Thư Viện CCS? - Dien Tu Viet Nam
-
MPLAB XC8: Lập Trình LCD | Anh Nguyễn - Nvtienanh
-
Lập Trình C Bằng CCS Cho PIC16F877A - Thư Viện Sách Mở
-
537 N4994Tr - Thư Viện Đại Học Kinh Tế - Kỹ Thuật Công Nghiệp
-
Giao Tiếp I2C PIC Với IC Thời Gian Thực DS1307