⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 八路倒计时抢答器.c

📁 八路倒计时抢答器(源文件)
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key8=P3^0;
sbit key9=P3^1;
sbit key10=P3^2;
sbit key11=P3^3;
sbit beep=P3^4;
sbit dula=P3^5;
uchar temp,t0,temp1,flag2,c,flag;
uint table1[]={50,50,50,50,50,50,50,50};
uint shu;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint z)
{
	uchar x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
void display(uint b,uchar a);
void jia_jian(uchar a);
void start();
void keyscan();
void qiangda();
void init()
{
	shu=50;	//设定每人的初始分是50;当等于0时或者等于100时,抢答结束初始化
	TMOD=0x01;
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;	
	EA=1;
	ET0=1;
	temp=0;
	P1=0xff;
		
}
void main()
{
	init();
	while(1)
		{
			if(key11==0)
				{
					delay(5);
					if(key11==0)
						{
							start();
						}

				}
			
			if(flag2!=1)
				{
					keyscan();
					display(temp,c);
				}
			else			
				{
					jia_jian(c);
					display(table1[c-1],c);//抢答到了,那么数码管第一位显示抢到的人编号,后3位显示当前人所得的分数
				}
		}

}
void display(uint b,uchar a)
{
	uchar bai,shi,ge;
	bai=b/100;
	shi=b%100/10;
	ge=b%10;
	P2=0xfd;
	dula=1;
	P0=table[bai];
	dula=0;
	delay(5);
	P0=0xff;
	
	P2=0xfb;
	dula=1;
	P0=table[shi];
	dula=0;
	delay(5);
	P0=0xff;

	P2=0xf7;
	dula=1;
	P0=table[ge];
	dula=0;
	delay(5);
	P0=0xff;
	
	P2=0xfe;
	dula=1;
	P0=table[a];
	dula=0;
	delay(5);
	P0=0xff;	
}
void keyscan()
{
	if(key8==0)//按下确认键
		{
			delay(5);
			if(key8==0)
				{
					beep=0;
					delay(100);
					beep=1;
					temp=20;
					TR0=1;
					flag=1;
					while(!key8);
				}
		}
	if(flag==1)
		{
			qiangda();//抢答开始
			if(t0==20)
				{
					t0=0;
					temp--;
					if(temp==0)//假如20S内没有人抢答
						{	
							TR0=0;
							flag=0;	
							beep=0;
							delay(1000);
							beep=1;
						}
										
				}
			
		}
}
void timer0() interrupt 1
{
	TH0=(65535-50000)/256;
	TL0=(65535-50000)%256;	
		t0++;

}
void qiangda()
{
	temp1=P1;
	while(temp1!=0xff)
		{
			delay(5);
			temp1=P1;
			while(temp1!=0xff)		
				{
					temp1=P1;
					flag2=1;//确定有人抢答的标志位
					TR0=0;
					t0=0;
					flag=0;	
					beep=0;
					delay(1000);
					beep=1;					
					switch(temp1)
						{
							case 0xfe:c=1;break;
							case 0xfd:c=2;break;
							case 0xfb:c=3;break;
							case 0xf7:c=4;break;
							case 0xef:c=5;break;
							case 0xdf:c=6;break;
							case 0xbf:c=7;break;
							case 0x7f:c=8;break;
						}
					while(temp1!=0xff)
						{
							temp1=P1;
						}

				}

		}
}
void jia_jian(uchar a)
{
	uchar i;
	shu=table1[a-1];
	if(key9==0)
		{
			delay(5);
			if(key9==0)
				{
					shu=shu+5;
						if(shu==100)//表示该编号胜利,蜂鸣器间隔响动
							{
								shu=999;
								for(i=0;i<6;i++)
									{
										beep=0;
										delay(1000);
										beep=1;
									}
							}
					while(!key9);	
				}
		}
	if(key10==0)
		{
			delay(5);
			if(key10==0)
				{
					shu=shu-5;
						if(shu==0)//表示该编号失败,蜂鸣器响6s
							{
								shu=500;
								beep=0;
								delay(6000);
								beep=1;
							}
					while(!key10);	
				}
		}
	table1[a-1]=shu;
	
}
void start()
{
	P2=0;
	dula=1;
	P0=0x3f;
	dula=0;
	delay(5);
	P0=0xff;
	temp=t0=temp1=flag2=c=0;
	P1=0xff;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -