Calculator using 8051 microcontroller

Posted on at


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;
}

proteus screenshot



About the author

Saif-Filmannex

I am doing Bs Electronics Engineering from International Islamic University

Subscribe 0
160