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
}