• 方案介绍
    • 1.  简介
    • 2.  主要功能
    • 3.  源程序(Keil5)
    • 4.  仿真proteus8.6
    • 5.  设计报告
    • 6.  资料清单
    • 7.  资料获取链接
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的8路抢答器设计(一)

04/17 10:01
2995
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【O01】

1.  简介

  本文提出了一种基于51单片机的8路抢答器设计。该设计在硬件方面主要采用AT89C51单片机作为主控核心,结合独立按键、数码管蜂鸣器。抢答限定时间为60S,只有在开始后抢答才有效,当选手抢答后显示倒计时时间以及对应的抢答选手,在倒计时5S内蜂鸣器提示,倒计时结束后自动复位。

2.  主要功能

a.设计一个可供8人进行的抢答器。

b.系统设置开始、暂停、复位按钮,按动复位后,重新开始抢答。

c.抢答器开始时数码管显示----,抢答后显示优先抢答者序号,同时发出音响。

d.抢答器的时间设定为60秒,当主持人启动“开始”开关后,定时器开始减计时,倒计时5S内蜂鸣器提示。

e.设定的抢答时间内,选手可以抢答,显示器上显示选手的号码和抢答时间,并保持到主持人按复位键。

f.当倒计时结束而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。

3.  源程序(Keil5)

本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

#include<reg51.h>
#include<intrins.h>
sbit smg1=P2^4;		//定义数码管第一位
sbit smg2=P2^6;		//定义数码管第二位
sbit smg3=P2^7;		//定义数码管第三位
sbit smg4=P2^5;

sbit keyks=P2^2;	//定义开始按键
sbit keytz=P2^1;	//定义停止按键
sbit keyqc=P2^0;	//定义清除按键

sbit key1=P1^4;		//定义1号抢答选手		 sbit
sbit key2=P1^5;		//定义2号抢答选手
sbit key3=P1^6;		//定义3号抢答选手
sbit key4=P1^7;		//定义4号抢答选手
sbit key5=P3^4;		//定义5号抢答选手
sbit key6=P3^5;		//定义6号抢答选手
sbit key7=P3^6;		//定义7号抢答选手
sbit key8=P3^7;		//定义8号抢答选手
sbit spk=P1^0;		//定义蜂鸣器
int djs=60,js=0;		   //djs和bt是初始倒计时时间,可修改
unsigned char flag=0;
//int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80};

void delayms(int x)	   //延时函数
{
char i;
while(x--)
 {
  for(i=500;i>0;i--); 
 }
}
 


void Timer0_init()			//定时器0初始化
{
      js=0;
	  TMOD=0x01;	  			//T0为定时器方式1
      TH0=60;
	  TL0=176;			
      //TR0=1;//IT1=1;
	  ET0=1;//EX1=1;
	  EA=1;	
}

void timer0() interrupt 1 using 1	//定时器0中断服务函数
{
	    TF0=0;
	 	TH0=60;
		TL0=176;					//赋初值
		js++;
		if(flag==1)
		  {
		   if(js<8)
		      spk=0;
			else spk=1;
		  }
		if(js==20) 
		  { js=0;
		    djs--;					//产生1s的倒计时
		   }
}

void djsxs()				   //显示倒计时函数
 {	int b1,b2;
 	b1=djs/10;
	b2=djs%10;				  // 将倒计时时间分成高低位
	P0=table[b1];
    smg2=0;
    delayms(3);
    smg2=1;					 //显示十位数字

	P0=table[b2];
	smg3=0;
	delayms(3);				 //显示个位数字
	smg3=1;
}
void djsxs30() //第二位数码管显示-
     {
	  P0=0x80;			//第二位数码管
	  smg4=0;
	  delayms(3);
	  smg4=1;
	 }
void djsxs22()				 
 {	
 	P0=0x80;
    smg1=0;
    delayms(3);
    smg1=1;
						//第一位数码管显示-
    P0=0x80;			//第二位数码管
	smg4=0;
	delayms(3);
	smg4=1;
		
	P0=0x80;
    smg2=0;
    delayms(3);			   //第三位数码管显示-
    smg2=1;

	P0=0x80;
	smg3=0;
	delayms(3);
	smg3=1;				  //第四位数码管显示-
}

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;		//倒计时赋值

4.  仿真proteus8.6

  本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

初始界面:

开始倒计时:

选手抢答:

5.  设计报告

设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。

6.  资料清单

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.  资料获取链接

百度网盘下载链接:【O01】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载

相关推荐