Sunday, 4 August 2013

Interfacing LCD and Keypad with 8051

#include <reg51.h>

#define COL P2
#define ROW P0
#define LCD P3
sbit rs = P1^5;
sbit rw = P1^6;
sbit en = P1^7;
sbit refresh = P1^4;

 void MSDelay(unsigned int vaulue);
 void lcdcmd(unsigned char value);
 void lcddata(unsigned char value);

unsigned char keypad[4][4]= {'0','1','2','3',
                               '4','5','6','7',
                 '8','9','A','B',
                'C','D','E','F'};
 void main()
 {
//refresh=1;
 unsigned char colloc, rowloc;
restart:
 lcdcmd(0x38);
 MSDelay(250);
 lcdcmd(0x0E);
 MSDelay(250);
 lcdcmd(0x01);
 MSDelay(250);
 lcdcmd(0x06);
 MSDelay(250);
 lcdcmd(0x80);
  COL=0xFF;
  while(1)
  {
if(refresh==0)
{
goto restart;
     }
    do
 {
   ROW=0x00;
colloc =COL;
colloc &=0x0F;
}
while(colloc!=0x0F);
    do
{
do
 {
  MSDelay(20);
  colloc=COL;
colloc&=0x0F;
}
while(colloc==0x0F);
MSDelay(20);
  colloc=COL;
colloc&=0x0F;
}
while(colloc==0x0F);
while(1)
{
  ROW=0xFE;
colloc=COL;
colloc&=0x0F;
if(colloc!=0x0F)
{
rowloc=0;
break;
}

ROW=0xFD;
colloc=COL;
colloc&=0x0F;
if(colloc!=0x0F)
{
rowloc=1;
break;
}

ROW=0xFB;
colloc=COL;
colloc&=0x0F;
if(colloc!=0x0F)
{
rowloc=2;
break;
}

ROW=0xF7;
colloc=COL;
colloc&=0x0F;
rowloc=3;
break;
}

if (colloc==0x0E)
{ lcddata(keypad[rowloc][0]);
     MSDelay(250); }
else if(colloc==0x0D)
{ lcddata(keypad[rowloc][1]);
     MSDelay(250); }
else if(colloc==0x0B)
 { lcddata(keypad[rowloc][2]);
     MSDelay(250); }
else
{ lcddata(keypad[rowloc][3]);
     MSDelay(250); }
}

}
 
 void lcdcmd(unsigned char value)
 {
 LCD = value;
 rs=0;
 rw=0;
 en=1;
 MSDelay(1);
 en=0;
 return;
 }

 void lcddata(unsigned char value)
 {
 LCD = value;
 rs=1;
 rw=0;
 en=1;
 MSDelay(1);
 en=0;
 return;
 }

void MSDelay(unsigned int value)
{
 unsigned int x, y;
 for(x=0;x<1275;x++)
 for(y=0;y<value;y++);
 }

No comments:

Post a Comment