Display a string on 16*2 LCD using 8051in 4-bit mode.

  

Code :

#include<reg51.h>                                            //  Include 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.
void display(unsigned char array[ ]);           // Function definition for an array.
sbit en = P2^7;                                      // Set the port where reset pin of lcd is connected.
sbit rs = P2^5;                                   // Set the port where enable pin of lcd is connected.
void main()                                        // Main function starts.       
{
lcd_init();                                    //Initially lcd must be initialized.
display("Chinmay");                   //Transfer of data into array.
delay(100);                                 //delay function calling.
}
void display(unsigned char array[ ])              // display function starts.
{
int i;
for(i=0;array[i]!='\0';i++)                   // loop for sending all the character.
{
lcd_data(array[i]);      //one by one character from array is being sent to lcd.
}
}
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).

     

String 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