8路数字抢答器设计.docx

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

8路数字抢答器设计.docx

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

8路数字抢答器设计.docx

8路数字抢答器设计

摘要

抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。

但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。

作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。

本设计是以八路抢答为基本理念。

考虑到依需设定限时回答的功能,利用P89V51RB2单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。

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

同时系统能够实现:

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

 

第一章系统总体方案的设计与工作原理......................1

2.3时钟频率电路的设计4

2.4复位电路的设计4

2.5数码管电路的设计5

2.6蜂鸣器部分的设计6

第三章软件设计流程及描述7

3.1软件设计流程8

3.2数码显示软件设计9

3.3音频输出10

第四章调试分析10

4.1硬件调试10

4.2软件调试的基本方法10

心得体会11

参考文献12

附录13

附录A电路图13

附录B元器件清单13

附录C完整源程序14

 

第一章系统总体方案的设计与工作原理

1.1 设计方案

(1)确定单片机的型号

根据系统的功能与要求,要求我们要用P89V51RB2单片机。

(2)设计任务

通过对本课题的设计,进一步熟悉单片机控制系统,并了解系统设计的一般规律。

用P89V51RB2单片机设计一个数控直流稳压电源,输出恒定的直流电压。

1.2系统的功能与要求

该设计系统的基本要求为:

(1)设置8个按键和一位数码管,对8个按键进行编号,当按下任意一个按键后,完成按键的识别,并在数码管上显示对应的数字。

(2)设置蜂鸣器进行状态指示,当检测到有按键按下式发出提示音。

(3)增加语音播报功能,当检测到有按键按下时能够发出语音提示。

(4)对两个或多个按键同时按下时的具体处理作详细研究

1.3方案的论证

有许多比赛活动中,为了更准确、公正、直观的、地判断出第一个抢答者,通常设置一个抢答器,通过数字显示,灯光及向、音响等多种手段显示第一抢答者的功能,传统的数字控制电路可靠性虽好,但不能显示几号给主持人带来一定的麻烦,而模拟电子控制电路可靠性较差。

利用单片机可以用很少的元件实现相同功能,而且单片机性能可操作性强。

可以只用P0口连接上位电阻,完成驱动LED的功能,串接按键可以由选手自己控制抢答机会,利用P3口的RXD解、接P89V51RB2的A、B端,TXD接移动脉冲做时钟信号。

利用单片机程序判断选手按键是否有效,利用简单程序显示选手序号,启动蜂鸣器,并给出相应的延时。

而本设计采用单片机,可靠行好,结构简单,具有显示功能。

该模式充分体现了原有系统性能的改进,功能的扩展及其他同类系统的不同之处,它包括硬件逻辑图与软件流程图,比较经济实用,所以我们选用单片机方案。

 

第二章硬件电路设计及描述

2.1硬件电路的设计

本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做些修改。

只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务,随着集成电路的集成度越来越高,硬件设计的工作量在整个项目中的所占的比重逐渐下降。

为使硬件电路设计尽可能合理,应注意一下几个方面:

(1)尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干个普通芯片,随着生产工艺的提高,新型芯片的价格不断下降,并不一定不若干个普通芯片价格高。

(2)留有设计余地。

在设计硬件电路时,要考虑到将来修改扩展的方便。

因此很少有一锤定音的电路设计,如果现在不留有余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。

(3)程序空间,选用片内程序空间足够大的单片机,本设计采用P89V51RB2单片机。

(4)I/O端口:

在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。

如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。

如果在硬件电路设计就预留一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。

 

2.2总体原理图

图2.1总体原理图

2.3时钟频率电路的设计

单片机必须在时钟的驱动下才能工作,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。

图2.2外部源振荡电路图

一般选用石英晶体振荡器。

此电路在加点大约10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶体的频率确定。

电路中C1、C2的作用有两个:

一是帮助振荡器起振;二是对振荡器的频率进行微调。

C1、C2的典型值为30pf。

单片机在工作时,有内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。

其大小是时钟信号频率的倒数。

2.4复位电路的设计

复位是计算机的一个重要工作状态。

复位电路由一个按键和电容串联电阻构成,“结合电容电压不能突变”的性质可以知道,当系统上电时,单片机的RET脚将会出现高电平,并且这个高电平持续的时间由电路的RC值来决定。

典型的51单片机在通电后,RST管脚上的高电平除了要保持有效上电复位所需的两个机器周期外,还要继续保持一段时间,以便振荡器稳定起振(低频振荡器通常需要几个毫秒)。

所以,上图中将RST管脚通过一个10UF的电容和VCC相连,再通过一个10K欧姆的电阻和GND相连,就是要让RC组合可以在RST脚上产生不少于2个机器周期的高电平。

单片机的RET引脚为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始状态,其电路图如图所示

图2.3复位电路图

2.5数码管电路的设计

LED是发光二极管的缩写,LED显示器由若干个发光二极管构成的,当发光二极管导通时,显示对应的字符。

LED显示器由7个发光二极管组成,也称为7段显示器,排列性质如图所示

LED显示器还有一个圆点型的发光二极管,用于显示小数点,有时也称为8段LED显示器。

图2.47段LED显示图

LED显示器的发光二极管有共阴极和共阳极两种接法。

共阴极接法各发光二极管的阴极连在一起并接地,当某一发光二极管的阳极输入高电平时,则该段发光;图右为共阳极接法,各发光二极管的阳极连在一起并接+5V,当阴极输入低电平时,该段发光二极管发光。

图2.5数码管电路图

2.6蜂鸣器部分的设计

图2.6蜂鸣器部分电路图

有源蜂鸣器和无源蜂鸣器的根本区别是产品对输入信号的要求不一样:

有源蜂鸣器工作的理想信号时直流电,通常标示为VDC、VDD等。

因为蜂鸣器内部有一简单的振荡电路,能将恒定的直流电转化成一定频率的脉冲信号,从而实现磁场交变,带动钼片振动发音。

但是在某些有源蜂鸣器在特定的交流信号下也可以工作,只是对交流信号的电压和频率要求很高,此种工作方式一般不采用。

注意,这里的“源”不是指电源。

二是振荡源。

也就是说,有源蜂鸣器内部带振荡源,所以只要一通电就会叫。

而无源内部不带震荡源,所以如果用直接信号无法令其鸣叫。

必须有2K~5K的方波去驱动它。

有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

无源蜂鸣器的优点是:

(1)便宜;

(2)声音频率可控,可以做出“多来米发索拉西”的效果;

(3)在一些特例中,可以和LED复用一个控制口。

有源蜂鸣器的优点是:

程序控制方便。

第三章软件设计流程及描述

3.1软件设计流程

从上述设计方案可知,依照本次课程设计要求及任务,根据已作出的8路数字抢答器的原理图,设计出如图的程序框架图

图3.1程序框架图

本设计程序主要由主程序、数码管显示程序、按键程序和延时程序,程序设计分析为:

对按键部分和数码管显示部分,只要有一路按键按下,相应的数码管就会显示对应的数字,并且蜂鸣器鸣叫。

并且只要一路按键按下,其他路就被屏蔽,只显示一开始按下的按键,直到重新开始抢答。

3.2数码显示软件设计

采用动态显示,显示器有一个共阴极数码管组成,数码显示程序流程如图3.2所示。

图3.2数码管显示框图

 

3.3音频输出

音频输出由WR输出,其程序流程图如图3.3所示。

图3.3音频输出流程图

第四章调试分析

4.1硬件调试

本设计硬件部分主要为显示模块按键模块。

硬件电路功能检测主要针对这两部分进行测试。

对于显示电路,由于使用的是单数码管显示屏,首先要确定数码管的共阴还是共阳极。

因此先用万用表检测是什么极性。

然后再先固定下,检查显示电路能否正常显示。

最后再焊接上去。

对于按键部分,首先要确定各个按键是否完好,先自己接到一个简易的电路上测试下,确定完好后再焊接。

4.2软件调试的基本方法

软件的设计与调试实行分模块实现方法。

本设计软件调试的分模块包括显示功能模块、抢答功能模块以及报警功能模块。

各个独立模块功能调试成功后,将这些模块程序通过主程序合并在一起,最后再对合并的总程序进行调试。

个软件模块首先要通过PC和仿真器进行软件调试。

心得体会

在设计之前,参考了许多相关的资料。

在设计中又参考了以前讲过的四路抢答器的原理图,有了基本的思路。

但着手设计时,又出现了许多未预料到的问题,例如元件的选择:

在选择编码器时,是采用普通编码器还是优先编码器。

普通编码器中,任何时刻只允许输入一个编码信号,否则输出将发生混乱。

在一些设计原理上也遇到了许多新问题。

发现当电源接通后,无论有无人按按钮都会使音乐集成电路通电发出声响,经同学以及老师的指证,发现导通的原因,并及时的改正。

通过这次八路抢答器的设计,我发现了以往学习中的许多不足,也让我掌握了以往许多掌握的不太牢的知识,感觉学到了很多东西。

三周的课程设计,留给我印象最深的是要设计一个成功的电路,必须要有耐性和坚持下去的毅力。

在整个电路的安装调试的过程中,花费时间最多的是各个元件电路的连接,电路的细节设计以及连完线路后的检查工作上,其中在连接电路是出现问题比较多,在P89V51RB2的连接的调试的时候出现了问题在老师的指导和讲解下我门有了更深刻的认识,同时对元件的原理的功能了解的更多更深刻。

在这次过程中,我深刻的体会到在设计过程中,需要反复实践,其过程很可能相当的烦琐,有时花很长时间检查电路故障,分析原因,那时心中就有点灰心,有时还特别想放弃,此时更需要静下心来,更仔细的查找原因。

总之,这次实验过程中我受益匪浅,在摸索我和我的搭档实现了课题所要求的结果。

培养了我的设计思维,增加了动手操作的能力。

更让我体会到实现电路功能喜悦。

 

参考文献

【1】康华光.电子技术基础.数字部分(第四版)【M】.北京:

高等教育出版社,2003.

【2】李广弟.单片机基础【M】.北京:

北航出版社,2001.

【3】梁超.一款基于单片机技术的电子抢答器【M】.机电工程

技术,2005.

【4】李朝青.单片机原理及接口技术【M】.北京:

北京航空航天大学出版社1999.

【5】李海. 74系列芯片手册.重庆:

重庆大学出版社,1999:

34-89.

【6】秦曾煌.电工学(下册),电子技术[M].北京:

高等教育出版2004:

118-192. 

【7】李淑明, 朱名日. 电子电路实验教学模式的探索与实践.广西:

科技信息,2009:

13-56. 

【8】黄洁.数字电路实验教学模式的探讨[J].湖北:

人文社会科学版,2007:

47-90. 

 

附录

附录A电路图

附录B元器件清单

序号

名称与规格

数量

序号

名称与规格

数量

1

按键

8

5

单排插孔

20

2

蜂鸣器

1

6

共阴数码管

1

3

330欧电阻

7

7

10K欧姆电阻

8

4

PNP三极管(9013)

1

8

最小系统板套件:

序号

名称与规格

数量

序号

名称与规格

数量

1

最小系统板

1块

6

杜邦线

15根

2

RS232串口线

1根

7

芯片座

3

5V电源

1个

8

圆孔插针2.54mm

4

USB电源线

1根

9

直插针2.54mm

5

5*7cm万用表

10

附录C完整源程序

#include"reg52.h"

typedefunsignedcharuint8;

typedefunsignedintuint32;

sbitbee=P3^7;

sbits_1=P1^0;

sbits_2=P1^1;

sbits_3=P1^2;

sbits_4=P1^3;

sbits_5=P1^4;

sbits_6=P1^5;

sbits_7=P1^6;

sbits_8=P1^7;

//共阴数码管0~8编码

uint8codeTab[]={

0x3F,0x06,0x5B,0x4F,0x66,

0x6D,0x7D,0x07,0x7F};

//函数声明

uint8s_control(void);

Voiddisplay(uint8num);

/*************************

函数名称:

delay(uint32z)

函数功能:

起延时作用

参数:

z

返回值:

其他说明:

延时的时间由z决定,

z=n时大约延时nms

*************************/

voiddelay(uint32z)

{

uint32x,y;

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

{

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

}

}

/*************************

函数名称:

main(void)

函数功能:

主函数:

八路抢答器

只要有一路按键按下,

相应的数码管就会显示对应的数字

蜂鸣器鸣叫

参数:

返回值:

其他说明:

只要按下其中一路,其他路就被屏蔽,只显示

一开始按下的按键,直到重新开始抢答

*************************/

Voidmain(void)

{

uint8Ch;

bee=1;

P2=0x00;//初始化P2口

P1=0xff;//初始化P1口

while

(1)

{

Ch=s_control();

While(Ch!

=0)

{

Switch(Ch)

{

case1:

display

(1);//第1路抢答成功、显示1

Break;

case2:

display

(2);//第2路抢答成功、显示2

Break;

case3:

display(3);//第3路抢答成功、显示3

Break;

case4:

display(4);//第4路抢答成功、显示4

Break;

case5:

display(5);//第5路抢答成功、显示5

Break;

case6:

display(6);//第6路抢答成功、显示6

Break;

case7:

display(7);//第7路抢答成功、显示7

Break;

case8:

display(8);//第8路抢答成功、显示8

Break;

}

}

}

}

/**************************

函数名称:

s_control()

函数功能:

控制八路按键,其中有一路按下,则返回对应是数字

参数:

返回值:

0:

没有按键按下

1:

第一个按键按下

2:

第二个按键按下

3:

第三个按键按下

4:

第四个按键按下

5:

第五个按键按下

6:

第六个按键按下

7:

第七个按键按下

8:

第八个按键按下

其他说明:

**************************/

uint8s_control(void)

{

//第一个按键按下

If(s_1==0)

{

delay(5);//按键消抖

if(s_1==0)

{

While(!

s_1);//松手判断

return1;

}

}

//第二个按键按下

Elseif(s_2==0)

{

delay(5);//按键消抖

if(s_2==0)

{

While(!

s_2);//松手判断

Return2;

}

}

//第三个按键按下

Elseif(s_3==0)

{

delay(5);//按键消抖

if(s_3==0)

{

While(!

s_3);//松手判断

Return3;

}

}

//第四个按键按下

Elseif(s_4==0)

{

delay(5);//按键消抖

if(s_4==0)

{

While(!

s_4);//松手判断

Return4;

}

}

//第五个按键按下

Elseif(s_5==0)

{

delay(5);//按键消抖

if(s_5==0)

{

While(!

s_5);//松手判断

Return5;

}

}

//第六个按键按下

Elseif(s_6==0)

{

delay(5);//按键消抖

if(s_6==0)

{

While(!

s_6);//松手判断

Return6;

}

}

//第七个按键按下

Elseif(s_7==0)

{

delay(5);//按键消抖

if(s_7==0)

{

While(!

s_7);//松手判断

Return7;

}

}

//第八个按键按下

elseif(s_8==0)

{

delay(5);//按键消抖

if(s_8==0)

{

While(!

s_8);//松手判断

return8;

}

}

//无按键按下

Else

Return0;

}

/*************************

函数名称:

display(unit8num)

函数功能:

将八路按键按下的数显示在数码管上

并且蜂鸣器响

参数:

num

返回值:

其他说明:

num用来传递哪路按键按下

*************************/

Voiddisplay(unit8num)

{

uint32time;//定义蜂鸣器响的时间

P2=Tab[num];//显示对应按键的数字

//设置蜂鸣器响的时间

For(time=500;time>0;time--)

{

Bee=0;

}

Bee=1;

//delay(500);

While

(1);

}

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

当前位置:首页 > 工程科技 > 电力水利

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

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