#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
u8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
u8 dis[8]={10,10,10,10,10,10,10,10};
sbit c0=P3^4;
sbit c1=P3^5;
sbit c2=P3^6;
sbit c3=P3^7;
u16 zt=0,bz,ajbz,axbz;
u32 bjs;
u32 js;
u32 sz;
u8 sx[8];
u16 zy;
void delay(u8 z)
{
while(z--);
}
void display()
{
u8 a=0;
for(;a<8;a++)
{
P2=1<<a;
P0=table[dis[a]];
delay(50);
P0=0xff;
}
}
void qp()
{
u8 a=0;
for(;a<8;a++)
{
dis[a]=10;
}
}
u8 ajjc()
{
u8 a;
for(a=0xff,P3=0xfe;P3!=0xef;P3=P3<<1|1)
{
a++;if(!c0)break;
a++;if(!c1)break;
a++;if(!c2)break;
a++;if(!c3)break;
}
P3=0xf0;
if(c0&c1&c2&c3)return 0xff;
while(!(c0&c1&c2&c3));
return a;
}
void ajpd()
{
u8 a;
a=ajjc();
if(a<10)
{
if(zt==0&&ajbz<8)
{
dis[ajbz]=a;
ajbz++;
bjs=bjs*10+a;
}
// if(zt==0)
// {
// bjs=bjs*10+a;
// }
else if(zt==1&&axbz<8)
{
dis[axbz]=a;
axbz++;
js=js*10+a;
}
// else if(zt==0)
// {
// js=js*10+a;
// }
}
else
{
switch(a)
{
case 10:
qp();
zt=1;
bz=1;
break;
case 11:
qp();
zt=1;
bz=2;
break;
case 12:
qp();
zt=1;
bz=3;
break;
case 13:
qp();
zt=1;
bz=4;
break;
case 14:
qp();
if(zt==1&&bz==1)
{
zt=2;
sz=bjs+js;
}
else if(zt==1&&bz==2)
{
zt=2;
sz=bjs-js;
}
else if(zt==1&&bz==3)
{
zt=2;
sz=bjs*js;
}
else if(zt==1&&bz==4)
{
zt=2;
sz=bjs/js;
}
break;
case 15:
zt=0;
bjs=0;
js=0;
sz=0;
ajbz=axbz=0;
qp();
break;
}
}
}
//void change(u8 c)
//{
// u8 i;
// if(c==0xff) return;
// for(i=0;i<7;i++)
// {
// dis[i]=dis[i+1];
// }
// dis[7]=c;
//}
void xs()
{
switch(zt)
{
case 0:
break;
case 1:
// qp();
break;
case 2:
// dis[0]=sz/10000000;
// dis[1]=(sz%10000000)/1000000;
// dis[2]=(sz%1000000)/100000;
// dis[3]=(sz%100000)/10000;
// dis[4]=(sz%10000)/1000;
// dis[5]=(sz%1000)/100;
// dis[6]=(sz%100)/10;
// dis[7]=sz%10;
if(sz<10)
{
dis[7]=sz;
dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=dis[5]=dis[6]=10;
}
else if(sz<100)
{
dis[6]=sz/10;
dis[7]=sz%10;
dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=dis[5]=10;
}
else if(sz<1000)
{
dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=10;
dis[5]=sz/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
else if(sz<10000)
{
dis[0]=dis[1]=dis[2]=dis[3]=10;
dis[4]=sz/1000;
dis[5]=sz%1000/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
else if(sz<100000)
{
dis[0]=dis[1]=dis[2]=10;
dis[3]=sz/10000;
dis[4]=sz%10000/1000;
dis[5]=sz%1000/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
else if(sz<1000000)
{
dis[0]=dis[1]=10;
dis[2]=sz/100000;
dis[3]=sz%100000/10000;
dis[4]=sz%10000/1000;
dis[5]=sz%1000/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
else if(sz<10000000)
{
dis[0]=10;
dis[1]=sz/1000000;
dis[2]=sz%1000000/100000;
dis[3]=sz%100000/10000;
dis[4]=sz%10000/1000;
dis[5]=sz%1000/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
else if(sz<100000000)
{
dis[0]=sz/10000000;
dis[1]=sz%10000000/1000000;
dis[2]=sz%1000000/100000;
dis[3]=sz%100000/10000;
dis[4]=sz%10000/1000;
dis[5]=sz%1000/100;
dis[6]=sz%100/10;
dis[7]=sz%10;
}
// dis[6]=sz/10;
// dis[7]=sz%10;
break;
}
// switch(zt)
// {
// case 0:
// change(bjs);
//
// break;
// case 1:
// dis[1]=0;
// break;
// case 2:
// dis[2]=2;
// break;
// }
}
// void init()
//{
// TMOD=1;
// TH0=(65536-1000)/256;
// TL0=(65536-1000)%256;
// TR0=1;
// EA=ET0=1;
//}
void main()
{
// u8 i,z;
// init();
while(1)
{
display();
ajpd();
xs();
// if(ajbz==0xff) return;
// switch(zt)
// {
// case 0:
// for(i=0;i<7;i++)
// {
// dis[i]=dis[i+1];
// }
// dis[7]=ajbz;
// break;
// case 1:
// for(z=0;z<7;z++)
// {
// dis[z]=dis[z+1];
// }
// dis[7]=ajbz;
// break;
// case 2:
// dis[0]=sz/10000000;
// dis[1]=(sz%10000000)/1000000;
// dis[2]=(sz%1000000)/100000;
// dis[3]=(sz%100000)/10000;
// dis[4]=(sz%10000)/1000;
// dis[5]=(sz%1000)/100;
// dis[6]=(sz%100)/10;
// dis[7]=sz%10;
// break;
// }
// xs();+
}
}
void shi()interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
// change(ajjc());
}
|