基于51单片机的8路16路抢答器proteus仿真程序设计

硬件设计

系统设计
该抢答器系统的设计是以单片机为中心控制模块,采用模块化设计的八路抢答器,具有五个模块,分别为:按键输入模块、显示模块、时钟与复位模块、核心控制模块、报警模块。
1.1按键输入模块
按键输入模块共有14个按键,分为抢答按键和控制按键。抢答按键共有八个,分别为S0―S7,供抢答选手进行抢答使用,P2.0-P2.7口为八个按键抢答信号的输入口,低电平有效。控制按键有4个,分别为 “加时间”“减时间”“开始键”“复位键”,其对应的I∕O接口分P1.0,P1.1 ,P1.2和P1.3。
1.2显示模块
显示模块既可以选用液晶显示器,也可以选用数码管显示。我们采用的是液晶显示电路来抢答选手及时间。
1.3时钟与复位模块
时钟与复位模块包括时钟电路和复位电路,单片机的最小系统就是由时钟电路、复位电路、电源电路及单片机构成。单片机的时钟信号用来提供单片机片内各种操作的时间基准,单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。根据应用的要求,复位操作通常有两种基本形式:上电复位或开关复位。当5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。
1.4核心控制模块
核心控制模块就是人们所谓的CPU,它是整个系统的总控制部分,本系统的核心控制模块为51系列的单片机,只有我们通过软件程序的编写,并将程序写入单片机,该系统才会正确的工作。
主控制器选择即为单片机的选择,单片机实际上就是把CPU、RAM、ROM、定时器/计数器、I/O接口电路等微型机的主要部件集成在一块芯片上,因此称之为单片机。
AT89C51单片机主要有以下部件构成:八位微处理器CPU、振荡电路、总线控制部件、中断控制部件、片内Flash存储器、片内RAM、并行I/O接口、定时器和串行I/O接口。AT89C51单片机内部由CPU、4KB的FPEROM ,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成。单片微机内部最核心的部分是CPU,CPU按其功能可分为运算器和控制器两部分。控制器由程序计数器PC、指令储存器、指令译码器、实时控制与条件转移逻辑电路等组成。它的功能是对来自存储器中的指令进行译码,通过实时控制电路,在规定的时刻发出各种操作所需的内部和外部的控制信号,使各部分协调工作,完成指令所规定的操作。运算器由算术逻辑器部件ALU、累加器ACC、暂存器、程序状态字寄存器PSW,BCD码运算调整电路等组成。为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻辑电路的功能。
1.5报警模块
报警电路用于报警,当遇到报警信号时,发出警报。报警模块是由一个NPN型的三极管和一个喇叭组成的。

8路 仿真图:
在这里插入图片描述

16路 仿真图:
在这里插入图片描述

程序设计:

#include<reg51.h>
#include<lcd1602.h>
sbit sjjia=P1^0;         //定义时间加按钮	
sbit sjjian=P1^1;		  //定义时间减按钮
sbit kaishi=P1^2;		  //定义开始按钮
sbit fuwei=P1^3;		  //定义复位按钮
sbit soud=P1^4;			  //报警按钮
sbit led_r=P1^5;		  //定义抢答成功指示
sbit led_y=P1^6;		   //定义阐述时间到指示

unsigned char num[]={'0','1','2','3','4','5','6','7','8','9'},num2;
unsigned char model,time,temp;

void init()	//初始化函数
{
	TMOD=0x01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	ET0=1;
	TR0=0;
	EA=1;
	P1=0x0f;

	model=0;
	time=30;
}

void delay(unsigned char i)	//延时函数
{
	unsigned char j,k;
	while(i--)
		for(j=100;j>0;j--)
			for(k=100;k>0;k--);
}

void star() //启动
{
	lcd_xml(0x80);lcd_xsj("     welcome    ");
	delay(100);
	lcd_xml(0xc0);lcd_xsj(" 8 Way Responder");
	delay(80);
}

void led_num() //刷新倒计时
{
	lcd_xml(0x80);lcd_xsj(" Countdown :    ");
	lcd_xml(0x8d);lcd_xsj2(num[time/10]);
	lcd_xml(0x8e);lcd_xsj2(num[time%10]);
}

void reset()	//复位
{
	TR0=0;
	P1=0x0f;

	led_r=0;
	led_y=0;
	P2=0xff;
	model=0;
	time=10;
	led_num();
	lcd_xml(0xc0);lcd_xsj("   Not started  ");	
}

void Not_started()
{
	if(sjjia==0)
	{
		delay(10);
		if(sjjia==0)
		{
			time++;
			if(time==100) time=0;
			led_num();
		}
	}
	if(sjjian==0)
	{
		delay(10);
		if(sjjian==0)
		{
			time--;
			if(time==0) time=99;
			led_num();
		}
	}
	if(kaishi==0)
	{
		delay(10);
		if(kaishi==0)
		{
			model=1;
			TR0=1;
			lcd_xml(0xc0);lcd_xsj(" Start Responder");
			soud=1;delay(10);soud=0;
		}
	}
}

void anjian()
{

	if(P2 != 0xff)
	{
		delay(5);
		if(P2 != 0xff)
		{
			temp=~P2;
			model=3;
			led_r=1;
			soud=1;delay(10);soud=0;	
			switch(temp)
			{
				case 0x01:num2=1;break;
				case 0x02:num2=2;break;
				case 0x04:num2=3;break;
				case 0x08:num2=4;break;
				case 0x10:num2=5;break;
				case 0x20:num2=6;break;
				case 0x40:num2=7;break;
				case 0x80:num2=8;break;			
			}
			lcd_xml(0xc0);lcd_xsj(" Competitor:   ");
			lcd_xml(0xce);lcd_xsj2(num[num2]);

			time=60;
			P2=temp;
		}	
	}
}

void finish()
{
	if(!time)
	{
		led_y=1;
		lcd_xml(0xc0);lcd_xsj("      End       ");	
	}
}

void main()
{
	init();
	lcd_init();
	star();
	reset();
	while(1)
	{
		if(fuwei==0)	//复位键检测
		{
			delay(1);
			if(fuwei==0)
				reset();
		}
		switch(model)
		{
			case 0:Not_started();break;
			case 1:anjian();break;
			case 2:finish();break;
			case 3:break;
			default : model=0;break;	
		}
	}
}

void timee() interrupt 1	//1s函数中断
{
	unsigned char a;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	a++;	//是否满1s
	if(a==24)
	{
		a=0;
		if(model==1 || model==3)
		{
			time--;
			led_num();
			if(time==0)
			{
				model=2;
				soud=1;delay(20);soud=0;
			}
		}
	}
}

附:http://www.jh-tec.cn/archives/7280

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值