智力竞赛抢答器设计(附有程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智力竞赛抢答器设计
摘要
随着我国经济和文化事业的发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。
抢答器又称为第一信号鉴别器,其主要应用于各种知识竞赛、文艺等场合。
本次设计的4路抢答器主要是采用AT89C51单片机作为核心,实现控制4个独立式键盘抢答按钮,单位静态数码显示,手动复位等功能。
控制系统的四个模块分别为:单片机最小系统、显示模块、抢答开关模块和音频输出模块。
通过本设计后,可以很快的判断出是谁最快抢答成功,并且马上进入答题倒计时,比赛即将结束时,能发出报警声,同时在显示模块上显示出倒计时时间的提示。
整体设计方案
一各功能模块介绍
1单片机模块
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统。
单片机是将中央处理器,随机存储器。
只读存储器,定时器芯片和I/O接口电路集成于一个芯片上的微控制器。
本设计采用的是由PDIP40封装的AT89C51单片机,此单片机由40个引脚组成,40个引脚按功能分为3个部分,即电源和时钟引脚(Vcc和GND,时钟引脚XTAL1 和XTAL2),编程控制引脚(RST,PSEN,ALE/PROG,EA)以及I/O口引脚(P0,P1,P2,P3四组8位I/O口)。
下图为AT89C51单片机及引脚封装图
AT89C51单片机的各引脚功能如下:
(1)Vcc:供电电压
(2)GND:接地。
(3)P0口:P9口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在Flash编程时,P0口作为原码输入口,当Flash进行校验时,P0输出原码,此时P0外部必须被拉高。
(4)P1口:P1口是一个内部提供的上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故,。
在Flash编程和校验时,P1作为第八位地址接收。
(5)P2口:P2口为一个内部上拉电阻的8位双向I/O 口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在Flash编程和校验时接收高八位地址信号和控制信号。
(6)P3口:P3口管脚是8个带内部上拉电阻的双向I/O 口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:P3口功能引脚简介
P3口同时为闪烁编程和编程校验接收一些控制信号。
(7)RST:复位输入。
当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。
(8)ALE/RPOG:当访问外部存储器时,地址锁存允许的输出电平由于锁存地址的地位字节。
在Flash编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳出一个ALE脉冲。
如想禁止
ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(9)/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(10)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在Flash编程期间,此引脚也用于施加12V编程电源(VPP)。
(11)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
(12)XTAL2:来自反向振荡器的输出。
2独立按键模块
利用4个常开按钮开关S1~S4和4只电阻R1~R4组成抢答器的输入电路。
S1~S4为自复式常开按钮开关,分别作为4位抢答按钮,与它相连的4只电阻为下拉电阻,以保证按钮未按下时,锁存器的输入端为低电平。
当程序执行时,按下按键,七段数码管显示器上即显示相应的是哪个组按下抢答。
在复位电路中利用独立按键K0进行复位,在选手进行一次抢答完成后复位,进行下一轮抢答。
3LED数码管显示模块
在本设计中采用七段数码管进行对选手号的显示,哪位选手先按下按键就显示哪位选手,便于裁判判断是哪位选手抢答成功。
七段数码管内部由七个发光二极管组成,外加七个NPN
型三极管,进行扩流,本设计中数码管连接方式为共阴极。
4LED灯模块
本设计中LED灯模块由发光二极管组成,发光二极管采用共阴极连接方式,输入高电平二极管才会发光,发光二极管与单片机引脚之间需加一电阻,以保护二极管正常发光。
二硬件电路设计
1总体设计
根据抢答器的基本功能,可以设计出如下的单片机外围电路:
如图所示,选手抢答按键开关接在P1^0-P1^3口,数码管显示接在P0^0-P0^6口,LED灯接在P2^0-P2^4口,蜂鸣器接在P3^2口,主持人复位接在P3^3口,还有外部振荡电路,系统复位电路
2选手抢答按键
3数码管显示模块
4LED显示模块
LED显示采用共阴极连接,输入高电平会显示选手抢答成功,还需外加一电阻进行保护。
5蜂鸣器原理图
6系统复位电路
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态。
7外部振荡电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms 后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
8主持人复位电路
三系统软件设计
我们组所设计的抢答器的程序采用的是C程序设计,C 语言的显著特点是用二进制来编写程序,程序的各个部分除了必要的信息交流外彼此之间相互独立。
这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
主程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit all_control_key=P3^3;
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit all_control_led=P2^4;
sbit beep=P3^2;
uchar digital[]={0x3f,0x06,0x5b,0x4f,0x66};
bit flag_all_control=0;
bit flag_every_enable=0;
/*
0 1 2 3 4
a 1 0 1 1 0
b 1 1 1 1 1
c 1 1 0 1 1
d 1 0 1 1 0
e 1 0 1 0 0
f 1 0 0 0 1
g 0 0 1 1 1
0 0 0 0 0
*/
void delay_ms(uint i);
void init_system();
void main()
{
uint i=0;
init_system();
while(1)
{
if(all_control_key==0)
{
delay_ms(5);
if(all_control_key==0)
{
while(!all_control_key);
flag_all_control=~flag_all_control;
if( flag_all_control==0)
{
all_control_led=0;
led1=0;
led2=0;
led4=0;
P0=0X00;
flag_every_enable=0;
}
else
{
all_control_led=1;
led1=0;
led2=0;
led3=0;
led4=0;
P0=digital[0];
}
}
}
if(flag_all_control==1)
{
if((key1==0)&&(flag_every_enable==0) )
{
delay_ms(5);
if(key1==0)
{
flag_every_enable=1;
led1=1;
led2=0;
led3=0;
led4=0;
P0=digital[1];
beep=1 ;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
beep=0 ;
}
}
if((key2==0)&&(flag_every_enable==0))
{
delay_ms(5);
if(key2==0)
{
flag_every_enable=1;
led1=0;
led3=0;
led4=0;
P0=digital[2];
beep=1 ;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
beep=0 ;
}
}
if((key3==0)&&(flag_every_enable==0)) {
delay_ms(5);
if(key3==0)
{
flag_every_enable=1;
led1=0;
led2=0;
led3=1;
led4=0;
P0=digital[3];
beep=1 ;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
beep=0 ;
}
}
if((key4==0)&&(flag_every_enable==0)) {
delay_ms(5);
if(key4==0)
{
flag_every_enable=1;
led1=0;
led2=0;
led3=0;
led4=1;
P0=digital[4];
beep=1 ;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
beep=0 ;
}
}
}
}
}
void delay_ms(uint i) // 毫秒级延时(A T89C52 @ 11.0592MHz) {
uint j;
while(i--)
{
for(j=0;j<112;j++){}
}
}
void init_system()
{
all_control_led=0;
led1=0;
led2=0;
led3=0;
led4=0;
beep=0;
P0=0X00;
P0=digital[0];
all_control_led=1;
led1=0;
led2=0;
led3=0;
led4=0;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P0=digital[1];
all_control_led=0;
led1=1;
led2=0;
led3=0;
led4=0;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P0=digital[2];
all_control_led=0;
led1=0;
led2=1;
led3=0;
led4=0;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P0=digital[3];
all_control_led=0;
led1=0;
led2=0;
led3=1;
led4=0;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
P0=digital[4];
all_control_led=0;
led1=0;
led2=0;
led3=0;
led4=1;
delay_ms(200);
delay_ms(200);
delay_ms(200);
delay_ms(200);
all_control_led=0;
led1=0;
led2=0;
led3=0;
led4=0;
beep=0;
P0=0X00;
}
这是我们的设计作品,在本次设计中,虽然有很多的不足之处,但也学到了很多东西,最主要的是学会了proteus 软件的使用,在以后还要去学习更多的东西。