Giới thiệu
LCD là tên viết tắt của (Liquid Crystal Display) hay còn được biết đến cái tên dân dã hơn là màn hình tinh thể lỏng. Có rất nhiều loại màn hình LCD khác nhau. Với những ứng dụng nhỏ thường sử dụng loại màn hình cỡ nhỏ đơn giản là loại LCD16x2. Các ký tự được hiển thị trên màn hình với 2 hàng, mỗi hàng hiển thị được 16 ký tự.
Chức năng các chân
Lập trình giao tiếp LCD 16x2
Nhìn chung lập trình điều khiển LCD là một công việc khá phức tạp. Để lập trình được các hàm khởi tạo, điều khiển LCD cần phải có khả năng về lập trình nhất định. Tuy nhiên LCD cũng là một thiết bị cơ bản được sử dụng nhiều trong các ứng dụng và có nhiều người lập trình quan tâm. Do đó có rất nhiều người lập trình, các đội ngũ phát triển đã viết ra nhưng hàm, chương trình con để điều khiển LCD. Đối với những người lập trình ứng dụng chỉ cần sử dụng những hàm được xây dựng sẵn này để sử dụng, đôi khi không nhất thiết phải hiểu sâu về việc xây dựng các hàm này như thế nào. Điều này giống như nhân viên vận hành máy móc chỉ cần biết máy nó làm việc như thế nào là có thể làm được việc còn máy được cấu tạo như thế nào thì không cần phải biết (Tất nhiên nếu biết được thì sẽ tốt hơn)
Sau đây là một số hàm được dùng điều khiển hiển thị LCD
LCD_Init(); //Khởi tạo LCD
LCD_Puts("Nội dung"); //Hàm gửi 1 chuỗi ký tự lên LCD
LCD_PutChar(ký_tự); //Hàm gửi 1 ký tự lên LCD
LCD_Clear(); //Hàm xoá trắng màn hình
LCD_Gotoxy(x,y); //Hàm trỏ tới vị trí cần hiển thị, Trong đó X là vi trí, Y là dòng
Các hàm này đã được xây dựng sẵn, chúng ta chỉ việc copy vào chương trình của mình và sử dụng.
/************************************/
void delay_us(unsigned int t)
{
unsigned int i;
for(i=0;i
}
void delay_ms(unsigned int t)
{
unsigned int i,j;
for(i=0;i
for(j=0;j<125;j++);
}
/**************Ctr giao tiep LCD 16x2 4bit**********************/
void LCD_Enable(void)
{
LCD_EN =1;
delay_us(3);
LCD_EN=0;
delay_us(50);
}
//Ham Gui 4 Bit Du Lieu Ra LCD
void LCD_Send4Bit(unsigned char Data)
{
LCD_D4=Data & 0x01;
LCD_D5=(Data>>1)&1;
LCD_D6=(Data>>2)&1;
LCD_D7=(Data>>3)&1;
}
// Ham Gui 1 Lenh Cho LCD
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_Clear( ) // Ham Xoa Man Hinh LCD
{
LCD_SendCommand(0x01);
delay_us(10);
}
// Ham Khoi Tao LCD
void LCD_Init(){
LCD_Send4Bit(0x00);
delay_ms(20);
LCD_RS=0;
LCD_RW=0;
LCD_Send4Bit(0x03);
LCD_Enable();
delay_ms(5);
LCD_Enable();
delay_us(100);
LCD_Enable();
LCD_Send4Bit(0x02);
LCD_Enable();
LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
LCD_SendCommand( 0x0c); // cho phep hien thi man hinh
LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh
LCD_SendCommand(0x01); // xoa toan bo khung hinh
}
void LCD_Gotoxy(unsigned char x, unsigned char y)
{
unsigned char address;
if(!y)address=(0x80+x);
else address=(0xc0+x);
delay_us(1000);
LCD_SendCommand(address);
delay_us(50);
}
void LCD_PutChar(unsigned char Data) //Ham Gui 1 Ki Tu
{
LCD_RS=1;
LCD_SendCommand(Data);
LCD_RS=0 ;
}
void LCD_Puts (char *s) //Ham gui 1 chuoi ky tu
{
while (*s){
LCD_PutChar(*s);
s++;
}
}
Chúng ta cần quan tâm đến chương trình chính, là nơi chúng ta sử dụng các hàm xây dựng sẵn đó để hiển thị theo yêu cầu của mình.
void main( )
{
LCD_Init( ); //Khoi tao LCD
delay_ms(1000);
LCD_Puts("Truong BTL"); //Gui chuoi len LCD
delay_ms(1000);
while(1); //ko lam gi ca
}
OK!, có 2 cách gửi dữ liệu lên LCD là 8bit và 4bit ta chọn cách gửi 4bit vì ít chân cẳng hơn 8bit, tiết kiệm chân VDK cho các ứng dụng khác.
Thực hành
Sơ đồ như sau:
Chương trình hoàn chỉnh:
#include // Khai báo hàm thư viện
// Khai báo chân giao tiếp cho dễ nhớ khi sử dụng
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_D4 P2_4
#define LCD_D5 P2_5
#define LCD_D6 P2_6
#define LCD_D7 P2_7
// Khai báo các hàm sử dụng trong chương trình
void delay_us(unsigned int t) // Hàm tạo trễ với thời gian nhỏ
{
unsigned int i;
for(i=0;i
}
void delay_ms(unsigned int t) // Hàm tạo trễ với thời gian lớn
{
unsigned int i,j;
for(i=0;i
for(j=0;j<125;j++);
}
//----------------------------------------------------------------
// Các hàm điều khiển LCD
void LCD_Enable(void)
{
LCD_EN =1;
delay_us(3);
LCD_EN=0;
delay_us(50);
}
void LCD_Send4Bit(unsigned char Data) //Ham Gui 4 Bit Du Lieu Ra LCD
{
LCD_D4=Data & 0x01;
LCD_D5=(Data>>1)&1;
LCD_D6=(Data>>2)&1;
LCD_D7=(Data>>3)&1;
}
// Hàm gửi 1 lệnh ra LCD
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_Clear( ) // Hàm xóa màn hình LCD
{
LCD_SendCommand(0x01);
delay_us(10);
}
void LCD_Init( ) // Ham Khoi Tao LCD
{
LCD_Send4Bit(0x00);
delay_ms(20);
LCD_RS=0;
LCD_RW=0;
LCD_Send4Bit(0x03);
LCD_Enable();
delay_ms(5);
LCD_Enable();
delay_us(100);
LCD_Enable();
LCD_Send4Bit(0x02);
LCD_Enable();
LCD_SendCommand( 0x28 ); // giao thuc 4 bit, hien thi 2 hang, ki tu 5x8
LCD_SendCommand( 0x0c); // cho phep hien thi man hinh
LCD_SendCommand( 0x06 ); // tang ID, khong dich khung hinh
LCD_SendCommand(0x01); // xoa toan bo khung hinh
}
void LCD_Gotoxy(unsigned char x, unsigned char y)
{
unsigned char address;
if(!y)address=(0x80+x);
else address=(0xc0+x);
delay_us(1000);
LCD_SendCommand(address);
delay_us(50);
}
void LCD_PutChar(unsigned char Data) //Hàm gửi 1 ký tự
{
LCD_RS=1;
LCD_SendCommand(Data);
LCD_RS=0 ;
}
void LCD_Puts (char *s) //Hàm gửi 1 chuỗi ký tự
{
while (*s)
{
LCD_PutChar(*s);
s++;
}
}
//---CT chính, đây là phần tụ lập trình để hiển thị chữ theo ý muốn
void main ( )
{
LCD_Init(); //Khoi tao LCD
delay_ms(1000);
LCD_Puts(" Truong BTL"); // gửi chuỗi lên LCD
delay_ms(1000);
while(1); //ko lam gi ca
}