Chào tháng 10
Cầu Long Biên
Slide 3
Hà Nội

Điều khiển LCD sử dụng Vi điều khiển 8051

Ngày nay, 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 VĐK. 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

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

}

 

 

   

Điều khiển hiển thị LCD sử dụng Vi điều khiển 8051 phần 2

Điều khiển hiển thị LCD sử dụng Vi điều khiển 8051 phần 2

: 01/01/1970
Ở phần 1 chúng ta đã biết cách sử dụng các hàm điều khiển LCD được các nhóm lập trình phát triển sẵn và điều khiển hiện thị 1 dòng chứ lên LCD. Phần 2 sẽ giúp chúng ta nắm bắt thêm các kỹ năng về vị trí để điều khiển hiển thị LCD. Read More
Hướng dẫn lập trình và mô phỏng PLC S7-200

Hướng dẫn lập trình và mô phỏng PLC S7-200

: 01/01/1970
Hướng dẫn lập trình và mô phỏng PLC S7-200 của siemens với phần mềm Step7-micro win và phần mềm S7-200 Similator Read More
Điều khiển máy trộn

Điều khiển máy trộn

: 01/01/1970
Bài tập điều khiến máy trộn 2 hóa chất để tạo thành 1 hỗn hợp. Read More
Điều khiển đèn giao thông tại ngã tư bằng PLC S7-200

Điều khiển đèn giao thông tại ngã tư bằng PLC S7-200

: 01/01/1970
Lập trình PLC S7-200 điều khiển đèn giao thông tại ngã tư với yêu cầu đèn Đỏ sáng 40s, đèn Xanh sáng 35s, đèn Vàng sáng 5s. Read More
Điều khiển bãi xe ô tô tự động bằng PLC

Điều khiển bãi xe ô tô tự động bằng PLC

: 01/01/1970
Điều khiển bãi đỗ xe ô tô tự động có sức chứa 100 xe với yêu cầu: Khi có xe vào thì mở barrier vào, có xe ra thì mở barier ra, khi bãi xe đầy thì bật đèn báo, và từ chối xe vào, xe ra bình thường Read More