Sunday, March 18, 2012

Program to interface lcd in 4 bit mode [Embedded systems Lab]

//***Program to interface lcd in 4 bit mode***//
//*** by hiq test equipment ***//


#include<reg52.h>

sbit rs  =P2^0;//initialize rs(Register Select) pin to P2.0
sbit en  =P2^1;//initialize en(Enable) pin to P2.1
sbit db4 =P2^2;//initialize db4  pin to P2.2
sbit db5 =P2^3;//initialize db5  pin to P2.3
sbit db6 =P2^4;//initialize db6  pin to P2.4
sbit db7 =P2^5;//initialize db7  pin to P2.5
       
void init_lcd(void);
void cmd_lcd(unsigned char);
void write_lcd(unsigned char);
void display_lcd(unsigned char *);
void delay_ms(unsigned int);

void main(void)
{
init_lcd(); 
delay_ms(500);
init_lcd();
init_lcd();
init_lcd();
delay_ms(100);
while(1) 
{
cmd_lcd(0x01);
display_lcd("GOOD MORNING");
cmd_lcd(0xc0);
display_lcd("    EVERYBODY  ");                                      

delay_ms(1000);
cmd_lcd(0x01);
display_lcd("   WELCOME TO");

cmd_lcd(0xc0);
display_lcd("HI-Q TEST EQUIP ");
delay_ms(1000);
}
}



void init_lcd(void)
{                            
delay_ms(10); 
cmd_lcd(0x28);//lcd initializing as 4-bit mode 16x2 character  
cmd_lcd(0x0e);//cursor blinking
cmd_lcd(0x06);//cursor right shifts 
cmd_lcd(0x01);//clear lcd
}
void cmd_lcd ( unsigned char c )
{
  unsigned char temp;
  temp = c & 0xf0;         //Transmitting high byte
   rs = 0;
  en = 1;
  db7 = temp & 0x80;
  db6 = temp & 0x40;
  db5 = temp & 0x20;
  db4 = temp & 0x10;
  en = 0;
  temp = c & 0x0f;          //Transmitting low byte
  rs = 0;
  en = 1;
  db7 = temp & 0x08;
  db6 = temp & 0x04;
  db5 = temp & 0x02;
  db4 = temp & 0x01;
  en = 0;        
   delay_ms(10);
}
void write_lcd ( unsigned char c )
{
  unsigned char temp;
  temp = c & 0xf0;        //Transmitting high byte
  rs = 1;
  en = 1;
  db7 = temp & 0x80;
  db6 = temp & 0x40;
  db5 = temp & 0x20;
  db4 = temp & 0x10;
  en = 0;
  temp = c & 0x0f;             //Transmitting low byte
   rs = 1;
  en = 1;
  db7 = temp & 0x08;
  db6 = temp & 0x04;
  db5 = temp & 0x02;
   db4 = temp & 0x01;
  en = 0;        
  delay_ms(10); 

}
void display_lcd(unsigned char *s)
{
while(*s)
write_lcd(*s++);
}


void delay_ms(unsigned int i)
{
unsigned int j;
while(i-->0)
{
for(j=0;j<500;j++);
}
}

   
asve it as   LCD.c

No comments:

Post a Comment