基于单片机的五路抢答器设计与仿真【毕设课设论文】

摘要

本文介绍了一种基于单片机设计的数显五路抢答器,详细阐述了其电路组成、设计思路及各项功能。该抢答器不仅具备基本的抢答功能,还融入了倒计时和报警提醒功能,以满足多样化的使用需求。通过按下开始抢答按键,系统将自动启动倒计时,选手通过矩阵键盘进行抢答。在规定时间内若有选手抢答成功,系统将停止计时并显示抢答号码,同时指示灯以较慢的频率闪烁。若无人抢答,则系统倒计时结束后显示0,并发出报警声。此外,对于抢答前的误操作,系统也设计了相应的报警机制。

关键词:抢答器;矩阵按键;独立按键;数码管;计时;报警

一、引言

随着科技的进步和智能化的发展,各类竞赛活动日益增多,对于抢答器的需求也日益旺盛。传统的抢答器往往功能单一,无法满足现代竞赛的多样化需求。因此,本文设计了一种基于单片机的数显五路抢答器,旨在提升抢答器的功能性和用户体验。

二、系统组成与功能

1. 系统组成

本系统主要由单片机、矩阵键盘、数码管显示器、LED指示灯、蜂鸣器等组成。单片机作为核心控制单元,负责接收按键输入、控制计时、显示及报警等功能。矩阵键盘用于选手进行抢答操作,数码管显示器用于显示倒计时时间和抢答结果,LED指示灯和蜂鸣器则用于提供视觉和听觉的反馈。

2. 功能介绍

(1)抢答功能:主持人按下开始抢答按键后,系统开始倒计时。选手在倒计时期间通过矩阵键盘进行抢答,若成功抢答,系统将停止计时并显示抢答号码。

(2)倒计时功能:系统根据预设的时间进行倒计时,倒计时期间数码管显示器实时显示剩余时间。

(3)报警提醒功能:若在规定时间内无人抢答,系统倒计时结束后将显示0,并发出报警声以提示主持人。此外,对于抢答前的误操作,系统也会通过蜂鸣器发出不同的报警声以进行区分。

三、电路设计

1. 单片机电路

单片机作为整个系统的核心,其电路设计至关重要。本设计中采用了常见的89C51单片机,通过合理的引脚分配和电路设计,实现了对按键输入、数码管显示、LED指示和蜂鸣器的控制。

2. 按键电路

按键电路包括矩阵键盘和独立按键两部分。矩阵键盘用于选手抢答,独立按键用于主持人控制抢答的开始和结束。通过合理的电路设计,实现了对按键信号的稳定采集和处理。

3. 显示与报警电路

数码管显示器用于显示倒计时时间和抢答结果,LED指示灯和蜂鸣器则用于提供视觉和听觉的反馈。通过单片机的控制,实现了对显示内容和报警方式的灵活调整。

四、软件设计

软件设计是整个系统的灵魂,本设计中采用了C语言进行编程。通过合理的程序设计,实现了对按键扫描、计时控制、显示更新和报警提醒等功能的实现。同时,为了提高系统的稳定性和可靠性,还加入了一些防抖动和错误处理的机制。

五、测试与验证

在实际应用中,本设计经过了多次测试和验证,结果表明其各项功能均能满足预期要求。无论是抢答的准确性、倒计时的稳定性还是报警的及时性,都表现出了良好的性能。

六、结论

本文介绍了一种基于单片机的数显五路抢答器,通过合理的硬件和软件设计,实现了抢答、倒计时和报警提醒等功能。该设计具有较高的实用性和可靠性,适用于各类竞赛活动。未来,我们还将继续优化和完善该设计,以满足更多场景的需求。

 

 

#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^0;		//定义数码管第一位
sbit smg2=P2^1;		//定义数码管第二位
sbit deng1=P2^3;		//灯1号
sbit deng2=P2^4;		// 灯2号
sbit deng3=P2^5;		// 灯3号
sbit deng4=P2^6;		// 灯4号
sbit deng5=P2^7;		// 灯5号


sbit keyksqd=P3^7;	//定义开始按键
sbit spk=P3^6;		//定义蜂鸣器
int dingshi;js;    	//初始倒计时时间
int keyhao;			//矩阵键值
int buzzbiaozhi=1;	//10S倒计时结束后蜂鸣器响一下的标志位
int biaozhi1=0,biaozhi2=0,biaozhi3=0,biaozhi4=0,biaozhi5=0;	 //正确抢答唯一
int xxxx=0;   //犯规抢答标志位
int flagD=0; // 控制是否显示倒计时	 
int zqqd,fgqd;		   //zqqd正确抢答,fgqd犯规抢答
int  jishu;			 //用来控制LED闪烁的快慢,防止数码管闪烁
int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X71};	// 数码管段码0 1 2 3 4 5 6 7 8 9 f
 

 //******延时子程序****//
void delayms(unsigned z)	  //定义毫秒
{
	unsigned x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);   
}



void Timer0_init()			//定时器0初始化
{
    js=0;
	TMOD=0x01;				//设置定时器0为工作方式1(M1M0为01)
	TH0=(65536-50000)/256;	//装初值12M晶振定时50ms数为50000,1US是1000初始值,所以50ms是5万
	TL0=(65536-50000)%256;		
	ET0=1;						//开定时器0中断
	EA=1;						//开总中断
}

void timer0() interrupt 1 using 1	//定时器0中断服务函数
{
	TH0=(65536-50000)/256;		//装初值12M晶振定时50ms数为50000
	TL0=(65536-50000)%256;	
	js++;						//叠加20次
	if(js==20) 
	{ 
	  js=0;						//清空
	  dingshi--;					//产生1s的倒计时
	 }
}

  ///矩阵按键//
 unsigned char key_juzhen(void)
{
        unsigned key_value=0;

        P1=0xf7;//给第一列赋值0,其余全为1
        if(P1!=0xf7)//判断第一列按键是否按下
        {
                delayms(10);//消抖
                switch(P1)//保存第一列按键按下后的键值        
                {
                        case 0x77: key_value=1;break;			  //记录键值1
                        case 0xb7: key_value=5;break;			  //记录键值5
                        case 0xd7: key_value=9;break;			   //记录键值9
                        case 0xe7: key_value=13;break;			   //记录键值13
                }
        }

....部分代码

资料下载地址:

https://docs.qq.com/doc/p/ffc421513a628b30450ae742547c0b850456d7c8

 

作者:Mr song song

物联沃分享整理
物联沃-IOTWORD物联网 » 基于单片机的五路抢答器设计与仿真【毕设课设论文】

发表回复