8051 2 DIGIT CALCULATOR C PROGRAM
Saturday, February 6th, 2010
8051 2 DIGIT CALCULATOR C PROGRAM:
#include<reg51.h>
#include<reg51.h>
#include<string.h>
#include<stdio.h>
sbit rs = P2^5;
sbit en = P2^6;
unsigned char val[] = {’0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’+',’-'};
unsigned char co=0,co1=0;
unsigned int result,kc=0,ki=0,kk=0,kj=0;
void delay()
{
int i = 00,j;
for(i = 0;i < 175;i++)
for(j=0;j<498;j++);
}
void lcd_comm()
{
rs = 0;
}
void lcd_en ()
{
en = 1;
en = 0;
}
void delay_lcd ()
{
int i = 00,j;
for(i = 0;i < 15;i++)
for(j=0;j<498;j++);
}
void timer_delay(int z)
{
int i;
for(i=0;i<z;i++)
{
TMOD=0×10;//1 sec delay
TH1=0×01;
TL1=0×08;
TR1=0;
while(TF1==0);
TF1=0;
TR1=0;
}
}
void init_lcd()
{
lcd_comm();
P0 = 0×38;
lcd_en ();
delay_lcd ();
lcd_comm();
P0 = 0×0c;
lcd_en ();
delay_lcd ();
lcd_comm();
P0 = 0×01;
lcd_en ();
delay_lcd ();
lcd_comm();
P0 = 0×06;
lcd_en ();
delay_lcd ();
lcd_comm();
P0 = 0×81;
lcd_en ();
delay_lcd ();
}
void disp(unsigned char n)
{
rs=1;
P0=val[n/100];
printf(”%d”, n);
// n=n/10;
lcd_en();
lcd_en();
delay_lcd ();
P0=val[(n/10)%10];
lcd_en();
lcd_en();
delay_lcd ();
P0=val[n%10];
lcd_en();
lcd_en();
delay_lcd ();
}
void display(char *name)
{
int l,i;
l=strlen(name);
for(i=0;i<l;i++)
{
rs=1;
// delay_lcd ();
P0=name[i];
lcd_en();
delay();
}
}
/******************************************************************************************
Keyboard Routine
******************************************************************************************/
unsigned char kb()
{
unsigned char li=0,lj=0xee,lk,lr=45;
for(li=0;li<4;li++)
{
P1=lj;
// delay();
lk=P3;
delay_lcd ();
lk &= 0×38;
if(lk!=0×38)
{
if(lk==0×30)
lr=0+(li*3);
if(lk==0×28)
lr=1+(li*3);
if(lk==0×18)
lr=2+(li*3);
}
lj = (lj<<1)+1;
}
return(lr);
}
//******************************************************************************************//
/*Main Function Routine*/
//******************************************************************************************//
void main()
{
init_lcd();
result = 45;
while(1)
{
result = kb();
if(result!=45)
{
if(result == 10 && co ==2)
{
// kk = ki + kj;
co1=1;
co = 3;
display(”+”);
}
else if(result == 11 && co ==2)
{
// kk = ki – kj;
co = 3;
co1 = 2;
display(”-”);
}
else if(result>=0 && result<10)
{
if(co==0)
{
init_lcd();
ki = result;
disp(ki);
co++;
//result = 0;
}
else if(co==1)
{
init_lcd();
ki = (ki*10) + result;
disp(ki);
co++;
//result = 0;
}
else if(co==3)
{
lcd_comm();
P0 = 0×87;
lcd_en ();
delay_lcd ();
kj = result;
disp(kj);
co++;
//result = 0;
}
else if(co==4)
{
lcd_comm();
P0 = 0×87;
lcd_en ();
delay_lcd ();
kj = (kj*10) + result;
disp(kj);
co++;
kc=99;
//result = 0;
}
else
{
init_lcd();
display(”VALUE OVERLOADED”);
ki = kj=kk=0;
co=0;
}
}
delay();
delay();
}
else
{
kc++;
}
if(kc==100)
{
if(co1==1)
{
kk = ki + kj;
lcd_comm();
P0 = 0xc2;
lcd_en ();
delay_lcd ();
disp(kk);
ki=0,kk=0,kj=0,co=0,co1=0,kc=0;
}
else if(co1==2)
{
kk = ki – kj;
lcd_comm();
P0 = 0xc2;
lcd_en ();
delay_lcd ();
disp(kk);
ki=0,kk=0,kj=0,co=0,co1=0,kc=0;
}
}
}
}
//*******************************************End of Main Program******************************************//