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

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

Ở 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.

Bài liên quan: Điều khiển hiển thị LCD sử dụng Vi điều khiển 8051 phần 1

 

LCD 16x2 có 2 hàng, mỗi hàng hiển thị được 16 ký tự. Trong các hàm điều khiển hiển thị LCD có 1 hàm xác định vị trí hiển thị như sau

LCD_Gotoxy(x,y);

Trong đó x là vị trí hiển thị ký tự trên hàng, y là vị trí hàng (y = 0 là hàng trên, y = 1 là hàng dưới)

Ví dụ:

LCD_Gotoxy(3,0);

Thì ký tự sẽ bắt đầu được hiển thị từ vị trí thứ 3 ở hàng trên

LCD_Gotoxy(2,1);

Thì ký tự sẽ bắt đầu được hiển thị từ vị trí thứ 2 ở hàng dưới

Vậy muốn hiển thị một chữ ở giũa màn hình trên 1 hàng thì sao? Ví dụ muốn hiển thị chữ NHIET DO ở giữa màn hình ở hàng trên:

Ta thấy chứ NHIET DO có 8 ký tự (Kể cả dấu cách ở giữa 2 chữ). Như vậy còn 8 ký tự không hiển thị, muốn hiển thị chữ NHIET DO ở giữa thì mối bên sẽ có 4 ô trắng nên chữ sẽ bắt đầu hiển thị từ ô số 5. Lệnh của chúng ta như sau:

          LCD_Gotoxy(5,0);  //Hiển thị bắt đầu từ ô số 5 hàng trên

          LCD_Puts("NHIET DO");  // Hiển thị chữ NHIET DO

Bài tập ví dụ:

 Hiển thị họ và tên ở hàng trên, ngày sinh ở hàng dưới

Sơ đồ:

 

 

Chương trì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);

          LCD_Clear();                         //Xoa man hinh

LCD_Gotoxy(3,0);                 //Vị trí 3 hàng trên

          LCD_Puts("LY THAI TO");  // Hiển thị tên

delay_ms(1000);

LCD_Gotoxy(5,1);                 //Vị trí 5 hàng dưới

          LCD_Puts("8-3-974");          // Hien thị ngay sinh

while(1);                            //ko lam gi ca

}

 

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

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

: 01/01/1970
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 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