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.
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++);
}

 :  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).

     


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