八路抢答器设计论文Word文件下载.docx
《八路抢答器设计论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《八路抢答器设计论文Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
开始"
键后,定时器进行减计时。
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手
的编号和抢答的时间,并保持到主持人将系统清除为止。
6.如果定时时间已到,无人抢答,本次抢答无效,系统通过一个指示灯报警并禁止抢答,
定时显示器上显示00。
完成时间
2011-2012学年第一学期
目
录
引言……………………………………………………………1
第一章设计任务…………………………………………………
(1)设计要求……………………………………………………
(2)功能要求……………………………………………………
第二章
主要器件介绍……………………………………………
AT89C52/AT89C51………………………………………………
第三章设计方案………………………………………………
(1)抢答功能设计…………………………………………
(2)定时功能设计及其总方案…………………………….
第四章
电路实现及仿真…………………………………
第五章结论
……………………………………………………
第六章参考文献………………………………………………
附录1:
数码管引脚图……………………………………………
附录2:
仿真图……………………………………………………
附录3.源程序代码……………………………………………
引言
数字电路产品在生活中有着极其广泛的应用,包括计算机、数字通信、智能仪器仪表、自动控制及航天等领域中。
这些给人们带来了生活,工作等方面带来了极大的方便。
工厂、学校和电视台等单位常举办各种智力竞赛,抢答器是必要设备。
在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性。
为解决这个问题,我们小组准备就本次课设的机会制作一个低成本但又能满足学校需要的八路数显抢答器。
抢答器在比赛等场合中不可缺少的设备。
本文就是从数字电路芯片的功能简介开始,利用功能不同的数字电路芯片的组合来实现多路抢答器的功能。
首先简要的介绍了数字电路的发展和演变。
然后介绍几个主要集成芯片的管脚功能和用法。
最后介绍多路抢答器的原理和设计过程。
总结与改进部分,讲一些电路在实际设计调试中的不足,并加以改进。
智力竞赛是一种生动活泼的教育方式,而抢答就是智力竞赛中非常常见的一种答题方式。
抢答能引起参赛者和观众的极大兴趣,并且能在极短的时间内,使人们迅速增加一些科学知识和生活常识。
但是,在这类比赛中,对于谁先谁后抢答,在何时抢答,如何计算答题时间等等问题,若是仅凭主持人的主观判断,就很容易出现误判。
所以,我们就需要一种具备自动锁存,置位,清零等功能智能抢答器来解决这些问题。
第
第第一章设计任务
(1)设计要求
即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
当主持人启动"
5.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
6.如果定时时间已到,无人抢答,本次抢答无效,系统通过一个指示灯报警并禁止抢答,定时显示器上显示00。
设计器材统计如下表:
AT89C52
1个
RESPACK-8
1个
7SEG-MPX4
SPEAKER
74LS02
7SEG-MPX4-CA
74LS20
2个
AUD10100N
BUTTON
10个
电阻100Ω
(2)功能要求
将主要设计一个供八人使用的定时抢答器,他要实现以下主要功能:
(1)为8位参赛选手各提供一个抢答按钮,分别编号S1、S2、S3、S4、S5、S6、S7、S8;
(2)主持人可以控制系统的清零与抢答开始;
(3)抢答器要有数据锁存与显示的功能。
抢答开始后,若有任何一名选手按动抢答按钮,则要显示其编号至系统被主持人清零,并且扬声器发生提示,同时其他人再按对应按钮无效;
(4)抢答器要有自动定时功能,并且一次抢答时间由主持人任意设定。
当主持人启动“开始”键后,定时器自动减计时,并在显示器上显示。
同时扬声器上发出短暂声响;
(5)参赛选手只有在设定时间内抢答方为有效抢答。
若抢答有效,则定时器停止工作,并且显示抢答开始时间直到系统被清零;
(6)若设定时间内无选手进行抢答(按对应按钮),则系统短暂报警,并且禁止选手超时抢答,定时器上显示00。
数字抢答器由主体电路与扩展电路组成。
优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;
用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。
通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。
利用本次设计出的电路制造成的定时抢答器,即可轻松实现在8人或8个代表队之间进行的抢答比赛中进行控制,使得这一活动更加趣味、公平。
主要器件介绍
1.AT89C52
AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
兼容MCS51指令系统·
8k可反复擦写(>
1000次)FlashROM
·
32个双向I/O口·
256x8bit内部RAM
3个16位可编程定时/计数器中断·
时钟频率0-24MHz
2个串行中断·
可编程UART串行通道
2个外部中断源·
共6个中断源
2个读写中断口线·
3级加密位
低功耗空闲和掉电模式·
软件设置睡眠和唤醒功能
AT89C52P为40脚双列直插封装的8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。
P0口
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的
方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
第三章设计方案
总方案如下:
1.时序控制电路是抢答器设计的关键,它要完成以下三项功能:
①主持人将控制开关拨到"
位置时,扬声器发声,抢答电路和定时电路进入正常抢答工作状态。
②当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。
③当设定的抢答时间到,无人抢答时,扬声器发声,同时抢答电路和定时电路停止工作。
2.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
3.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
其工作原理为:
接通电源后,主持人将开关拨到"
清零"
状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;
主持人将开关置;
状态,宣布"
抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"
清除"
和"
状态开关。
电路实现及电路调试
3块实验电路板分别做成数字抢答器电路、可预置时间的定时电路、报警电路及时序控制电路,根据EWB仿真电路及工程上的可操作性布置芯片、元件、导线等。
可以通过很多电路仿真软件进行,通过对以上进行了解,到仿真电路中去,以上都可以很好的实现其功能
电路调试:
(针对抢答功能)第1点(图1):
依次按S1至S8键,每按完进行清除,达到数码管(显示选手号码)显示的数字一一与按键对应,达到效果,反之,查找问题所在:
第2点(总体方案):
模拟抢答过程,
(1)预设时间倒记时开始,依次按S1至S8键数码管(显示选手号码)没有数字显示并且报警发光二极管亮起表示成功,有则找出问题所在:
(2)倒记时结束,抢答开始,同时或者只按S1至S8任意键,发光二极管亮起,数码管显示号码,在把所有键依次按一遍看显示号码会不会改变,不改变则完成调试,反之则找出问题。
第五章结论
抢答器丰富了我们的生活,社会中本来就充满着竞争。
只是没有很明显的表现出来,通过运用它我们可以很好的证明自己的胆识和自信,所以做起抢答器来,也很想去了解它,对于八路抢答器原理也只是几个芯片的合成体,也没什么复杂性,所以很好的做出来,但实践中就有些小小的麻烦,就是电压在实践中很难把握。
总之,这次实践是非常成功的,我们追求的是理论与实践并存,课程设计就很好的为大学生表现自己综合能力提供有力的平台。
实践中有很多电路原理弄不清楚,这说明学的不太好,从中也反映了我们在那些知识的不足,我们也应通过老师和自己查资料弥补,这是理想的学习过程。
第六章参考文献
[1]康华光,《电子技术基础.数字部分(第四版)》[M],北京:
高等教育出版社,2003.
[2]李广弟,《单片机基础》[M],北京:
北航出版社,2001.
[3]梁超,一款基于单片机技术的电子抢答器[J],机电工程技术,2005,34
(1).
[4]李朝青,单片机原理及接口技术[M],北京:
北京航空航天大学出版社,1999.
[5]齐向东,多功能数字显示抢答器[J].黄石高等专科学院学报,1996.
数码管引脚图
图1数码管引脚图
8421BCD码对应显示图
仿真图
附录3.源程序代码
#include<
reg51.h>
sbitp3_0=P3^0;
sbitp3_4=P3^4;
sbitp3_5=P3^5;
unsignedcharkey,num;
unsignedcharx,y;
unsignedcharcount;
unsignedcharkeycode;
unsigned
charLED_T[10]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff};
//P1口LED表
flag=0;
start=0;
flagl=0;
voiddelay()//延时
{
unsignedinti;
i=500;
while(i--);
}
intkeyscan()//键盘扫描
unsignedcharread,recode,keyvalue;
P2=0xf0;
read=P2;
if(read!
=0xf0)
delay();
P2=0x0f;
recode=P2;
keyvalue=read+recode;
returnkeyvalue;
return0;
voiddisplay()//显示
charcodeTable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数码管断码表
switch(num)
case0:
{x=0;
y=0;
break;
case1:
{x=1;
case2:
{x=2;
case3:
{x=3;
case4:
{x=4;
case5:
{x=5;
case6:
{x=6;
case7:
{x=7;
case8:
{x=8;
case9:
{x=9;
case10:
y=1;
p3_4=0;
p3_5=0;
P0=Table[x];
p3_5=1;
P0=Table[y];
p3_4=1;
unsignedchardecode()//解码按键
switch(key)
case0xb7:
return1;
case0xbb:
return2;
case0xbd:
return3;
case0xbe:
return4;
case0xd7:
return5;
case0xdb:
return6;
case0xdd:
return7;
case0xde:
return8;
voidmain()
while
(1)
while(start==0)//P3.0自锁开关按下,程序跳出循环,开始初始化中断
num=10;
P1=LED_T[9];
display();
if(p3_0==0)
start=1;
EA=1;
TMOD=0x01;
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=1;
count=100;
num=9;
while(flag==0&
&
p3_0==0)//flag=0且P3.0按下时执行此循环
if(flagl==1)//若中断里检测到按键,P1口对应LED亮起
P1=LED_T[num-1];
voidtimer_1(void)interrupt1
TH0=0xD8;
if(p3_0==1)//中断途中抬起P3.0自锁开关,关中断
TR0=0;
key=keyscan();
//检测到按键,解码按键至对应case,并且显示对应数字,关中断,防止再次进入中断,保证锁住状态
if(key!
=0)
num=decode();
flagl=1;
count--;
//10秒倒计时
if(count==0)
num--;
if(num==0)