目录
一、主要功能
1、数码管显示
2、主持人按下开始,8位选手开始抢答
3、可以进行简单的加减乘除运算
4、倒计时最后5秒蜂鸣器会滴滴提醒
5、选手抢答成功,数码管会显示其号码
6、按下清楚按键进入新一轮
7、抢答成功后蜂鸣器响2秒
二、使用步骤
基于51单片机的八路抢答器设计支持8路独立抢答输入,主持人通过“开始”键启动抢答流程,抢答成功后锁定其他输入。数码管实时显示抢答者编号,同时对应LED灯点亮。
三、硬件资源
1、51单片机核心模块
2、按键模块
3、LED指示灯模块
4、继电器模块
5、数码管显示模块
四、软件设计
#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^4;
sbit smg2=P2^6;
sbit smg3=P2^7;
sbit smg4=P2^5;
sbit keyks=P2^2;
sbit keytz=P2^1;
sbit keyqc=P2^0;
sbit key1=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
sbit key4=P1^7;
sbit key5=P3^4;
sbit key6=P3^5;
sbit key7=P3^6;
sbit key8=P3^7;
sbit spk=P1^0;
int djs=60,js=0;
unsigned char flag=0;
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};
void main()
{
int djs1=60;
Timer0_init();
spk=1;
djs=60;
while(1)
{
LOOP1: djs=djs1;
djsxs22();
if(key1==0)
{
delayms(3);
if(key1==0)
{
while(!key1);
djs=60;
while(1)
{
TR0=0;
djsxs();
if(key2==0)
{
delayms(8);
if(key2==0)
{
do
{
while(!key2);
delayms(5);
}
while(key2!=1);
djs++;
djs1=djs;
}
}
if(key3==0)
{
delayms(8);
if(key3==0)
{
do
{
while(!key3);
delayms(5);
}
while(key3!=1);
djs--;
djs1=djs;
}
}
if(key1==0)
{
delayms(3);
if(key1==0)
{
while(!key1);
goto LOOP1;
}
}
}
}
}
if(keyks==0)
{
delayms(3);
if(keyks==0)
{
while(!keyks);
TR0=1;
while(1)
{
djsxs();
if(keytz==0)
{
delayms(3);
if(keytz==0)
{
while(!keytz);
{
TR0=0;
flag=0;
spk=1;
}
}
}
if(keyks==0)
{
delayms(3);
if(keyks==0)
{
while(!keyks);
TR0=1;
}
}
if((key1==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key1==0)
{
while(!key1);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs1();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key2==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key2==0)
{
while(!key2);
{
spk=1;
flag=0;
while(1)
{
TR0=0;
djsxs2();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key3==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key3==0)
{
while(!key3);
{
spk=1;
flag=0;
while(1)
{
TR0=0;
djsxs3();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key4==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key4==0)
{
while(!key4);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs4();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key5==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key5==0)
{
while(!key5);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs5();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key6==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key6==0)
{
while(!key6);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs6();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key7==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key7==0)
{
while(!key7);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs7();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
if((key8==0)&&(TR0==1))
{ spk=0;
delayms(3);
if(key8==0)
{
while(!key8);
{
spk=1;
flag=0;
}
while(1)
{
TR0=0;
djsxs8();
djsxs30();
djsxs();
if(keyqc==0)
{
delayms(3);
if(keyqc==0)
{
while(!keyqc);
goto LOOP1;
}
}
}
}
}
}
}
}
}
}
五、实验现象
演示视频: