#define uchar unsigned char #define uint  unsigned int
sbit wela_hao=P3^0;     //显示选手的数码管位选 sbit wela1=P3^1; sbit wela2=P3^7; sbit qing=P3^5; sbit host=P3^6; sbit answer=P3^4; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit key5=P1^4;
uchar hao,shu,shi,ge,t0,start,flag; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
void init();/*初始函数申明*/
void display(uchar shi,uchar ge,uchar hao); void delay(uint z); void keyscan(); void main() {
init();  while(1)      {
if(host==0) //主持人             {           delay(5);           if(host==0)           {
shu=30;
hao=0;              flag=1;               start=1;         delay(5);
while(!host);        }            }
if(qing==0) //清零            {           delay(5);           if(qing==0)           {
while(1)              {
shu=0;                  shi=shu/10;                  ge=shu%10;                   TR0=0;                  delay(5);
hao=0;                   wela1=0;                   wela2=0;
wela_hao=0;                   delay(1);
display(shi,ge,hao);                if(host==0)break;                               }                        delay(5);        while(!qing);        }            }
if(answer==0)     //开始答题            {
delay(5);
if(answer==0)                 {
flag=1;                   shu=10;                   start=1;                   hao=0;                                    }
delay(5);
while(!answer);            }
if(flag==1)        {
if(start==0)      //选手按下,定时10秒                                                                                                                                                                                                                                                                                              if(start==1)                                                                                                                                                                                                                                                   }                   } }
{
shu=10;    shi=shu/10;    ge=shu%10;    wela1=0;    wela2=0;    wela_hao=0;   delay(1); TR0=0;    display(shi,ge,hao);   delay(1);    }     //主持人按下,倒计时30秒{      wela1=1;   wela2=1;   wela_hao=1;   delay(1);  TR0=1;      display(shi,ge,hao);   delay(1); keyscan();   }                        
void init()    /*初始化*/ {
t0=0;  t1=0;
shi=shu/10;  ge=shu%10;  flag=0;  shu=30;  wela_hao=1;  hao=0;
TMOD=0x11;
TH0=(65536-50000)/256;  TL0=(65536-50000)%256;   EA=1;   ET0=1;   TR0=0; }
void display(uchar shi,uchar ge,uchar hao) {
wela1=1;  wela2=0;  P0=table[ge];  delay(5);
wela2=1;  wela1=0;  P0=table[shi];  delay(5);
wela_hao=0;  P2=table[hao];  delay(5); }
void keyscan()       /*按键扫描函数*/ {
if(key1==0)      {     delay(5);  if(key1==0)
/*数码管动态扫描*/             {              hao=1;       P2=table[hao];       start=0;    delay(5);    while(!key1);    }           }
if(key2==0)      {     delay(5);  if(key2==0)     {    hao=2;       P2=table[hao];          start=0;    delay(5);    while(!key2);    }           }
if(key3==0)      {     delay(5);  if(key3==0)     {    hao=3;       P2=table[hao];          start=0;    delay(5);    while(!key3);    }           }
if(key4==0)      {     delay(5);  if(key4==0)     {    hao=4;       P2=table[hao];          start=0;
delay(5);    while(!key4);    }           }
if(key5==0)      {     delay(5);  if(key5==0)     {    hao=5;       P2=table[hao];          start=0;    delay(5);    while(!key5);    }           } }
void delay(uint z)       /*延时函数*/ {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void time0() interrupt 1    /*定时器0*/ {
TH0=(65536-50000)/256;  TL0=(65536-50000)%256;  shi=shu/10;  ge=shu%10;   t0++;
if(t0==20)    {
t0=0;     shu--;
shi=shu/10;     ge=shu%10;       if(shu==0)         {
while(1)                {
shu=0;                   hao=0;                   wela1=0;                   wela2=0;                   wela_hao=0;                   delay(1);
display(shi,ge,hao);                   if(host==0)break;                                                  }    }
}
}