|
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- uchar code0[10]={0x84,0xde,0xa2,0xc2,0xd8}; //上 P1
- //uchar code1[10]={0x04,0xb7,0x8a,0x81,0x15,0x41,0x40,0xa7,0x00,0x01}; //下 //P2
- uchar code1[10]={0x04,0xb7,0x8a,0x83,0x17,0x43,0x42,0xa7,0x02,0x03}; //下 //P2
- sbit key1=P0^2;
- sbit key2=P0^4;
- sbit key3=P0^5;
- sbit key4=P0^6;
- sbit npn1=P0^3;
- sbit npn2=P0^7;
- sbit beep=P3^1;
- sbit key9=P3^6; //復(fù)位按鍵
- uchar flag=0;
- uchar jishi=10;
- uchar n=0;
- uchar start=0;
- void delay(uint t) //延時(shí)程序
- {
- uint j;
- for(;t>0;t--)
- for(j=121;j>0;j--);
- }
- void display_P1(uchar i)//數(shù)碼管顯示
- {
- switch(i)
- {
- case 0:P1=code0[0];break;
- case 1:P1=code0[1];break;
- case 2:P1=code0[2];break;
- case 3:P1=code0[3];break;
- case 4:P1=code0[4];break;
- case 5:P1=code0[5];break;
- case 6:P1=code0[6];break;
- case 7:P1=code0[7];break;
- case 8:P1=code0[8];break;
- default:break;
- }
- }
- void display_P2(uchar i)//數(shù)碼管顯示
- {
- switch(i)
- {
- case 0:P2=code1[0];break;
- case 1:P2=code1[1];break;
- case 2:P2=code1[2];break;
- case 3:P2=code1[3];break;
- case 4:P2=code1[4];break;
- case 5:P2=code1[5];break;
- case 6:P2=code1[6];break;
- case 7:P2=code1[7];break;
- case 8:P2=code1[8];break;
- case 9:P2=code1[9];break;
- default:break;
- }
- }
- void key() //鍵盤掃描,判斷哪個(gè)人搶答
- {
- if(start)
- {
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- flag=0;
- P2=0xff;
- display_P1(1);
- while(1)
- {
- delay(500);
- if(key9==0)
- {
- delay(5);
- if(key9==0)
- {
- jishi=9;
- P1=0xff;
- while(1) return;
- }
- while(!key9);
- }
- }
- }
- while(!key1);
- }
-
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
-
- flag=0;
- P2=0xff;
- display_P1(2);
- while(1)
- {
- if(key9==0)
- {
- delay(5);
- if(key9==0)
- {
- jishi=10;
- P1=0xff;
- while(1) return;
- }
- while(!key9);
- }
- }
- }
- while(!key2);
- delay(5);
- }
-
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- flag=0;
- P2=0xff;
- display_P1(3);
- while(1)
- {
- delay(500);
- if(key9==0)
- {
- delay(5);
- if(key9==0)
- {
- jishi=10;
- P1=0xff;
- while(1)return;
- }
- while(!key9);
-
- }
- }
- }
- while(!key3);
-
- }
-
-
- if(key4==0)
- {
- delay(5);
- if(key4==0)
- {
- flag=0;
- P2=0xff;
- display_P1(4);
- while(1)
- {
- delay(500);
- if(key9==0)
- {
- delay(5);
- if(key9==0)
- {
- jishi=10;
- P1=0xff;
- while(1)return;
- }
- while(!key9);
-
- }
- }
- }
- while(!key4);
- }
- }
- if(key9==0)
- {
-
- delay(5);
- if(key9==0)
- {
- beep=1;
- flag=1;
- start=1;
- jishi=10;
- display_P2(9);
- }
- while(!key9);
- }
-
- }
- void Timer0Init()
- {
- TMOD|=0X01;//選擇為定時(shí)器0模式,工作方式1,僅用TR0打開啟動(dòng)。
- TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL0=0X18;
- ET0=1;//打開定時(shí)器0中斷允許
- EA=1;//打開總中斷
- TR0=1;//打開定時(shí)器
- }
- void main()
- {
- Timer0Init();
- beep=1;
- npn1=0;
- npn2=0;
- while(1)
- {
- key();
- }
- }
- void Timer0() interrupt 1
- {
- static uint i;
- TH0=0XFC; //給定時(shí)器賦初值,定時(shí)1ms
- TL0=0X18;
- i++;
- if(i==1000)
- {
- i=0;
- jishi--;
- if(flag)
- {
- display_P2(jishi);
- if(jishi==0)
- {
- beep=0;
- flag=0;
- start=0;
- }
- }
- }
- }
復(fù)制代碼
|
|