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

📄 抢答器.c

📁 51单片机实现抢答器
💻 C
字号:
#include <reg52.h>
#define uchar unsigned char
ucar k,i;//
bit flag,flag_1=1;
uchar duanma[10] =
{
  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90
};//数码管段码
uchar weima[4] =
{
  0xfe, 0xfd, 0xfb, 0xf7
};//位码
uchar huanchun[4];
uchar room[6]={ 100,100,100,100,100,100};//初始化选手分数
void Delay(uchar i)//第huanchun[3]位读取分数
{
	do{
			huanchun[0] = room[huanchun[3]]%10;
    		huanchun[1] = (room[huanchun[3]]/10)%10;
    		huanchun[2] = room[huanchun[3]]/100;

	   }while(i--);
}
void xianshi()interrupt 3 	//中断显示
{	
	  TH1=0Xf8;		   //显示定时两毫秒。
	  TL1=0Xcc;
      P1 = weima[i];
      P2 = duanma[huanchun[i]];
      i++;
      if(i==4)i=0;
}	
unsigned char scankey()//键盘扫描
{
	unsigned char k,down,up;
	P0=0x00;
	P0=0xF0;
	k=P0;
	if(k==0xF0)return 0xFF;
	Delay(50);//去抖动		
	down=3;
	while(k&0x80)down--,k<<=1;
	P0=0x00;
	P0=0x0F;
	k=P0;
	if(k==0x0F)return 0xFF;
	up=0;
	while(k&0x01)up+=4,k>>=1;
	return up+down;
}//scankey
songjian() //松键操作
{	uchar k;
	while(1)
	{	k=scankey();
		if(k==scankey()&&k==0xff)break;
	}
}		
main()
{
  TMOD = 0X01;//定时器工作方式1
  TH1=0Xf8;	
  TL1=0Xcc;
  EA = 1;//允许中断
  ET1 = 1;//T1中断允许
  TR1 = 1;
  while(1)//键盘扫描
  {		flag=0;
  		flag_1=1;
  		k=scankey();
		Delay(100);
		if(k==scankey()&&k!=0xff)
		{	
			songjian();
			if(k==15)//裁判复位
			{	
				huanchun[3]=0;
				flag=1;
			}	
			if(k==15&&flag==1)
			{		flag=0;
				while(flag_1)	
				{	k=scankey();
					Delay(100);
					if(k==scankey()&&k!=0xff)
					{
						songjian();
						switch(k)
						{	
							
							case 4:	huanchun[3]=1;//1号选手按键
									flag_1=0;
									break;
							case 5:	huanchun[3]=2;//2号选手按键
									flag_1=0;
									break;
							case 6:	huanchun[3]=3;//3号选手按键
									flag_1=0;
									break;
							case 7:	huanchun[3]=4;//4号选手按键
									flag_1=0;
									break;
							case 8:	huanchun[3]=5;//5号选手按键
									flag_1=0;
									break;
						}
					}
				}
		
				}
			if(k==14)room[huanchun[3]]+=10;//加10分
			if(k==13)room[huanchun[3]]-=10;//减10分

		}
		}
}//1~5好选手抢答键
//13裁判的减粉14裁判的加粉键
//15号键裁判用的抢答开始键
//当裁判按下15号键时抢答开始选手才能开始抢答
//当友人按下抢答自己的抢答键后数码管显示该选手的号码
//当选手回答后由裁判按13/14见进行加减分并显示当前选手的总的分

⌨️ 快捷键说明

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