Display a character on 16*2 LCD using 8051in 4-bit mode.
Code :
#include<reg51.h> // Including 8051 library
#define Data P2 // Defining data port 2 for data transfer.
void lcd_cmd(unsigned char cmd); // Function definition for commands configuration in lcd.
#define Data P2 // Defining data port 2 for data transfer.
void lcd_cmd(unsigned char cmd); // Function definition for commands configuration in lcd.
void lcd_data(unsigned char d); //Function definition for data configuration in lcd.
void lcd_init(); //Function definition for lcd initialization.
void delay(int t); // Function definition for delay.
sbit rs = P2^5; // Set the port where reset pin of lcd is connected.
sbit en = P2^7; // Set the port where enable pin of lcd is connected.
void main() // Main function starts.
{
lcd_init(); //Initially lcd must be initialized.
lcd_data('A'); //Transfer of data.
while(1); //Infinite while loop.
}
void lcd_init() //lcd initialization starts.
{
lcd_cmd(0x28); // 4-bit mode.
lcd_cmd(0x01); //clear the display.
lcd_cmd(0x0F); //display on cursor blinking.
lcd_cmd(0X06); // data entry mode.
lcd_cmd(0X80); // 1st line.
}
void lcd_cmd(unsigned char cmd) //lcd commands initialization starts.
{
Data = cmd>>4; // Since the lcd is connected in 4-bit mode we have to send half command first.
rs = 0; // reset pin =0 because command register needs to be selected.
en = 1; //enable pin.
delay(1); //delay calling.
en = 0; //enable pin.
delay(1); //delay calling.
Data = cmd & 0X0F; // 2nd half command is added with 0F and sent now.
rs = 0; // reset pin =0 because command register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
}
void lcd_data(unsigned char d) //lcd data initialization starts.
{
Data = d>>4; // Since the lcd is connected in 4-bit mode we have to send half data first.
rs = 1; // reset pin =1 because data register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
Data = d & 0X0F; // 2nd half command is added with 0F and sent now.
rs = 1; // reset pin =1 because data register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
}
void delay(int t) // delay function.
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<1275;j++);
}
void delay(int t); // Function definition for delay.
sbit rs = P2^5; // Set the port where reset pin of lcd is connected.
sbit en = P2^7; // Set the port where enable pin of lcd is connected.
void main() // Main function starts.
{
lcd_init(); //Initially lcd must be initialized.
lcd_data('A'); //Transfer of data.
while(1); //Infinite while loop.
}
void lcd_init() //lcd initialization starts.
{
lcd_cmd(0x28); // 4-bit mode.
lcd_cmd(0x01); //clear the display.
lcd_cmd(0x0F); //display on cursor blinking.
lcd_cmd(0X06); // data entry mode.
lcd_cmd(0X80); // 1st line.
}
void lcd_cmd(unsigned char cmd) //lcd commands initialization starts.
{
Data = cmd>>4; // Since the lcd is connected in 4-bit mode we have to send half command first.
rs = 0; // reset pin =0 because command register needs to be selected.
en = 1; //enable pin.
delay(1); //delay calling.
en = 0; //enable pin.
delay(1); //delay calling.
Data = cmd & 0X0F; // 2nd half command is added with 0F and sent now.
rs = 0; // reset pin =0 because command register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
}
void lcd_data(unsigned char d) //lcd data initialization starts.
{
Data = d>>4; // Since the lcd is connected in 4-bit mode we have to send half data first.
rs = 1; // reset pin =1 because data register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
Data = d & 0X0F; // 2nd half command is added with 0F and sent now.
rs = 1; // reset pin =1 because data register needs to be selected.
en = 1; // enable pin.
delay(1); // delay calling.
en = 0; // enable pin.
delay(1); // delay calling.
}
void delay(int t) // delay function.
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<1275;j++);
}
: Circuit Diagram
A 16*2 LCD is connected to AT89C51RD2(8051) microcontroller. Since the lcd is connected in 4-bit mode only D4-D7 data lines needs to be connected to controller ports.
rs(register select) pin is connected to port(P2.5).
rs = 0 - command mode
rs = 1 - data mode
en(enable)pin is connected to port(P2.7).
rs = 1 - data mode
Character displayed on lcd :
Initialization of lcd takes place. Once it is done configuring all the set modes of lcd . It moves on to sending data through defined port by user ( P2 ) in our case.
0x01 - clear the display.
0x28 - 4 bit mode.
0x38 - 8 bit mode.
0x0F - display on cursor blinking.
0x0C - display on cursor on.
0x06 - data entry mode.
0x80 - 1st line.
0xC0 - 2nd line.
0x18 - shift to right.
0x1C - shift to left.
User can change the display as per their requirement using above mentioned codes.
Comments
Post a Comment