基于51单片机的32路抢答器

一、基于单片机的抢答器设计

基本功能:

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]=' ';
		}
		}	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45281309

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值