Re: Keypad and 89c51
Hello guys.. this my coding for Transmitter side... but i didnt get output in both LCD and Keyapad for Serial communication....
Please check the coding.... wheather problem in coding or hardware...
I gave coonection according to this coding only...
If you have any doubts regarding this... please check perivous posts....
================================================
#include<stdio.h>
#include<reg52.h>
sfr col =0x0A0; // KEYPAD ROW & COLUMN PORT2
sbit R1 = P2^1;
sbit R2 = P2^6;
sbit R3 = P2^5;
sbit R4 = P2^3;
sbit C1 = P2^2;
sbit C2 = P2^0;
sbit C3 = P2^4;
sfr ldata=0x90; // lcd data D0 to D7 = port 1 respetively
sbit rs = P0^1; // Regsiter Select RS=Port2.0
sbit rw = P0^2; // Read/Write R/W=Port2.1
sbit en = P0^0; // Enable E= Port2.2
void msdelay(unsigned int value);
void sertx(unsigned char x);
void lcdcmd(unsigned char value);
void lcddata(unsigned char value);
unsigned char keypad[4][3]={'1', '2', '3',
'4', '5', '6',
'7', '8', '9',
'*', '0', '#'};
void main()
{
unsigned char i;
unsigned char colloc, rowloc;
unsigned char cdata[5]={0x38, 0x0e, 0x01, 0x06, 0x86};
TMOD=0x20;
TH1=0xFD;
SCON=0x50;
TR1=1;
/*LCD command*/
for(i=0;i<5;i++)
{
lcdcmd(cdata);
msdelay(250);
}
/*keypad routine*/
col=0xff; //make all coloumns input
while(1)
{
do
{
R1=0; //make all row ground
R2=0;
R3=0;
R4=0;
colloc=col;
colloc&=0x15;
//mask used bit
}
while(colloc!=0x15);
do
{
do
{
msdelay(20);
colloc=col;
colloc&=0x15;
}
while(colloc==0x15);
msdelay(20);
colloc=col;
colloc&=0x15;
}
while(colloc==0x15);
while(1)
{
R1=0;
colloc=col;
colloc&=0x15;
if(colloc!=0x15)
{
rowloc=1;
break;
}
R2=0;
colloc=col;
colloc&=0x15;
if(colloc!=0x15)
{
rowloc=2;
break;
}
R3=0;
colloc=col;
colloc&=0x15;
if(colloc!=0x15)
{
rowloc=3;
break;
}
R4=0;
colloc=col;
colloc&=0x15;
rowloc=4;
break;
}
/*check column and send result to serial port and to LCD Display*/
if(C1==0)
{
sertx(keypad[rowloc][1]);
lcddata(keypad[rowloc][1]);
}
else if(C2==0)
{
sertx(keypad[rowloc][2]);
lcddata(keypad[rowloc][2]);
}
else
{
sertx(keypad[rowloc][3]);
lcddata(keypad[rowloc][3]);
}
}
}
void sertx(unsigned char x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void msdelay(unsigned int value)
{
unsigned int x,y;
for(x=0;x<1275;x++)
for(y=0;y<value;y++);
}
void lcdcmd(unsigned char value)
{
ldata=value;
rs=0;
rw=0;
en=1;
msdelay(1);
en=0;
return;
}
void lcddata(unsigned char value)
{
ldata=value;
rs=1;
rw=0;
en=1;
msdelay(1);
en=0;
return;
}
==================================================
Waiting for your Reply guys...
Give me the suggestion.. what should i do....