# include <reg52.h>
# define uint unsigned int
# define uchar unsigned char
uchar t0,t1,ge,shi;
char temp;
uchar flag,flag1,cout,j,k,kai,i;
bit ok;
uint x,y,z;
sbit wela=P2^7;
sbit dula=P2^6;
sbit beep=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit key5=P3^0;
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x00
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void display(uchar shi,uchar ge)
{
dula=1;
P0=table[shi];
dula=0;
P0=0xff; //消隱
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff; //消隱
wela=1;
P0=0xdf;
wela=0;
delay(5);
}
void key1scan()
{
// P3=0xff;
if(key1==0) //主持人按鈕
{
delay(5);
if(key1==0)
{
temp=10;
TR0=1;
// TR1=1;
beep=1;
flag=0;
flag1=1;
cout=1;
if(cout==1)
P1=0xff;
}
/* while(key1!=1);
delay(5);
while(key1!=1); */
}
}
void keyscan()
{
wela=1;
P0=0xdf;
wela=0;
delay(5);
if(flag==0&&flag1==1)
{
if(key2==0) //第一位選手的按鈕
{
delay(5);
if(key2==0)
{
// key3=1;
// key4=1;
TR0=0;
TR1=1;
// shi=temp%10;
ge=1;
// display(shi,1);
// TR1=1;
beep=1;
flag=1;
flag1=0;
cout=0;
if(cout==0)
{
P1=0xff;
delay(5);
P1=0xfe;
}
}
/* while(key2!=1);
delay(5);
while(key2!=1); */
/* for(i=0;i<28000;i++)
beep=0;
beep=1; */
}
else if(key3==0) //第二位選手的按鈕
{
delay(5);
if(key3==0)
{
TR0=0;
TR1=1;
// shi=temp%10;
ge=2;
// display(shi,2);
P1=0xff;
delay(5);
P1=0xfd;
beep=1;
flag=1;
flag1=0;
cout=0;
if(cout==0)
{
P1=0xff;
delay(5);
P1=0xfd;
}
}
/* while(key3!=1);
delay(5);
while(key3!=1); */
}
else if(key4==0)
{
delay(5);
if(key4==0) //第三位選手的按鈕
{
TR0=0;
TR1=1;
// shi=temp%10;
ge=3;
// display(shi,3);
P1=0xff;
delay(5);
P1=0xfb;
beep=1;
flag=1;
flag1=0;
cout=0;
if(cout==0)
{
P1=0xff;
delay(5);
P1=0xfb;
}
}
/* while(key4!=1);
delay(5);
while(key4!=1); */
}
}
/* dula=1;
P0=table[ge];
dula=0;
P0=0xff;
*/
}
void dispose()
{
if(ok==0&&t0%9==0)
{
beep=1;
}
if(t0==18)
{
t0=0;
temp--;
shi=temp%10;
ge=temp/10;
P1=~P1;
switch(temp)
{
case 0: TR0=0;TR1=1;flag=1;beep=~beep;kai=1;//ok=1;
break;
case 3: beep=~beep;ok=0;kai=0;
break;
case 2: beep=~beep;ok=0;kai=0;
break;
case 1: beep=~beep;ok=0;kai=0;
break;
case 9: beep=~beep;ok=1;kai=0;
break;
case 8: beep=~beep;ok=1;kai=0;
break;
}
}
}
void init()
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
temp=0;
// shi=temp/10;
// ge=temp%10;
/*
wela=1;
P0=0x0c;
wela=0;
dula=1;
P0=0x3f;
dula=0;
*/
}
void main()
{
init();
while(1)
{
P0=0; //消隱,一開始會有東西閃一下,加這句就不會了
key1scan();
dispose();
display(shi,ge);
keyscan();
}
}
/* num1=keyscan(); //把keyscan中num的返回值賦給num1
dula=1;
D=table[num1-1];
dula=0; */
void timer0() interrupt 1
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t0++;
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
beep=0;
t1++;
if(t1==8)
{
t1=0;
beep=1;
TR1=0;
}
if(kai==1&&t1==500)
{
t1=0;
beep=1;
TR1=0;
}
}
|