一、基于单片机的抢答器设计
基本功能:
1.至少同时供32名选手比赛。
2.设置一个系统清除和抢答器控制开关,由主持人控制。
3.抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在显示器上显示选手号码。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。
5. 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6. 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,显示器上显示00。
附加功能:
自定通信协议,可在串口查询所有选手和单个选手的得分情况
二、设计方案
抢答器部分:
利用锁存器74LS373和优先编码器74ls148级联电路实现。
显示部分:
采用LCD1602显示倒计时和抢答人员信息。
部分参考程序:
main.c
void main()
{
unsigned int h,i,j;
unsigned int count_a=0,count_b=0;
unsigned int key;
int count=0;
h=0;
init_lcd();
timer_init();
InitScom();
while(1)
{
if(key_master==1)//弹开
{ if(flag_num0==1) { flag_num0=0;second=30; }
if(key_up==0)
{
second++;
}
else if(key_down==0)
{
second--;
}
write_com(0x80+0x40+13);write_date('F');
}
else //抢答
{ TR0=1;
if(recode==0)
{ TR0=0;
if(truekey==0) {score[people]++;write_com(0x80+0x40+13);write_date('Y');}
else if(falsekey==0) {score[people]--; write_com(0x80+0x40+13);write_date('N');}
}
flag_num0=1;
}
h=0;
display(h);
h=1;
display(h);
if(rdata[0]=='A'&&rdata[1]=='B'&&rdata[2]=='C'&&rdata[3]=='D')
{
for(i=0;i<32;i++)//依次发送数据
SendChar(score[i]) ;
rdata[0]=' ';
}
}
}