基本功能 1、同時(shí)供 8 名選手或 8個(gè)代表隊(duì)參加比賽,分別用 8個(gè)按鈕 K1 ~ K8 表示。 2、設(shè)置一個(gè)系統(tǒng)搶答控制開關(guān) K0,該開關(guān)由主持人控制。 3、搶答器具有鎖存與顯示功能。即選手按動(dòng)按鈕,鎖存相應(yīng)的編號,揚(yáng)聲器發(fā)出聲響提示,并在七段數(shù)碼管上顯示選手號碼。選手搶答實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。 4、搶答器具有定時(shí)搶答功能,且一次搶答的時(shí)間由主持人設(shè)定(如 10秒)。當(dāng) 主持人啟動(dòng) "開始"鍵后,定時(shí)器進(jìn)行減計(jì)時(shí)。 5、參賽選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號和搶答的時(shí)間,并保持到主持人將系統(tǒng)清除為止。在這段時(shí)間如果定時(shí)時(shí)間已到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示FFF。 源代碼如下
- #include<reg51.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit K0=P3^0;// 開始搶答按鍵
- sbit beep=P3^7;// 蜂鳴器
- sbit D0=P3^1;// 指示燈
- sbit K1=P1^0;//1 號選手搶答按鍵
- sbit K2=P1^1;//2 號選手搶答按鍵
- sbit K3=P1^2;//3 號選手搶答按鍵
- sbit K4=P1^3;//4 號選手搶答按鍵
- sbit K5=P1^4;//5 號選手搶答按鍵
- sbit K6=P1^5;//6 號選手搶答按鍵
- sbit K7=P1^6;//7 號選手搶答按鍵
- sbit K8=P1^7;//8 號選手搶答按鍵
- sbit S1=P3^2;// 答 題 計(jì) 時(shí) 鍵
- sbit S2=P3^3;// 開始搶答時(shí)間調(diào)整鍵
- sbit S3=P3^4;// 答題計(jì)時(shí)時(shí)間調(diào)整鍵
- char s;
- uchar num=0;
- char time1;// 搶答時(shí)間
- char time2;// 答題限時(shí)時(shí)間
- uint m,n;//T0,T1 定時(shí)器定一秒時(shí)
- bit flag1,flag2,flag3,flag4; // 標(biāo)志位
- bit aa,bb;// 時(shí)間調(diào)整標(biāo)志位
- // 延時(shí)子函數(shù)
- void delay(uint z)
- {
- uint x,y; for(x=z;x>0;x--)
- for(y=120;y>0;y--);
- }
-
- uchar code table1[]={
- // 共陰數(shù)碼管段碼值
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- uchar code table2[]={
- // 共陰數(shù)碼管位碼值
- 0xfe,0xfd, 0xfb,0xf7
- };
- // 初始化子函數(shù)
- void init()
- {
- TMOD=0x11;
- TH0=(65536-2000)/256;
- TL0=(65536-2000)%256;
- TH1=(65536-2000)/256;
- TL1=(65536-2000)%256;
- ET0=1;
- ET1=1;
- EA=1;
- P0=0x00;
- time1=10;
- time2=10;
- flag2=1;
- }
- // 開始鍵掃描子函數(shù)
- void key1()
- {
- uchar i=100;
- if(K0==0)
- {
- delay(10);
- if(K0==0)
- {
- while(K0==0&&i)
- {
- i--;
- delay(10);
- }
- TR0=1;
- s=time1;
- m=0;
- flag1=1;
- flag2=1;
- flag3=1;
- num=0;
- beep=1;
- D0=1;
- flag4=0; // 清除違規(guī)標(biāo)志位
- aa=0;
- bb=0;
- }
- }
- }
- // 選手搶答按鍵掃描子函數(shù)
- void key()
- {
- uchar i=100;
- if(K1==0)
- {
- delay(10);
- if(K1==0)
- {
- while(K1==0&&i)
- {
- i--;
- delay(10);
- }
- num=1; // 數(shù)碼管顯示 1 號 "1"
- TR0=0; // 關(guān)閉定時(shí)器 0, 時(shí)間停止
- TR1=1; // 打開定時(shí)器 1, 使揚(yáng)聲器響一聲
- flag2=0; // 關(guān)閉開始鍵標(biāo)志位 , 使再按其他七個(gè)鍵不會(huì)響應(yīng)
- }
- }
- if(K2==0) // 下面七個(gè)鍵的處理同上
- {
- delay(10);
- if(K2==0)
- {
- while(K2==0&&i)
- {
- i--;
- delay(10);
- }
- num=2;
- TR0=0;
- TR1=1;
- flag2=0; // 重 要
- }
- }
- if(K3==0)
- {
- delay(10);
- if(K3==0)
- {
- while(K3==0&&i)
- {
- i--;
- delay(10);
- }
- num=3;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- if(K4==0)
- {
- delay(10);
- if(K4==0)
- {
- while(K4==0&&i)
- {
- i--;
- delay(10);
- }
- num=4;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- if(K5==0)
- {
- delay(10);
- if(K5==0)
- {
- while(K5==0&&i)
- {
- i--;
- delay(10);
- }
- num=5;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- if(K6==0)
- {
- delay(10);
- if(K6==0)
- {
- while(K6==0&&i)
- {
- i--;
- delay(10);
- }
- num=6;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- if(K7==0)
- {
- delay(10);
- if(K7==0)
- {
- while(K7==0&&i)
- {
- i--;
- delay(10);
- }
- num=7;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- if(K8==0)
- {
- delay(10);
- if(K8==0)
- {
- while(K8==0&&i)
- {
- i--;
- delay(10);
- }
- num=8;
- TR0=0;
- TR1=1;
- flag2=0;
- }
- }
- }
- // 數(shù)碼管顯示子函數(shù)
- void display()
- {
- if(flag1==1) // 開始鍵按下 , 開始計(jì)時(shí)搶答
- {
- if(num!=0) // 如果有人搶答 , 則顯示相應(yīng)的幾號
- {
- P0=table1[num]; // 顯示幾號搶到了
- P2=table2[0]; delay(2); P0=0;
- P2=0xff;
復(fù)制代碼 限于篇幅,全部程序請從附件下載
|