#include<REGX51.H>
#define s1 0x0e
#define s2 0x0d
#define s3 0x0b
#define s4 0x07
unsigned char Get_key();
void sp(unsigned char key);
void display(unsigned a,unsigned ab,unsigned b,unsigned bb);
void delay(unsigned int t);
void beep(unsigned int t);
code unsigned char led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code unsigned char le[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int a=0,ab=0,b=0,bb=0;
sbit spk=P1^0;
void main()
{
unsigned char k;
while(1)
{
k=Get_key();
sp(k);
display(a,ab,b,bb);
}
}
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<112;j++);
}
void beep(unsigned int t)
{
spk=0;
delay(t);
spk=1;
}
unsigned char Get_key()
{
unsigned char k;
if((P3&0x0f)==0x0f)return(0xff);
delay(20);
if((P3&0x0f)==0x0f)return(0xff);
k=P3&0x0f;
while((P3&0x0f)!=0x0f);
return(k);
}
void sp(unsigned char k)
{
switch(k)
{
case s1:a++;beep(20);break;
case s2:if(a>0){a--;beep(20);}break;
case s3:b++;beep(20);break;
case s4:if(b>0){b--;beep(20);}break;
default: break;
}
if((((b-a)>=2)||((a-b)>=2))&&((a>=25)||(b>=25)))
{
if(a>b)
{
ab++;
a=0;
b=0;
}
else
{
bb++;
a=0;
b=0;
}
beep(20);
}
}
void display(unsigned a,unsigned ab,unsigned b,unsigned bb)
{
static char num=0;
P2=0xff;
switch(num)
{
case 0: P0=led[b%10];break;
case 1: P0=led[b/10];break;
case 2: P0=led[10];break;
case 3: P0=led[bb%10];break;
case 4: P0=led[ab%10];break;
case 5: P0=led[10];break;
case 6: P0=led[a%10];break;
case 7: P0=led[a/10];break;
default: P0=0xff;
}
P2=le[num++];
num%8;
}
|