八路抢答器终极版.docx

上传人:b****6 文档编号:7495941 上传时间:2023-01-24 格式:DOCX 页数:20 大小:285.66KB
下载 相关 举报
八路抢答器终极版.docx_第1页
第1页 / 共20页
八路抢答器终极版.docx_第2页
第2页 / 共20页
八路抢答器终极版.docx_第3页
第3页 / 共20页
八路抢答器终极版.docx_第4页
第4页 / 共20页
八路抢答器终极版.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

八路抢答器终极版.docx

《八路抢答器终极版.docx》由会员分享,可在线阅读,更多相关《八路抢答器终极版.docx(20页珍藏版)》请在冰豆网上搜索。

八路抢答器终极版.docx

八路抢答器终极版

八路智力竞赛抢答器的设计说明书

一、引言

工厂、学校和电视台等单位常举办各种智力竞赛,抢答记分器是必要设备。

在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性。

为解决这个问题,我们小组准备就本次电工实习的机会制作一个低成本但又能满足学校需要的八路数显抢答器。

二、课程设计的内容与要求

总体方案的设计与选择:

制作抢答器可以用好多的方法,可以用PLC来实现,他的制作也是比较简单;还可以用我们学过的EDA技术来制作;也可以用数字电路来实现,它的原理比较简单,集成块的价格也比较便宜且很容易购买。

最后也可以用单片机来完成,它的功能强大制作简单,并且外围的元件也很少,使总体方案易于实现。

●方案一〈采用单片机〉

原理方框图

(图1)

 

此电路完成的功能如图1所示,当主持人宣布抢答开始的时候,按下开始按钮,此时电路进入抢答状态,选手的输入采用了扫描式的输入,之后把相应的信息送往单片机,再由单片机输出到显示输出电路中。

此时有人第一按下相应的抢答按钮,经过单片机的控制选择,在八段显示器上显示相应的号码,并锁存,同时禁止其他按钮的输入。

 

●方案二〈采用数字电路〉

1、原理方框图

图2

定时抢答器的总体框图如图2所示,它由主体电路和扩展电路两部分组成。

主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。

扩展电路完成定时抢答的功能。

图2所示的定时抢答器的工作过程是:

接通电源时,节目主持人将开关置于“清除”位置,抢答器处于禁止工作状态,编号显示器灭灯,定时显示器显示设定的时间,当节目主持人宣布“抢答开始”,同时将控制开关拨到“开始”位置,扬声器给出声响提示,抢答器处于工作状态,定时器倒计时。

当定时时间到,却没有选手抢答时,系统报警,并封锁输入电路,禁止选手超时后抢答。

当选手在定时时间内按动抢答键时,抢答器要完成以下四项工作:

①优先编码电路立即分辨出抢答者的编号,并由锁存器进行锁存,然后由译码显示电路显示编号;

②扬声器发出短暂声响,提醒节目主持人注意;

③控制电路要对输入编码电路进行封锁,避免其他选手再次进行抢答;

④控制电路要使定时器停止工作,时间显示器上显示剩余的抢答时间,并保持到主持人将系统清零为止。

当选手将问题回答完毕,主持人操作控制开关,使系统回复到禁止工作状态,以便进行下一轮抢答。

 

●方案三〈采用PLC〉

1、

原理方框图

(图3)

此电路的功能如图3所示,当主持人打开启动开关后,在设定时间TO内,如果某组抢先按下抢答按钮,则驱动音效电路①发出声响,指示灯LI亮,并且在8段数码管显示器上显示出抢答成功的组号,此时电路实现互锁,其他组再按下抢答按钮为无效;

如果在时间TO内,无人应答,则驱动音效电路②发出声响,指示灯L2亮,表示抢答者均放弃该题;

在抢答成功后,主持人打开限时开关SW2,启动计时器,在设定的时间TI内回答有效,当到达设定时间TI时,驱动音效电路③,指示灯L3亮,表示答题时间到。

三、方案选择

方案比较

单片机

数字电路

PLC

制作难度

一般

一般

实现难度

价格

一般

电路原理

一般

简单

一般

设计难度

简单

一般

 

通过上面的方案比较,单片机的制作方案容易实现,并且在原理方面有助于提升我们的编程能力的运用,所以我选择采用第一种方案来完成抢答器电路。

我选择Freescale公司的9S12XS128单片机作为抢答器的中心控制器,使用清华FreescaleMCU/DSP应用开发研究中心设计制造的系统板进行电路设计。

 

四、设计任务及系统功能简介

1.八路抢答器的基本功能:

(1)抢答器同时供8名选手或8个代表队比赛,分别用8个按钮1-8表示。

(2)设置系统复位和抢答控制开关,这两个开关由主持人控制。

(3)设置十个按键供主持人选择时间,每个按键分别对应10秒,20秒……100秒。

如果不选择时间,则每道题默认为11秒的抢答倒计时时间。

(4)上述十个按键同时具备除上述时间选择的功能外,还具备另一功能,其中,1-8号按键供选手抢答使用;9、10号按键供主持人判断选手答题正误使用。

(现实生活中的抢答器只需将按键并联一个就可以供主持人与选手分开使用)

(5)抢答器具有显示与声音提示功能与发光管提示功能。

当主持人确定抢答时间后,四位数码管显示抢答总时间,当主持人发令开始之后,四位数码管以0.1秒的精确度显示倒计时时间。

使用绿灯,黄灯分别表示选手答题是否正确,而在每个选手按键上面设置红灯提醒选手抢答开始与结束。

(6)在抢答时间内,当选手按动按钮,蜂鸣器发出连续两秒的声响提示,并在数码管上交替显示选手编号和抢答截止时间。

优先抢答选手的编号与抢答截止时间一直保持到主持人将系统复位为止。

(7)如果定时时间已到,无人抢答,本次抢答无效,蜂鸣器发出沉闷的报警声音,同时表示答题错误的黄灯发亮并禁止抢答,定时显示器上显示“0000”直到主持人将系统复位为止。

(8)当选手答题结束之后,主持人使用“9号”、“10号”按键判断选手答题正确或错误。

当主持人按动按键“9”,选手答题正确,蜂鸣器发出一阵轻快的声响且绿灯亮,同时数码管显示“1111”以表示选手答题正确;当主持人按动按键“10”,选手答题错误,蜂鸣器发出一阵沉闷的声响且黄灯亮,同时数码管显示“0000”以表示选手答题错误。

数码管显示不变直到主持人将系统复位为止。

2.系统电路图

图四是为系统供电的电源模块。

我使用了“飞思卡尔”智能车竞赛规定使用的7.2V直流电池作为总电源,运用了稳压芯片2940将其降压为5V的稳压直流供单片机使用。

该5V输出电源输出电流可达1A以上,输出电压相对变化量小于1%,输出电阻R0<0.1Ω,输出最大纹波电压小于5mV。

 

 

(图四)

 

(图五)

图五为9S12XS128单片机接口与系统外围电路的连接方式,使用单片机的11个PAD口连接按键作为输入端口,使用8个PB和4个PA口输出控制4位共阳数码管的显示,使用3个PK口输出控制绿灯,黄灯和红灯的发光,使用4个PE口并联控制蜂鸣器的发声。

3.系统控制策略

系统使用C语言编写程序,达到上述所说的功能。

◆时间选择控制策略:

使用1-10号按键分别供主持人选择时间,分别表示10秒-100秒,按键与单片机PAD0-7口通过下拉电阻连接,按键另一端接地,当按下按键时,为PAD口输入低电平,当PAD口接低电平时,程序捕捉到按键的编号,并且为系统设置相应的倒计时时间。

而不选择时间时,系统将运行默认时间“11秒”。

◆八路抢答按键控制策略:

使用上述按键中的1-8号按键作为选手抢答按键,抢答功能必须在主持人按动开始按键之后才能生效,所以程序将在捕捉到“开始”按键按下,既相应的PAD口接地之后,程序才转入选手开始抢答的程序中。

◆发光管显示控制策略:

1-8号按键旁设置的红灯并联使用,连接单片机的PK2接口,用以提示选手可以开始抢答。

当程序捕捉到“开始”按键按下时,程序立即设置PK2口输出高电平,使8个红灯发光。

当程序捕捉到1-8号按键按下时,程序立即设置PK2口输出低电平,使8个红灯熄灭。

9、10号按键旁分别设置了绿灯与黄灯,用以表示选手答题是否正确,两灯分别连接单片机的PK1与PK3接口。

当程序捕捉到9号按键按下时,程序立即设置PK1口输出高电平,控制绿灯亮至系统复位为止。

黄灯与绿灯同法。

◆四位数码管显示控制策略:

四位共阳数码管的十二个引脚分别接单片机的4个PA口与8个PB口,4个PA口控制4位数码的阳极,8个PB口控制“8”字的7个笔段与小数点。

程序先对输入的数字进行分解,分解成十位的数字和各位的数字,并存进不同的变量中。

再对0-9共十个数字的显示端口电平设置并存进数组中,程序对PA,PB口的高低电平进行扫描式输出,以达到不断显示不同数字的目的。

程序使用递减的算法对输入的数字进行计算。

使用延时函数与循环函数进行时间的计算。

“秒”的显示使用不断循环的“9”至“0”的递减与延时函数进行控制。

 

系统的总程序如下:

#include/*commondefinesandmacros*/

#include/*derivativeinformation*/

#pragmaLINK_INFODERIVATIVE"mc9s12xs128"

 

unsignedcharshu[10],sh[5],anjian[12];

unsignedintcnt,cnt2;

unsignedintt,a,b,c,i,j,k,m,n,an;

voidatd_init(void);

voidhuantime(void);

voiddaojishi(void);

voidanjianzhi(void);

voidsound(charl);

voidtime(void);

voiddelay(intcnt);

voiddelay2(intcnt2);

voidbegin(void);

//-------------主函数----------

voidmain(void)

{

begin();

huantime();

time();

for(;;)

{

daojishi();

}}

//-----------数据初始化------

voidbegin(){

atd_init();

DDRB=0XFF;

DDRA=0XFF;

DDRE=0XEF;

DDRK=0XFF;

n=0;an=0;

PORTA=0X03;

PORTB=0XF9;

t=11;

}

//-----------时间换算-----

voidhuantime(void){

shu[0]=0xC0,shu[1]=0xF9,shu[2]=0xA4,shu[3]=0xB0,shu[4]=0x99,

shu[5]=0x92,shu[6]=0x82,shu[7]=0xD8,shu[8]=0x80,shu[9]=0x90;

sh[1]=0x01,sh[2]=0x02,sh[3]=0x04,sh[4]=0x08;

}

//--------------设定时间---------

voidtime(void){

for(;;){

anjianzhi();

for(i=1;i<11;i++){

if(anjian[i]==0)

{n=10*i;break;}}

if(ATD0DR10L==0){

n=t;break;

}

if(n>0)break;

}

a=n/10;b=n-a*10;

for(m=1;;m++){

for(k=1;k<10;k++)

{PORTA=sh[1];

PORTB=shu[a];

delay(3);

PORTA=sh[2];

PORTB=shu[b];

delay(3);

PORTA=sh[3];

PORTB=0XBF;

delay(3);

PORTA=sh[4];

PORTB=shu[0];

delay(3);

anjianzhi();

if(ATD0DR10L==0)break;}

if(ATD0DR10L==0)break;}

}

//----------时间倒计时-------------

voiddaojishi(void){

a=n/10;b=n-a*10;

for(k=1;k<10;k++)

{

PORTA=sh[1];

PORTB=shu[a];

delay(3);

PORTA=sh[2];

PORTB=shu[b];

delay(3);

PORTA=sh[3];

PORTB=0XBF;

delay(3);

PORTA=sh[4];

PORTB=shu[0];

delay(3);

}

for(;;){

if(n>0){n=n-1;a=n/10;b=n-a*10;c=9;}

elsesound

(2);//倒计时结束后发出声音2,同时数码管显示相应内容

PORTK_PK2=1;

for(k=1;k<11;k++)

{

for(m=1;m<10;m++)

{

PORTA=sh[1];

PORTB=shu[a];

delay(3);

PORTA=sh[2];

PORTB=shu[b];

delay(3);

PORTA=sh[3];

PORTB=0XBF;

delay(3);

PORTA=sh[4];

PORTB=shu[c];

delay

(2);

}

if(c>0)c=c-1;

anjianzhi();

if(anjian[1]==0){an=1;}

if(anjian[2]==0){an=2;}

if(anjian[3]==0){an=3;}

if(anjian[4]==0){an=4;}

if(anjian[5]==0){an=5;}

if(anjian[6]==0){an=6;}

if(anjian[7]==0){an=7;}

if(anjian[8]==0){an=8;}

if(an>0)sound

(1);}//按下抢答按钮后,发出声音1,同时数码管显示相应内容

}}

//-----------延时函数-----------

voiddelay(intcnt){

for(i=0;i

j=1150;

while(j--);}

}

voiddelay2(intcnt2){

for(i=0;i

j=30;

while(j--);}}

//------------ATD初始化---------------

voidatd_init(void)

{

ATD0CTL1=0x03;

ATD0CTL2=0X60;

ATD0CTL3=0XD8;

ATD0CTL4=0X29;

ATD0CTL5=0X30;

ATD0DIEN=0x00;

}

//------按键输入---------------

voidanjianzhi(void)

{

while(!

ATD0STAT2_CCF0);

anjian[1]=ATD0DR0L;

while(!

ATD0STAT2_CCF1);

anjian[2]=ATD0DR1L;

while(!

ATD0STAT2_CCF2);

anjian[3]=ATD0DR2L;

while(!

ATD0STAT2_CCF3);

anjian[4]=ATD0DR3L;

while(!

ATD0STAT2_CCF4);

anjian[5]=ATD0DR4L;

while(!

ATD0STAT2_CCF5);

anjian[6]=ATD0DR5L;

while(!

ATD0STAT2_CCF6);

anjian[7]=ATD0DR6L;

while(!

ATD0STAT2_CCF7);

anjian[8]=ATD0DR7L;

while(!

ATD0STAT2_CCF8);

anjian[9]=ATD0DR8L;

while(!

ATD0STAT2_CCF9);

anjian[10]=ATD0DR9L;

while(!

ATD0STAT2_CCF10);

anjian[11]=ATD0DR10L;

for(i=1;i<12;i++)

{

if(anjian[i]>=1)

anjian[i]=1;

elseanjian[i]=0;

}

}

//---------声音-------

voidsound(charl){

if(l==1)

{PORTK_PK2=0;

PORTE=0XFF;

PORTA=0X01;

PORTB=shu[an];

delay(300);

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X02;

PORTB=shu[an];

delay(300);

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X04;

PORTB=shu[an];

delay(300);

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X08;

PORTB=shu[an];

delay(300);

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTE=0X00;

for(;;)

{

for(m=1;m<100;m++){

PORTA=sh[1];

PORTB=shu[a];

delay(3);

PORTA=sh[2];

PORTB=shu[b];

delay(3);

PORTA=sh[3];

PORTB=0XBF;

delay(3);

PORTA=sh[4];

PORTB=shu[c];

delay(3);

anjianzhi();

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

}

{PORTA=0X01;

PORTB=shu[an];

delay(200);

anjianzhi();

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X02;

PORTB=shu[an];

delay(200);

anjianzhi();

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X04;

PORTB=shu[an];

delay(200);

anjianzhi();

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

PORTA=0X08;

PORTB=shu[an];

delay(200);

anjianzhi();

if(ATD0DR8L==0)sound(3);

if(ATD0DR9L==0)sound

(2);

}}}

if(l==2){//时间到或错误的声音

PORTK_PK1=1;

for(m=1;m<5;m++){

PORTA=0X0F;

PORTB=0XC0;

delay(3);

PORTE=0XFF;

delay(1000);

PORTE=0X00;

delay(50);

}

for(;;)

{

PORTA=0X0F;

PORTB=0XC0;}

}

if(l==3){//正确的声音

PORTA=0XFF;

PORTB=0XF9;

PORTK_PK3=1;

for(m=1;m<3;m++){

PORTE=0XFF;

delay(160);

PORTE=0X00;

delay(120);

PORTE=0XFF;

delay(120);

PORTE=0X00;

delay(120);

PORTE=0XFF;

delay(250);

PORTE=0X00;

delay(300);

PORTE=0XFF;

delay(160);

PORTE=0X00;

delay(120);

PORTE=0XFF;

delay(120);

PORTE=0X00;

delay(120);

PORTE=0XFF;

delay(250);

PORTE=0X00;

delay(320);

PORTE=0XFF;

delay(130);

PORTE=0X00;

delay(80);

PORTE=0XFF;

delay(150);

PORTE=0X00;

delay(120);

PORTE=0XFF;

delay(300);

PORTE=0X00;

delay(100);

for(k=1;k<30000;k++){

PORTE=0XFF;

}PORTE=0X00;delay(100);

PORTE=0XFF;

delay(700);

PORTE=0X00;

delay(400);

PORTE=0XFF;

delay(200);

PORTE=0X00;

delay(80);

PORTE=0XFF;

delay(80);

PORTE=0X00;

delay(200);

PORTE=0XFF;

delay(200);

PORTE=0X00;

delay(80);

PORTE=0XFF;

delay(80);

PORTE=0X00;

delay(200);

PORTE=0XFF;

delay(300);

PORTE=0X00;

delay(30);

PORTE=0XFF;

delay(170);

PORTE=0X00;

delay(70);

PORTE=0XFF;

delay(80);

PORTE=0X00;

delay(400);

PORTE=0XFF;

delay(150);

PORTE=0X00;

delay(100);

PORTE=0XFF;

delay(150);

PORTE=0X00;

delay(100);

PORTE=0XFF;

delay(250);

PORTE=0X00;

delay(80);

PORTE=0XFF;

delay(100);

PORTE=0X00;

delay(80);

PORTE=0XFF;

delay(750);

PORTE=0X00;

delay(2000);

}

for(;;);

}

}

 

四、单片机设计的八人智力竞赛抢答器的功能及优缺点

这个八人智力竞赛抢答器主要是用9S12XS128单片机、稳压芯片2940、清华FreescaleMCU/DSP应用开发研究中心设计制造的系统板、“飞思卡尔”智能车竞赛规定使用的7.2V直流电池、C语言编写程序等来实现的。

抢答器具有显示的功能,并且扬声器给出音响,同时具有定时报警的功能。

可以说功能还是比较全面,是很适合现在一些智力抢答的节目的。

而且做这个的成本还是比较低的,很划算。

但是,它也有很多不足的地方:

这次设计的作品主要是用9S12XS128单片机来

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1