单片机抢答器超详细的完整设计资料 有视频讲解 论文 实物 仿真

目录

1、设计内容和要求

2、资料内容

3、实物图

4、仿真图

5、部分程序 

资料下载地址:单片机抢答器超详细的完整设计资料 有视频讲解 论文 实物 仿真

1、设计内容和要求

        本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用STC89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间为60秒,倒计时为5秒时蜂鸣器报警,选手抢答成功后显示选手编号以及剩余时间。

1) 八个按键分别表示1至8号选手。

2) 有开始键,暂停键,复位键。

3) 当按下开始键后,从60秒开始倒计时,当倒计时为5秒时,蜂鸣器报警。

4) 有选手按下抢答按键后,数码管显示选手编号和剩余时间。

5) 抢答成功后按复位键从新开始。

2、资料内容

3、实物图

4、仿真图

 

5、部分程序 

void djsxs1()
 {
	P0=table[1];
    smg1=0;
    delayms(3);
    smg1=1;				   //第一位数码管显示1

}
void djsxs2()
 {
	P0=table[2];
    smg1=0;
    delayms(3);
    smg1=1;				//第一位数码管显示2

}
void djsxs3()
 {
	P0=table[3];
    smg1=0;
    delayms(3);
    smg1=1;			  //第一位数码管显示3

}
void djsxs4()
 {
	P0=table[4];
    smg1=0;
    delayms(3);
    smg1=1;			 //第一位数码管显示4

}
void djsxs5()
 {
	P0=table[5];
    smg1=0;
    delayms(3);
    smg1=1;		   //第一位数码管显示5

}
void djsxs6()
 {
	P0=table[6];
    smg1=0;
    delayms(3);
    smg1=1;			//第一位数码管显示6

}
void djsxs7()
 {
	P0=table[7];
    smg1=0;
    delayms(3);
    smg1=1;		  //第一位数码管显示7
}
void djsxs8()
 {
	P0=table[8];
    smg1=0;
    delayms(3);
    smg1=1;		 //第一位数码管显示8

}
void main()
{
	int djs1=60;
	Timer0_init();	 //初始化定时器中断
	spk=1;			  //蜂鸣器不响
	djs=60;		//倒计时赋值
	while(1)
	{
	
		LOOP1:   djs=djs1;
		djsxs22();	//LOOP1是标号,显示 -  --
		
		
		if(keyks==0)
		{		   
			//spk=0;
			delayms(300);		 //去除按键抖动
			if(keyks==0)
			{ 
				while(!keyks);	  //以上表示按下开始按键 
				//spk=1;			   //蜂鸣器不响
				TR0=1;			   //启动定时器 开始倒计时
				while(1)
				{
					djsxs();
					if(keytz==0)
					{
						delayms(300);			 //此处表示出去抖动, 以后不一一标出
						if(keytz==0)
						{ 
							while(!keytz);	   //以上表示按下停止按键后 
							TR0=0;		   //定时器停止
						}
					}
					if(keyks==0)
					{
						//spk=0;
						delayms(300);
						if(keyks==0)
						{ 
							while(!keyks);	   //以上表示按下清楚按键后 
							//spk=1;			   //蜂鸣器不响
							TR0=1;		   //定时器启动
						}
					}
/***************************以下是八个选手抢答,key1表示1号选手,依次类推,注释只写第一位选手,其他和第一个完全一致,************************************/
					if((key1==0)&&(TR0==1))		 //在定时器运行状态下,key1==0 则说明1号选手按下按键
					{		 
						spk=0;		 //蜂鸣器响
						delayms(3);
						if(key1==0)
						{ 
							while(!key1);	  //去除按键抖动后,重新在判断,是否确实按下
							spk=1;		  //蜂鸣器不响
							while(1)
							{
								TR0=0;		  //定时器停止
								djsxs1();	  //显示选手编号
								djsxs();	  //显示剩余倒计时时间
								if(keyqc==0)
								{	
									delayms(3);		   //去除抖动
									if(keyqc==0)
									{ 
										while(!keyqc); //如果按下清楚键,则回到- --状态
										goto LOOP1;		  //goto语句,回到loop1表号处
									}
								}										   
							}
						}
					}
					if((key2==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key2==0)
						{ 
							while(!key2);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs2();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}										   
							}
						}
					}
					if((key3==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key3==0)
						{ 
							while(!key3);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs3();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}										   
							}
						}
					}
					if((key4==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key4==0)
						{ 
							while(!key4);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs4();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}										   
							}
						}
					}
					if((key5==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key5==0)
						{ 
							while(!key5);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs5();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}										   
							}
						}
					}
					if((key6==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key6==0)
						{ 
							while(!key6);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs6();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}										   
							}
						}
					}
					if((key7==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key7==0)
						{ 
							while(!key7);
							spk=1;
							while(1)
							{
								TR0=0;
								djsxs7();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}	   
							}
						}
					}
					if((key8==0)&&(TR0==1))
					{
						spk=0;
						delayms(3);
						if(key8==0)
						{ 
							while(!key8);
							
							while(1)
							{
								TR0=0;
								spk=1;
								djsxs8();
								djsxs();
								if(keyqc==0)
								{	
									delayms(3);
									if(keyqc==0)
									{ 
										while(!keyqc);
										goto LOOP1;	
									}
								}	   
							}
						}
					}  
					if(djs<=5)  spk=0;	  //到倒计时小于5是,蜂鸣器响
					if(djs==0)			   //当倒计时时间等于0后,需要按清楚键恢复
					{
						while(1)
						{
							if(keyqc==0)
							{	
								delayms(3);
								if(keyqc==0)
								{ 
									while(!keyqc);
									spk=1;		  
									goto LOOP1;	
								}
							}
						}
					} 
				}
			}
		}
	}
}

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
抢答器是一种常见的电子设备,主要用于比赛或课堂上,用于快速确定参与者或学生谁最先回答问题或按下按钮。基于单片机设计是一种常见的抢答器设计方法。 基于单片机抢答器设计可以使用实验箱或Proteus仿真软件进行开发和测试。 首先,设计需求包括:按钮开关、显示屏、倒计时功能和正确错误指示灯。 接下来,根据设计需求,我们需要选取适当的单片机,例如常见的51单片机。然后,将单片机与按钮开关、显示屏、指示灯等外部元件进行连接。 通过编程,可以实现以下功能: 1. 开关检测:使用单片机的IO口来检测按钮开关是否按下。当按钮按下时,发送信号给单片机,触发抢答动作。 2. 倒计时功能:使用定时器功能,实现倒计时功能。可以设置倒计时的时间,并在倒计时结束后触发相应的动作,例如熄灭指示灯或开启下一轮抢答。 3. 显示屏:连接显示屏到单片机的IO口,实现显示倒计时时间或其他相关信息。可以利用数码管或LCD显示屏作为显示装置。 4. 正确错误指示灯:设计两个指示灯,一个代表正确答案,一个代表错误答案。根据参与者的回答情况,触发相应的指示灯亮起。 在Proteus仿真软件中,可以进行电路图的设计和模拟,通过添加相应的元件和连接线,模拟实验箱中的硬件连接。然后,编写单片机的程序,并在仿真软件中进行调试和测试。 通过基于单片机设计,可以实现一个功能完善的抢答器。这种设计不仅能提高交互效果,还可以增加比赛或课堂的趣味性和互动性,提高学生参与度和竞技性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

森旺电子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值