Posts Tagged ‘c driver for calculator 8051 |embed4u.coj’

8051 2 DIGIT CALCULATOR C PROGRAM

Saturday, February 6th, 2010

8051 keypad and lcd

8051 2 DIGIT CALCULATOR C PROGRAM:

#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******************************************//

#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******************************************//