单片机/MCU论坛
直播中

蒋宇智

未满1年用户 64经验值
擅长:嵌入式技术
私信 关注
[文章]

基于51单片机的多路抢答器的设计与制作,电路,程序,原理图,论文

设计要求

1)抢答器同时供8名选手或2个代表队比赛,分别用8个按钮S0-S7表示;

2)设置一个系统清除和抢答控制开关S,该开关由主持人控制;

3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止;

4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30s等)。当主持人启动“开始”按键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续时间为0.5s左右;

5)参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止;

6)如果定时时间到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00;

7)设计出软件编程方法,并写出源代码;

8)用Proteus进行仿真,Altium Designer绘制原理图和PCB;

概述

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

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

本系统采用51单片机作为整个控制核心。控制系统主要由:显示模块、控制模块、报警模块和抢答模块组成。设计获取,作者QQ:2327603104.

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

系统结构图.jpg

Proteus仿真电路

仿真全图小.jpg

单片机抢答器操作说明.jpg

原理图及PCB

原理图.jpg

PCB.jpg

仿真结果分析

加载“八路抢答器.hex”文件到51单片机,点击运行。八路抢答器程序初始化后,数码管显示:----。等待主持人按键输入。

运行1.jpg

按下“主持人”键,数码管显示:00-0。此时,可以通过“计时+”和“计时-”键,设置计时时间。本例中,我们设置计时时间为30秒。

运行2.jpg

运行3.jpg

再次按下“主持人”键,蜂鸣器哔的一声,倒计时开始,8位选手可以开始进行抢答。假设3号选手,在计时时间内抢答成功。此时,计数停止,数码管显示剩余计时数和当前选手号,其对应的3号LED灯点亮。

运行5.jpg

倒计时,还剩5秒时,若仍没有选手抢答,此时蜂鸣器发出连续提示音。若计时结束,无人抢答,此时数码管显示:00-0;按下“主持人”键,数码管显示:----;再次按下“主持人”键,显示30-0;

如果不对计时时间作修改,再次按下“主持人”键,新一轮计时开始。

如果,在主持人未开始计时时,即抢答未开始前,有人抢答。假设2号选手抢答,此时数码管显示:FF-2,蜂鸣器长鸣,2号红色LED灯点亮。获取设计,作者QQ:2327603104.

选手犯规抢答后,按下‘主持人’键,蜂鸣器停止,数码管显示:00-0,主持人设置时间,重新开始。

运行6.png

部分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); //延时消抖
               //资源获取,作者QQ:2327603104.
		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);//显示设置比赛时间
		}
	}
	//选手按键

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

**资源截图

资源.jpg

资源3.jpg

资源4.jpg

资源5.jpg

资源6.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分