|
#include<reg51.h>
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp;
int key;
int num1[6],num2[6],result[6],p,plus1,plus2,flat,out;
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
display(unsigned char num)
{
P0=table[num];
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
}
void display1(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6) //????
{
static int num_count=0;
//a6++;///////////////
if(num_count==0)
{
dula=0;
P0=table[a1]; //????
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
// delay(1);
//num_count++;
}
if(num_count==1)
{
dula=0;
P0=table[a2]; //????
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
// delay(1);
//num_count++;
}
if(num_count==2)
{
P0=table[a3]; //????
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
//delay(1);
// num_count++;
}
if(num_count==3)
{
P0=table[a4]; //????
dula=1;
dula=0;
P0=0x77;
wela=1;
wela=0;
//delay(1);
// num_count++;
}
if(num_count==4)
{
P0=table[a5]; //????
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
//delay(1);
//
}
if(num_count==5)
{
P0=table[a6]; //????
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
//delay(1);
num_count=-1;
}
num_count++;
}
void intit(void)
{
TMOD=0x21;
//P0 = 0xff;
//P2 = 0xff;
TMOD = 0x21;
TH0 = 0xfc;
TL0 = 0;
TCON = 0x01;
IE = 0x82;
TR0 = 1;
key=-1;
}
//////////////////////////////////////////////////////////////////
void timer0() interrupt 1
{
TH0 = 0xfc;
if(flat==0)
display1(num1[0],num1[1],num1[2],num1[3],num1[4],num1[5]);
if(flat==1)
display1(p,p,p,p,p,p);
if(flat==2)
display1(num2[0],num2[1],num2[2],num2[3],num2[4],num2[5]);
if(flat==3)
display1(result[0],result[1],result[2],result[3],result[4],result[5]);
}
void refresh(int *t)
{
int i;
for(i=0;i<6;i++)
{
t[i]=0;
}
}
void run(int *t)
{
int i,j;
for(i=0;i<5;i++)
{
j=t[i+1];
t[i]=t[i+1];
}
}
int plus(int *t)
{
int i,o=0;
for(i=0;i<6;i++)
{
o=o*10;
o=o+t[i];
}
return o;
}
void main()
{
int i,j;
///////////////////////////////
first:
//////////////////////////
intit();
dula=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
key=0;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0) //??????????????
{
temp=P3;
temp=temp&0xf0;
//beep=0;
}
beep=1;
//display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
// beep=0;
}
beep=1;
//display(key);
P1=0xfc;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
//beep=0;
}
beep=1;
//display(key);
P1=0xf8;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
////////////
refresh(num1);
refresh(num2);
refresh(result);
out=0;
p=0;
flat=0;
plus1=plus2=0;
key=-1;
goto first;
////////////////
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
// beep=0;
}
beep=1;
//display(key);
P1=0xf0;
}
}
if(key>=0)
{
if(flat==0&&key<=9&&key>=0)
{
run(num1);
num1[5]=key;
key=-1;
flat=0;
}
if(flat==0&&key>=10)
{
p=key-9;
key=-1;
flat=1;
//////////////////
}
if(flat==3&&key>=10)
{
p=key-9;
key=-1;
flat=1;
}
if(flat>=1&&flat<=2&&key<=9&&key>=0)
{
run(num2);
num2[5]=key;
key=-1;
flat=2;
}
if(flat==2&&key==15)
{
plus1=plus(num1);
plus2=plus(num2);
if(p==1)
{
out=plus1+plus2;
}
if(p==2)
{
out=plus1-plus2;
}
if(p==3)
{
out=plus1*plus2;
}
if(p==4)
{
out=(float)plus1/(float)plus2+0.5;
}
/*
j=1000000;
for(i=0;i<6;i++)
{
result[i]=(((out%j)*10)/j);
j=j/10;
}
*/
result[0]=(out%1000000)/100000;
result[1]=(out%100000)/10000;
result[2]=(out%10000)/1000;
result[3]=(out%1000)/100;
result[4]=(out%100)/10;
result[5]=out%10;
num1[0]=result[0];
num1[1]=result[1];
num1[2]=result[2];
num1[3]=result[3];
num1[4]=result[4];
num1[5]=result[5];
refresh(num2);
flat=3;
key=-1;
}
}
}
}
|
|