本项目设计了一款基于单片机控制的8路抢答器系统,能够同时支持八名参赛者进行快速、准确的抢答操作,并具备显示和声音提示功能。
```c
void beep() //有源蜂鸣器函数
{
fmq = 0;
beep_x();
}
void beep_last()//最后一声特殊声调
{
fmq = 0;
delay(300);
fmq = 1;
}
void LED()
{
led = 0;
delay(150);
led = 1;
}
void T0_time() interrupt 1 //定时器0中断函数_回答时间
{
TH0=(65536-50000)/256; //50ms
TL0=(65536-50000)%256; //马上重装初值,以免有误差
if(count_0==20)
{
count_0= 0;
HuiDa_time--;
if(HuiDa_time<=5)
{if(HuiDa_time == 0){beep_last();} else{ beep();}
}
}
count_0++;
}
void T1_time() interrupt 3 //定时器1中断函数_抢答时间
{
TH1=(65536-50000)/256; //50us
TL1=(65536-50000)%256; //马上重装初值,这样在后面调用beep()函数时就不会影响定时器的准确计时了
if(count_1==20)
{
count_1= 0;
QiangDa_time--;
if(QiangDa_time<=5)
{if(QiangDa_time == 0){ beep_last();} else{beep();}
}
}
count_1++;
}
void EX0_set_QiangDa_time() interrupt 0 //外中断0,设置抢答时间
{
delay(10); //消抖一下
if(Key_set_Q==0)
{
beep();
while (1)
{
display_set(12, QiangDa_time_temp, 13);
if(Key_Start == 0)//时间+1键
{
delay(10);
if(Key_Start == 0){QiangDa_time_temp++;if(QiangDa_time_temp==100) {QiangDa_time_temp=1;}}
}
while(!Key_Start);//等待按键释放
else if ( Key_Stop == 0 ) //时间-1键
{
delay(10);
if(Key_Stop == 0){ QiangDa_time_temp--;if(QiangDa_time_temp==0) {QiangDa_time_temp=99;}}
}
while(!Key_Stop);//等待按键释放
else if ( Key_Restart == 0)
{
beep();
break;
}
}
}
}
void EX1_set_HuiDa_time() interrupt 2 //外中断1,设置回答时间
{
delay(10); //消抖一下
if(Key_set_H==0)
{beep(); while (1)
{
display_set(12,HuiDa_time_temp, 13);
if(Key_Start == 0)// 时间+1键
{
delay(10);
if(Key_Start == 0){ HuiDa_time_temp++;if(HuiDa_time_temp==100) {HuiDa_time_temp=1;}}
}
while(!Key_Start); //等待按键释放
else if ( Key_Stop == 0 )// 时间-1键
{
delay(10);
if(Key_Stop == 0){ HuiDa_time_temp--;if(HuiDa_time_temp==0) {HuiDa_time_temp=99;}}
}
while(!Key_Stop); //等待按键释放
else if ( Key_Restart == 0)
{
beep();
break;
}
}
}
}
```