標(biāo)題: 搶答器 [打印本頁(yè)]
作者: 141624 時(shí)間: 2018-5-20 12:46
標(biāo)題: 搶答器
#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(開(kāi)總中斷),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; //打開(kāi)顯示時(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)//開(kāi)關(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í)器打開(kāi)
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;}
}//如果再次按下開(kāi)始按鈕,蜂鳴器響0。5秒,定時(shí)器打開(kāi),從29開(kāi)始倒計(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;}//從新開(kāi)始,從新啟動(dòng)。
}
while(t)
{
if(m==0)//開(kāi)關(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);
}
}
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |