八路抢答器设计.docx

上传人:b****8 文档编号:11474381 上传时间:2023-03-01 格式:DOCX 页数:21 大小:178.61KB
下载 相关 举报
八路抢答器设计.docx_第1页
第1页 / 共21页
八路抢答器设计.docx_第2页
第2页 / 共21页
八路抢答器设计.docx_第3页
第3页 / 共21页
八路抢答器设计.docx_第4页
第4页 / 共21页
八路抢答器设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

八路抢答器设计.docx

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

八路抢答器设计.docx

八路抢答器设计

物理与电子信息工程学院

实验报告

实验课程名称:

电子综合设计实验

实验项目名称:

八路智力抢答器

班级:

0912241

姓名:

学号:

成绩:

______________

实验时间:

2011.10.25

 

1.实验目的

(1)掌握八路抢答器的工作原理。

(2)掌握单片机的使用方法。

(3)掌握程序的编写、调试和下载方法。

(4)学会分析、观察及调式电路。

2.仪器设备

AT89C51单片机1个

11.0592M晶振1个

四位共阴极数码管1个

按键10个

Led各1个

22pF瓷片电容2个

10uF电解电容1个

排阻1k*82个

10k电阻若干

基于单片机的

八路抢答器设计方案

 

本题利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码。

用开关做键盘输出,扬声器发生提示。

系统达到要求:

在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可是在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,时间完后系统自动复位;按键锁定,在有效状态下,按键无效非法。

抢答器的系统概述

系统的主要功能:

本系统是借用单片机采用模块化设计的八路抢答器,包括8路抢答按纽、计时显示、提示功能等(根据需要可另设或多设相关功能)、开始与结束控制按钮、时限设定、各种相关显示调控功能等(根据需要也可另设或多设相关功能)。

参赛者系统,除享有抢答按纽的权利功能外,还有人性化的提示功能和时间提示功能,也可设定由主控控制在参赛者终端表现的趣味性功能等;主控系统的控制按钮做开始与结束控制,根据活动参赛者的层次,对提前抡答者的行为设定为非法或阻隔,若设有非法抢答控制功能时,在主控处带有公示性显示的非法抡答者的台位号,对抢答限时及回答问题限时设为倒计时,并有显示提示。

系统的主要功能模块方框图如图1所示:

图1系统主要功能模块

本系统采用模块化设计的八路抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。

一共有8个按键输入,分别对应8路选手的抢答按键。

主持人有开始和结束键。

在后台主持人可以修改,抢答时间和选手回答问题的时间设置,原始状态下抢答时间为20s,回答问题时间为30s。

通过加键和减键修改上述时间,改完后结束键确定。

新时间开始有效,主持人按键开始后,选手开始抢答为有效,数码显示屏显示抢答时间倒计时和选手号,在最后五秒扬声器发生提示。

如果主持人没有按下开始键而选手就抢答视为犯规,数码显示屏显示犯规者的代号,扬声器持续发生。

主持人可按键结束,新一轮抢答开始。

单片机是整个抢答器的核心,内部电路设计用汇编语言编写。

它完成了时间参数的设定,抢按号码的译码,保存;显示;输出,抢按及答题倒计时功能等。

本设计中,有一个共阴的数码管组,四个数码管。

其中两个显示时间,一个空位,一个显示抢答号码。

主持人依次按下复位键(RESET),开始键后开始抢答。

可以抢按:

超时数码管显示“FFF”,当抢按超过规定时间或答题超过规定时间后数码管显示“FFF”。

若有选手在规定时间内抢按成功,则可以答题,数码管显示抢答时间的同时也显示选手号码。

若在按开始键前抢答表示违规,数码管显示“FF”并显示选手号码。

系统需求分析

1在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效。

2抢答限定时间和回答问题的时间可以在1~99s设定。

3可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示。

4抢答时间和回答问题时间倒记时显示,时间完后系统自动复位。

5抢答限定时间内使用锦囊回答时间将加到60s。

6按键锁定,在有效状态下,按键无效非法。

抢答器的工作流程

抢答器的基本工作原理[4]:

在抢答竞赛或呼叫时,有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。

在整个抢答器工作过程中,显示电路、声音电路等还要根据现场的实际情况向外电路输出相应信号。

抢答器的工作流程分为:

系统复位、正常流程、违例流程等几部分,如图2所示,下面分别予以介绍。

图2抢答器工作流程

抢答器的工作过程

1、主持人按"抢答开始"键,会有红灯亮,并立刻进入抢答倒计时(预设20s抢答时间),如有选手抢答,会有提示音和一个绿灯亮,并会显示0,不进行抢答查询,所以只有第一个按抢答的选手有效。

2、如倒计时期间,主持人想停止倒计时可以随时按“停止”按键,系统会自动进入准备状态,等待主持人按“抢答开始”进入下次抢答计时。

3、如果主持人未按“抢答开始”键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下“停止”键为止。

总而言之,本课题利用AT89C51单片机及外围接口实现的抢答系统设计了抢答器,该抢答器增加了新功能、提高了系统的可靠性、简化了电路结构、节约了成本,是一个实用的工程设计。

总体原理图

图4系统原理图

图中U1为单片机AT89C51,U2为芯片74HC30,U3为芯片74LS04。

K1~K8分别为8路抢答按键,分别接到单片机的P1.0~P1.7中。

开始按键与结束按键分别接到单片机的10、11脚,由于单片机的10、11脚既有串行接口RXD、TXD功能,又有P3.0、P3.1的IO端口功能,此处按键用到单片机10、11脚的IO端口功能。

抢答时间调整按键和回答时间调整按键分别接到单片机的13、14管脚,加一按键和减一按键分别接到单片机的15、16管脚。

4位七段数码管段选P0口。

4位七段数码管的位选接P2口低3位,蜂鸣器输出为P3.7口。

软件设计

1.主程序系统结构图

图13软件系统结构图

2.程序流程图-----主流程图如14所示:

图14程序设计流程图

3.复位图

图15复位显示三个FFF

该图显示当单片机复位后,在4位七段数码管上显示的初始状态“FFF”字符。

4.设置计时时间

图16计时时间为17秒

该图显示通过加一按键操作后在4位数码管上显示的计时时间为17秒。

5.非法抢答并显示座号

图17三号选手非法抢答

该图显示的是若三号选手非法抢答时候,第一位字符显示单片机判定的非法选手“3”号选手,在4位数码管上的后两位显示非法抢答字符“FF”。

6.抢答成功并显示倒计时

图18六号选手抢答

图中显示的是若6号选手抢答成功的时候,4位数码管的第一显示是“6”号选手抢答成功,最后两位显示选手答题倒计时时间还有25秒。

程序

#include

/*-----------------------------------------------------------

宏定义

------------------------------------------------------------*/

#defineuintunsignedint

#defineucharunsignedchar

/*-----------------------------------------------------------

共阴极

数码管

0-f

显示

------------------------------------------------------------*/

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

sbitstart_stop=P3^6;

sbitreset=P3^7;

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^2;

sbitkey4=P1^3;

sbitkey5=P1^4;

sbitkey6=P1^5;

sbitkey7=P1^6;

sbitkey8=P1^7;

sbitstate=P3^4;

sbitbao=P3^3;

sbitxiang=P3^2;

bitstart_stop_flag=0;

bitkey1_flag=0;

bitkey2_flag=0;

bitkey3_flag=0;

bitkey4_flag=0;

bitkey5_flag=0;

bitkey6_flag=0;

bitkey7_flag=0;

bitkey8_flag=0;

bitreset_flag=0;

bitaction=0;

ucharsecond=20;

uchartimer0_count=0;

ucharnumber=0;

ucharnumber_display=0;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voiddisplay(ucharnumber,ucharsecond)

{

ucharsecond_first,second_second;

second_first=second/10;

second_second=second%10;

P2=0xfe;

P0=table[number];

delay

(2);

P2=0xfd;

P0=0x40;

delay

(2);

P2=0xfb;

P0=table[second_first];

delay

(2);

P2=0xf7;

P0=table[second_second];

delay

(2);

}

voidstart_stop_keyscan()

{

if(start_stop!

=0)

{if(P1!

=0xff)

{

bao=0;

xiang=0;

delay(3000);

xiang=1;

}}

if(start_stop==0)

{

delay(8);

if((start_stop==0)&&(!

start_stop_flag))

{

start_stop_flag=1;

action=1;

TR0=1;

state=0;

//xiang=1;

}

}

else

{

start_stop_flag=0;

}

}

ucharkey_scan8()

{

if(key1==0)

{

delay(8);

if((key1==0)&&(!

key1_flag))

{

key1_flag=1;

number=1;

number_display=number;

}

}

else

{

key1_flag=0;

number=0;

}

if(key2==0)

{

delay(8);

if((key2==0)&&(!

key2_flag))

{

key2_flag=1;

number=2;

number_display=number;

}

}

else

{

key2_flag=0;

number=0;

}

if(key3==0)

{

delay(8);

if((key3==0)&&(!

key3_flag))

{

key3_flag=1;

number=3;

number_display=number;

}

}

else

{

key3_flag=0;

number=0;

}

if(key4==0)

{

delay(8);

if((key4==0)&&(!

key4_flag))

{

key4_flag=1;

number=4;

number_display=number;

}

}

else

{

key4_flag=0;

number=0;

}

if(key5==0)

{

delay(8);

if((key5==0)&&(!

key5_flag))

{

key5_flag=1;

number=5;

number_display=number;

}

}

else

{

key5_flag=0;

number=0;

}

if(key6==0)

{

delay(8);

if((key6==0)&&(!

key6_flag))

{

key6_flag=1;

number=6;

number_display=number;

}

}

else

{

key6_flag=0;

number=0;

}

if(key7==0)

{

delay(8);

if((key7==0)&&(!

key7_flag))

{

key7_flag=1;

number=7;

number_display=number;

}

}

else

{

key7_flag=0;

number=0;

}

if(key8==0)

{

delay(8);

if((key8==0)&&(!

key8_flag))

{

key8_flag=1;

number=8;

number_display=number;

}

}

else

{

key8_flag=0;

number=0;

}

if(number_display!

=0)

{

return1;

}

else

{

return0;

}

}

voidreset_keyscan()

{

if(reset==0)

{

delay(8);

if((reset==0)&&(!

reset_flag))

{

reset_flag=1;

number_display=0;

state=1;

bao=1;

}

}

else

{

reset_flag=0;

}

}

voidmain()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=0;

while

(1)

{

start_stop_keyscan();

reset_keyscan();

while(action)

{

while(!

key_scan8())

{

display(number_display,second);

if(second==0)

{

second=20;

break;

}

}

TR0=0;

second=20;

display(number_display,second);

action=0;

break;

}

display(number_display,second);

}

}

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

timer0_count++;

if(timer0_count==20)

{

timer0_count=0;

second--;

if(second==0)

{

TR0=0;

number_display=0;

state=1;

action=0;

}

}

}

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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