#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P3^0;
uchar aa,flag=0,op,flag1,flag2;
long diyi,dier,jieguo;
uchar code KeyCodeTable[]=
{
0x28,0x14,0x24,0x44,0x12,0x22,0x42,0x11,0x21,0x41,0x88,0x84,0x82,0x81,0x48,0x18
};
uchar code dula[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar buffer[6]={0,10,10,10,10,10};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar Keys_Scan()
{
uchar sCode,kCode,i,k,tmp;
P1 = 0xf0;
if((P1&0xf0)!=0xf0)
{ delay(1);
if((P1&0xf0)!=0xf0)
{ sCode = 0xfe;
for(k=0;k<4;k++)
{ P1 = sCode;
if((P1&0xf0)!=0xf0)
{ kCode = ~P1;
for(i=0;i<16;i++)
{ if(kCode == KeyCodeTable[i])
{ P1=0xf0;
while(1)
{ tmp=P1;
if(tmp==0xf0) {break;}
}
flag2++;
return i;
}
}
}
sCode = _crol_(sCode,1);
}
}
}
return 16;
}
void doo(uchar key)
{ uchar i,n,k,a[6],b[6],c[6];
long m;
if((key>=0)&&(key<=9))
{ if(flag==1)
{ flag=0;
for(i=0;i<6;i++)
buffer[i]=10;
}
if(flag2==1) buffer[0]=10;
for(i=0;i<5;i++)
buffer[5-i]=buffer[4-i];
buffer[0]=key;
}
if((key>=10)&&(key<=13))
{ op=key;
for(i=0;i<6;i++)
{ a[i]=buffer[i];
if(a[i]==10)
a[i]=0;
}
diyi=a[5]*100000+a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0];
flag=1;
}
if(key==14)
{ for(i=0;i<6;i++)
{ b[i]=buffer[i];
if(b[i]==10)
b[i]=0;
}
dier=b[5]*100000+b[4]*10000+b[3]*1000+b[2]*100+b[1]*10+b[0];
switch(op)
{ case 10: jieguo=diyi+dier; break;
case 11: jieguo=diyi-dier; break;
case 12: jieguo=diyi*dier; break;
case 13: m=diyi/dier; n=diyi%dier*10/dier;k=diyi%dier*10%dier*10/dier; break;
default: break;
}
if(op==13)
{ flag1=1;
buffer[0]=k;
buffer[1]=n;
for(i=2;i<6;i++)
{ c[i]=m%10;
m=m/10;
}
i=5;
while((c[i]==0)&&(i>2))
{ c[i]=10;
i--;
}
for(i=2;i<6;i++)
buffer[i]=c[i];
}
else { for(i=0;i<6;i++)
{ c[i]=jieguo%10;
jieguo=jieguo/10;
}
i=5;
while(c[i]==0)
{ c[i]=10;
i--;
if(i==255) break;
}
for(i=0;i<6;i++)
buffer[i]=c[i];
}
}
if(key==15)
{ for(i=0;i<6;i++)
buffer[i]=10;
buffer[0]=0;
flag=0;
flag1=0;
flag2=0;
}
}
/*void display()
{ P2=dula[aa];
if((flag1==1)&&(aa==2))
P0=table[buffer[aa]]|0x80;
else P0=table[buffer[aa]];
delay(2);
aa++;
if(aa==6) aa=0;
}*/
void main()
{
uchar keynum;
TMOD=0x01;
EA=1;
ET0=1;
TH0=(65536-7000)/256;
TL0=(65536-7000)%256;
TR0=1;
while(1)
{
keynum= Keys_Scan();
if(keynum!=16)
{ beep=0;
delay(50);
beep=1;
doo(keynum);
}
// display();
}
}
void Time0() interrupt 1
{ P2=dula[aa];
if((flag1==1)&&(aa==2))
P0=table[buffer[aa]]|0x80;
else P0=table[buffer[aa]];
delay(2);
aa++;
if(aa==6) aa=0;
TH0=(65536-7000)/256;
TL0=(65536-7000)%256;
}
- 1
- 2
- 3
- 4
前往页