八路抢答器系统51单片机设计【附Proteus仿真、C程序、原理图及PCB文件、元器件清单和论文等】

设计要求
1)抢答器同时供8名选手或2个代表队比赛,分别用8个按钮S0-S7表示;
2)设置一个系统清除和抢答控制开关S,该开关由主持人控制;
3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止;
4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30s等)。当主持人启动“开始”按键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续时间为0.5s左右;
5)参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止;
6)如果定时时间到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00;
7)设计出软件编程方法,并写出源代码;
8)主机与从机实现无线抢答;
9)用Proteus进行仿真,Altium Designer绘制原理图和PCB;

概述
本文介绍了数码显示八路抢答器电路的组成、设计及功能,该抢答器除具有基本的抢答功能外,还具有计时和报警的功能。主持人通过时间预设开关预设供抢答的时间,系统将完成自动倒计时。

若在规定的时间有人抢答,则计时将自动停止,若在规定的时间无人抢答,则系统中的蜂鸣器将发响,提示主持人本轮抢答无效,实现报警功能,若超过抢答时间则抢答无效。

本系统采用51单片机作为整个控制核心。控制系统主要由:显示模块、控制模块、报警模块和抢答模块组成。

工作时,该系统通过矩阵键盘输入抢答信号,经单片机的处理后,输出控制信号,利用一个4位数码管来完成显示功能并伴随蜂鸣器报警,用按键来让选手进行抢答,在数码管上显示哪一组先答题,从而实现整个抢答过程。
在这里插入图片描述
proteus仿真电路图
在这里插入图片描述
在这里插入图片描述

系统原理图
在这里插入图片描述
PCB图
在这里插入图片描述
仿真结果分析
加载“八路抢答器.hex”文件到51单片机,点击运行。八路抢答器程序初始化后,数码管显示:----。等待主持人按键输入。
在这里插入图片描述
按下“主持人”键,数码管显示:00-0。此时,可以通过“计时+”和“计时-”键,设置计时时间。本例中,我们设置计时时间为30秒。
在这里插入图片描述
在这里插入图片描述
再次按下“主持人”键,蜂鸣器哔的一声,倒计时开始,8位选手可以开始进行抢答。假设3号选手,在计时时间内抢答成功。此时,计数停止,数码管显示剩余计时数和当前选手号,其对应的3号LED灯点亮。
在这里插入图片描述
倒计时,还剩5秒时,若仍没有选手抢答,此时蜂鸣器发出连续提示音。若计时结束,无人抢答,此时数码管显示:00-0;按下“主持人”键,数码管显示:----;再次按下“主持人”键,显示30-0;如果不对计时时间作修改,再次按下“主持人”键,新一轮计时开始。

如果,在主持人未开始计时时,即抢答未开始前,有人抢答。假设2号选手抢答,此时数码管显示:FF-2,蜂鸣器长鸣,2号红色LED灯点亮。选手犯规抢答后,按下‘主持人’键,蜂鸣器停止,数码管显示:00-0,主持人设置时间,重新开始。
在这里插入图片描述
部分C代码

/********************************************************
函数名称:void scan(void)
函数作用:按键检测函数
参数说明:
********************************************************/ 
void scan(void)
{	
	uchar qiangda_num=0;
	//主持人键
	if(key_zhu==0)		   //按键按下
	{
		delayms(7);		   //显示消抖
		if(key_zhu==0&&zhu_f!=2&&qiang_f==0&&wan_f==0)//判断是否有人犯规或者抢答是否开始或者抢答是否完成
		{
			zhu_f++;	   //比赛阶段标记+1
			if(zhu_f==2)   //比赛正式开始
			{
				TR0=1;	   //比赛开始,开启定时
				wan_f=0;   //清除比赛完成标志
				bajing();  //提示比赛开始
			}			
		}
		else
			if(key_zhu==0&&qiang_f==1)   //判断是否有人犯规
			{
				buzz=1;					 //清除报警
				qiang_f=0;				 //清除抢答标志
				number=0;				 //清除选手编号
				time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
				led_kongzhi(0,0,0);
			}
			else						 
				if(key_zhu==0&&wan_f==1) //判断是否有人完成
				{
					buzz=1;				 //清除报警
					wan_f=0;			 //清除完成标志
					number=0;			 //清除选手编号
					time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
					led_kongzhi(0,0,0);
				}
				else
					if(key_zhu==0&&zhu_f==2) //暂停比赛
					{
						TR0=0;				 //关闭定时
						zhu_f=1;			 //重新回到设置比赛时间阶段
						bajing();			 //提示暂停比赛
					}
		while(!key_zhu);//检测按键松开
	}

	//加值键,支持连按
	if(key_jia==0&&zhu_f==1&&qiang_f==0)	 //判断是否在设置倒计时时间
	{
		delayms(7);							 //延时消抖
		if(key_jia==0)						 //再次判断按键按下
		{
			if(time<99)	                     //比赛时间最大值99S
				time++;					 	 //比赛时间+1S
			EEPROM_delete(0x2000);			 //擦除EEPROM煽区
			EEPROM_write(0x2000,time);		 //写入【比赛时间】数据保存
			display(time/10,time%10,10,0);	 //显示设置比赛时间
		}
	}

	//减值键,支持连按
	if(key_jian==0&&zhu_f==1&&qiang_f==0)	 //判断是否在设置倒计时时间
	{
		delayms(7);							 //延时消抖
		if(key_jian==0)						 //再次判断按键按下
		{
			if(time!=0)	  					 //比赛时间最小值0S
				time--;		                 //比赛时间-1S
			EEPROM_delete(0x2000);			 //擦除EEPROM煽区
			EEPROM_write(0x2000,time);		 //写入【比赛时间】数据保存
			display(time/10,time%10,10,0);	 //显示设置比赛时间
		}
	}
	//选手按键
	qiangda_num=qianda();
	if(qiangda_num!=0)                              //判断是否有选手按下按键
	{ 
		if(zhu_f!=2&&qiang_f==0&&wan_f==0)//如果还没有开始抢答时按下
		{
			zhu_f=1;
			buzz=0;						  //蜂鸣器报警
			qiang_f=1;					  //抢答犯规标记
			number=qiangda_num;
			led_kongzhi(number,1,0);
		}
		else
			if(zhu_f==2&&wan_f==0)			 //在开始抢答时按下
			{
				wan_f=1;					 //标记抢答完成
				zhu_f=0;					 //主持人标记复位
				TR0=0;						 //关闭倒计时定时器
				number=qiangda_num;
				led_kongzhi(number,1,0);
				bajing();					 //提示有人抢答完成
			}
	}  
}

/*********************************************************
函数名称:void main()
函数作用:主函数函数
参数说明:
*********************************************************/
void main()
{
	uchar i=0;
	T0_init();						 //定时器初始化
	if(key_jian==0)	  
	{
		delayms(100);
		if(key_jian==0)
		{
			EEPROM_delete(0x2000);	 //擦除EEPROM煽区
			EEPROM_write(0x2000,30); //写入【比赛时间】数据保存 
		}
	}
	time=EEPROM_read(0x2000);		 //读取存储的【比赛时间】数据

	for(i=0;i<9;i++)
	{
		led_kongzhi(i,1,1);
		delayms(10);	
	}

	for(i=9;i>0;i--)
	{
		led_kongzhi(i-1,0,1);
		delayms(10);	
	}
	led_kongzhi(0,0,0);
	while(1)						 //死循环
	{
		scan();						 //按键检测处理
		if(zhu_f==0&&wan_f==0)		 //判断是否还没进入比赛阶段

分享的资源有
(1)基于51单片机的八路抢答器系统设计毕业论文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)元器件清单;
(5)Visio流程图;
(6)原理图及PCB文件;

资源分享如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
资源获取方法
资源获取方法
资源获取方法
重要的事情说三遍!!!!!!!!!!!,
获取完整的八路抢答器设计论文、Proteus仿真、C程序、PCB及原理图、Visio流程图、元器件清单等全套资料。请微信搜索关注公众号:交院小智

PCB 原理图引言 单片机把我们带入了智能化的电子领域,许多繁琐的系统都由单片机进行设计,便能收到电更简单、功能更齐全的良好效果。若把经典的电子系统当作一个僵死的电子系统则是一个具有“生命”的电子系统。 随着技术的技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成为一种趋势。本设计就是基于单片机设计抢答器系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。单片机系统的硬件结构给与了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电简单、成本低、运行可靠等特色。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。 1 8数字抢答器的总体设计 1.1 方案的确定 采用MCS-51系列单片机AT89S51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电也比较少,便于控制实现。整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张更改性。 CS-51单片机特点如下: 1. 可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU ,程序指令数据都可以烧写在ROM许多信号通道都在同一芯片,因此可靠性高。 2. 易扩充:单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统. 3. 控制功能强:单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。 所以采用单片机AT89S51组成的最小系统(AT89S51加复位电外界晶体振荡器)为主要部件,加按键作为选手抢答主持人控制、4位共阴数码管为显示选手的编号剩余的抢答时间。 1.2 抢答器的工作原理 抢答器的工作原理是利用单片机的定时器T0、T1中断完成,其余状态循环调用显示子程序,用4个共阴极LED数码管来显示,用P1口作为数码管的八个段选,由于P1口为高电平呈输入状态,当有按键按下时,P1口呈高电平与按键对应的发光二极管满足点亮条件点亮。用P0口中的P2.0、P2.1、P2.2、作为4个数码管其中3个位选,P2口接8个按键,提供选手抢答,P2.3接一个按键,主持人提供开始之用。它对整个抢答器起控制作用。当主持人按下开始按键后,选手就可以按下自己的抢答键进行抢答。当主持人没有按下开始键时,选手不能抢答。当选手答题完毕后,主持人要按下复位键,准备进行下一轮抢答。 蜂鸣器:蜂鸣器主要是起到提醒报警的作用,当主持人按下开始键时,蜂鸣器响,当有选手犯规时,蜂鸣器也要发出声音,还有就是当倒计时开始时,蜂鸣器就要发出报警的声音。它是利用三极管处于开关状态时的导通与截止工作,在三极管导通时蜂鸣器工作,三极管截止时蜂鸣器不工作。 数码管显示:数码管主要显示两部分内容。一部分是参加选手的编号,另一部分是 显示倒计时。采用4位共阴数码管显示,其内部发光二极管为共阴极接低电平,当对应发光二极管一端为高电平时发光二极管点亮,显示的数字。 数码管使用条件: ﹙1﹚段及小数点上加限流电阻。 ﹙2﹚使用电压:段:根据发光颜色决定;小数点:根据发光颜色 决定。 ﹙3﹚使用电流:静态:总电流80mA(每段10mA);动态:平均电 流4-5mA,峰值电流100mA。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值