#include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; sbit k7=P1^6; sbit k8=P1^7; //選手按鍵 sbit beep=P3^6; //蜂鳴器 uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; //0-9代碼(共陰極) uchar shiwei,gewei,xuanshou,count,i,second; ucharscore1,score2,score3,score4,score5,score6,score7,score8;//選手1~8的分?jǐn)?shù) uint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8,k,m1,n2,m2,n2; void Timer() { TMOD|=0x01; TH0=0xd8; //初值55536,計(jì)數(shù)10000次,每次1US,總計(jì)10ms TL0=0xf0; IE=0x82; //這里是中斷優(yōu)先級(jí)控制EA=1(開總中斷),ET0=1(定時(shí)器0允許中斷),這里用定時(shí)器0來(lái)定時(shí) TR0=1; } void tim(void) interrupt 1 using 1 //為定時(shí)中斷TR0 { TH0=0xd8; //重新賦值 TL0=0xf0; count++; if(count==100)//100*10ms=1秒 { count=0; second--;//秒減1 } } void delay(uint z) //延時(shí)函數(shù) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);//延時(shí)1ms } void display (uchar shiwei,gewei,xuanshou)//顯示函數(shù) { P2=0xfe; //打開顯示時(shí)間十位的位選低電平有效1111 1110 P0=shiwei;//顯示十位 delay(5); P2=0xfd; //個(gè)位位選1111 1101 P0=gewei; delay(5); P2=0xf7; //選手位選1111 0111 P0=xuanshou; delay(5); } void dis(void)//調(diào)用顯示函數(shù) { shiwei=tab[second/10]; gewei=tab[second%10]; xuanshou=tab; display(shiwei,gewei,xuanshou); } void init() //初始化函數(shù) { P2=0x04;//00000100 P0=0x3f;//數(shù)碼管共陰0011 1111顯示0 t=0; beep=0;//蜂鳴器 i=0; second=29; score1=60; score2=60; score3=60; score4=60; score5=60; score6=60; score7=60; score8=60; a1=1; a2=1; a3=1; a4=1; a5=1; a6=1; a7=1; a8=1; } void main()//主函數(shù) { init();//調(diào)用初始化函數(shù) if(k==1){ m=0; if(k1==0){delay(5);if(k1==0);while(!k1);beep=1;delay(500);beep=0;} // 違規(guī)搶答顯示號(hào)碼報(bào)警 while(t) { if(m==0)//開關(guān),保證程序只執(zhí)行一次 { switch(t) { case1: { TR0=0;i=1;second=score1;beep=1;delay(500);beep=0; a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;//有選手搶答時(shí)顯示選手號(hào)碼蜂鳴器響,時(shí)間為0,t和i對(duì)應(yīng) }}} } if(k2==0){delay(5);if(k1==0);while(!k1);t=2;beep=1;delay(500);beep=0;} if(k3==0){delay(5);if(k1==0);while(!k1);t=3;beep=1;delay(500);beep=0;} if(k4==0){delay(5);if(k1==0);while(!k1);t=4;beep=1;delay(500);beep=0;} if(k5==0){delay(5);if(k1==0);while(!k1);t=5;beep=1;delay(500);beep=0;} if(k6==0){delay(5);if(k1==0);while(!k1);t=6;beep=1;delay(500);beep=0;} if(k7==0){delay(5);if(k1==0);while(!k1);t=7;beep=1;delay(500);beep=0;} if(k8==0){delay(5);if(k1==0);while(!k1);t=8;beep=1;delay(500);beep=0;} } if(k==0) { Timer();//中斷定時(shí)器打開 delay(10); while(!k); while(1) { dis(); m=0; n=0; if(second==29){beep=1;delay(500);beep=0;} if(second==0){ TR0=0;n=1; if(k1==0){delay(5);if(k1==0);while(!k1);t=1;beep=1;delay(500);beep=0;} // 違規(guī)搶答顯示號(hào)碼報(bào)警 if(k2==0){delay(5);if(k1==0);while(!k1);t=2;beep=1;delay(500);beep=0;} if(k3==0){delay(5);if(k1==0);while(!k1);t=3;beep=1;delay(500);beep=0;} if(k4==0){delay(5);if(k1==0);while(!k1);t=4;beep=1;delay(500);beep=0;} if(k5==0){delay(5);if(k1==0);while(!k1);t=5;beep=1;delay(500);beep=0;} if(k6==0){delay(5);if(k1==0);while(!k1);t=6;beep=1;delay(500);beep=0;} if(k7==0){delay(5);if(k1==0);while(!k1);t=7;beep=1;delay(500);beep=0;} if(k8==0) {delay(5);if(k1==0);while(!k1);t=8;beep=1;delay(500);beep=0;} if(k==0) {beep=1;delay(500);beep=0;second=29;TR0=1;m=1;} }//如果再次按下開始按鈕,蜂鳴器響0。5秒,定時(shí)器打開,從29開始倒計(jì)時(shí) if(n==0) { if(k1==0) {delay(5);if(k1==0);while(!k1);t=1;} //正常搶答顯示號(hào)碼 elseif(k2==0) {delay(5);if(k2==0);while(!k2);t=2;} elseif(k3==0) {delay(5);if(k3==0);while(!k2);t=3;} elseif(k4==0) {delay(5);if(k4==0);while(!k2);t=4;} elseif(k5==0) {delay(5);if(k5==0);while(!k2);t=5;} elseif(k6==0) {delay(5);if(k6==0);while(!k2);t=6;} elseif(k7==0) {delay(5);if(k7==0);while(!k2);t=7;} elseif(k8==0) {delay(5);if(k8==0);while(!k2);t=8;} elseif(k==0) {delay(5);if(k==0);while(!k);t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;}//從新開始,從新啟動(dòng)。 } while(t) { if(m==0)//開關(guān),保證程序只執(zhí)行一次 { switch(t) { case1: { TR0=0;i=1;second=0;beep=1;delay(500);beep=0; a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;//有選手搶答時(shí)顯示選手號(hào)碼蜂鳴器響,時(shí)間為0,t和i對(duì)應(yīng) } case2: { TR0=0;i=2;second=0;beep=1;delay(500);beep=0; a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case3: { TR0=0;i=3;second=0;beep=1;delay(500);beep=0; a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case4: { TR0=0;i=4;second=0;beep=1;delay(500);beep=0; a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break; } case5: { TR0=0;i=5;second=0;beep=1;delay(500);beep=0; a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;break; } case6: { TR0=0;i=6;second=0;beep=1;delay(500);beep=0; a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;break; } case7: { TR0=0;i=7;second=0;beep=1;delay(500);beep=0; a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;break; } case8: { TR0=0;i=8;second=0;beep=1;delay(500);beep=0; a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;break; } } } if(a1==0)//選手1的分?jǐn)?shù) { second=score1; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score1+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score1-=5;} dis(); } elseif(a2==0) { second=score2; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score2+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score2-=5;} dis(); } elseif(a3==0) { second=score3; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score3+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score3-=5;} second=score3; dis(); } elseif(a4==0) { second=score4; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score4+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score4-=5;} second=score4; dis(); } elseif(a5==0) { second=score5; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score5+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score5-=5;} second=score5; dis(); } elseif(a6==0) { second=score6; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score6+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score6-=5;} second=score6; dis(); } elseif(a7==0) { second=score7; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score7+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score7-=5;} second=score7; dis(); } elseif(a8==0) { second=score8; dis(); if(m1==0){delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score8+=5;} else if(m2==0){delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score8-=5;} second=score8; dis(); } if(k==0){i=0;t=0;second=29;beep=1;delay(500);beep=0;TR0=1;} while(!k); } } } }
|