code
#include <reg51.h>
sfr col=0x90;
sfr row=0xA0;
sbit rs= P0^0;
sbit rw= P0^1;
sbit enble= P0^2;
void msdelay(unsigned int);
void sertx(unsigned char);
void lcdcomd(unsigned char);
void lcddata(unsigned char);
int l=0;
unsigned int g[4]={0xFE,0xFD,0xFB,0xF7};
unsigned char comp[10]={'0','1','2','3','4','5','6','7','8','9'};
unsigned int u[3]={0,0,0};
int u1=0;
int u2;
unsigned char comp1[4]={'+','-','x','/'};
unsigned char keypad[4][4]={{'c','0','=','+'},{'1','2','3','-'},{'4','5','6','x'},{'7','8','9','/'}};
void main(void)
{ int h,k,i;
unsigned char colloc;
lcdcomd(0x38);
lcdcomd(0x0E);
lcdcomd(0x01);
lcdcomd(0x06);
lcdcomd(0x70);
msdelay(100);
while(1)
{
do{
row=0x00;
colloc=col;
colloc&=0xFF;
}while(colloc!=0xFF);
do{
do{
msdelay(20);
colloc=col;
colloc&=0xFF;
}while(colloc==0xFF);
msdelay(20);
colloc=col;
colloc&=0xFF;
}while(colloc==0xFF);
while(1)
{
for( i=0;i<4;i++)
{
if(col==g[i])
k=i;
}
for(i=0;i<4;i++)
{ row=g[i];
colloc=col;
coloc&=0x0F;
if(coloc!=0x0F)
h=i;
}
break;
}
for(i=0;i<4;i++)
{
if( kepad[k][h]==comp1[i])
{
u2=i;
u1=1;
lcdcomd(0x01);
lcdcomd(0x80);
}
}
for(i=0;i<10;i++)
{
if( keypad[k][h]==comp[i])
{
u[u1]=u[u1]*10;
u[u1]+=i;
l++;
}}
if((l!=0)||(keypad[k][h]=='=')||(keypad[k][h]=='c'))
{
setx(keypad[k][h]);
l=0;
}
}
}
void sertx(unsigned char x)
{
int r;
if((x=='c'))
{
lcdcomd(0x01);
lcdcomd(0x80);
u[1]=u[0]=u[2]=0;
u2=u1=0;
}
else if(x=='=')
{
if(u2==0)
{u[2]=u[0]+u[1];
}
if(u2==1)
{u[2]=u[0]-u[1];
}
if(u2==2)
{u[2]=u[0]*u[1];
}
if(u2==3)
{u[2]=u[0]/u[1];
}
lcdcomd(0x01);
lcdcomd(0x04);
lcdcomd(0xCF);
while(u[2]!=0)
{
r=u[2]%10;
lcddata(comp[r]);
u[2]/=10;
}
u2=u1=0;
u[1]=u[0]=u[2]=0;
lcdcomd(0x06);
lcdcomd(0x80);
}
else
{
lcddata(x);
}
}
void lcdcomd(unsigned char xy)
{
P3=xy;
rs=0;
rw=0;
enble=1;
msdelay(1);
enble=0;
}
void msdelay(unsigned int value)
{
unsigned int x,y;
for(x=0;x<1257;x++)
for(y=0;y<value;y++);
}
void lcddata(unsigned char xy)
{
P3=xy;
rs=1;
rw=0;
enble=1;
msdelay(1);
enble=0;
}