抢答器Word格式文档下载.docx

上传人:b****5 文档编号:17608101 上传时间:2022-12-07 格式:DOCX 页数:25 大小:433.37KB
下载 相关 举报
抢答器Word格式文档下载.docx_第1页
第1页 / 共25页
抢答器Word格式文档下载.docx_第2页
第2页 / 共25页
抢答器Word格式文档下载.docx_第3页
第3页 / 共25页
抢答器Word格式文档下载.docx_第4页
第4页 / 共25页
抢答器Word格式文档下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

抢答器Word格式文档下载.docx

《抢答器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《抢答器Word格式文档下载.docx(25页珍藏版)》请在冰豆网上搜索。

抢答器Word格式文档下载.docx

元器件布局图见附录D。

2.3元器件清单

元器件清单见附录E。

3软件系统的设计

3.1单片机资源的简介

该抢答器用到了单片机的定时器的功能,定时器0采用工作方式1并以中断方式工作;

在数据的显示时采用的是查表的方法,因此需要将表格、数据存到单片机的程序存储器中去。

本设计采用独立式键盘,键盘直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。

用到的LED显示器接到了单片机的P0口线上和P2口线上。

LED指示灯和蜂鸣器接在P3口线上。

3.2软件系统各模块功能简要介绍

(1)主程序:

主程序的主要功能是进行定时器/计数器,显示缓冲区的初始化,显示,以及判断开始键按下前是否有人抢答,开始后哪个键按下调用功能程序。

(2)延时程序:

进行毫秒级延时。

(3)显示子程序:

显示程序的主要功能是将显示缓冲区的段控码正确的显示在数码管上,消除数码管阴影,采用动态显示,从右向左循环点亮每一位数码管。

(4)键扫子程序:

键扫子程序的主要功能是判断是否有键按下,是哪个键按下,判断键是否释放,释放后返回键值。

(5)中断服务程序:

中断服务程序的主要功能是进行计时操作,开始键按下后10秒若内没人抢答蜂鸣器响3秒,30秒内没人抢答蜂鸣器响灯亮,有人抢答但超时蜂鸣器响灯亮显示对应的台号。

3.3软件系统程序流程框图

3.3.1主程序系统框图

根据功能要求可以大致画出抢答器总体流程图,如图2所示。

3.3.2系统主程序

为了能过达到抢答的公平,公正,合理,应该在主持人发布抢答命令之前必须设定抢答时间,因而设定时间程序很重要。

下面是抢答器主程序流程图3所示。

3.3.3中断服务程序

本次程序设计采用了定时器0,而且将许多种情况放在中断服务程序里,所以画出其流程图如下图2所示。

图2抢答器总体流程图

3.4软件系统程序清单

程序清单见附录F。

图3抢答器主程序流程图

C

图4中断服务程序流程图

4设计结论

4.1设计结论及使用说明

4.1.1设计结论

本系统就是充分利用了AT89S52芯片的I/O引脚。

该抢答器上电或按键复位后能自动显示系统提示符“P.”,进入准备工作状态。

正常抢答时显示台号、蜂鸣器响和倒计时时间;

抢答违规时显示违规台号、违规指示灯亮、蜂鸣器报警,无人抢答时灯亮蜂鸣器响,开始10没人抢答蜂鸣器响3秒。

通过测试和仿真以及修改,该抢答器完成了设计任务,符合设计要求。

4.1.2使用说明

(1)具有清零装置和抢答控制,可由主持人操纵,避免有人在主持人说“开始”前提前抢答违反规则。

(2)具有定时功能,在30秒内无人抢答表示所有参赛选手获参赛队对本题弃权。

(3)30秒时仍无人抢答其报警电路工作表示抢答时间耗尽并禁止抢答。

(4)主持人按"

抢答开始"

键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设30s回答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。

(5)如倒计时期间,主持人想停止倒计时可以随时按"

结束"

按键,然后再按下“复位”键系统会自动进入准备状态,等待主持人按"

进入下次抢答计时。

(6)如果主持人未按"

键,而有人按了抢答按键,犯规抢答,蜂鸣器报警,数码管显示违规回路号,直到按下"

复位"

键为止。

4.2仿真结果

在仿真时用到了两个软件,第一个是Keil,第二个是Proteus,本次仿真是将两个软件结合起来进行的。

运用Keil软件用来编译和调试程序,运用Ptoteus软件来仿真。

抢答器上电时,仿真的数码管显示器显示如图5所示,当按下开始键时,显示器显示倒计时,此时数码管显示器的显示如图6所示,若在开始键按下之前有人抢答,数码管显示违规台号,违规指示灯亮,仿真图如图7所示。

正常抢答时,数码管显示台号仿真图如图8所示。

抢答超时时,数码管显示违规台号,违规指示灯亮,蜂鸣器发出音响,仿真图如图9所示。

图5抢答器上电显示P.图

图6抢答器显示倒计时图

图7抢答器正常抢答图

图8抢答器抢答违规图

图9抢答器超时违规图

4.3设计体会

本次设计功能全部实现,达到设计要求。

虽然本次设计达到要求,但是仍存在许多不足之处,因此,我还有许多需要改进的地方。

本次设计从画图到做板子再到编程,我都自己努力地去尝试了一遍,虽然在这个过程中我遇到过很多困难,也有过很多次畏难的心理,但是通过请教老师和同学,并通过他们的悉心指导,问题最终都得到了解决。

因此,在本次设计中我的体会之一便是要学会虚心请教,不懂就问。

在此次设计中我认为自己还存在一点不足那便是不能将课堂上的东西灵活运用到实际当中,就拿编程来讲,我们在课堂上学的指令也好,语句也罢,我们要将它灵活地转换成一条语句或实现某种具体的功能那就有点困难,因此,学以致用也是我此次设计中的收获之一。

最后,本次设计还让我懂得了编程实现功能时要懂得将每个模块有机地结合在一起,不一定每个模块都要自己编写,可以灵活地借鉴别人的某个模块,这便是考验我们的运用的能力了。

总而言之,在本次课程设计,甚至在本门课程上我学到了很多东西,无论是做人做事还是学习,都让我受益匪浅。

4.4教学建议

在教学上王老师兢兢业业,认真负责,教会了我们很多课堂上的知识,而在生活上,王老师传授了我们很多做人的道理,如做人要诚实,不是自己写的就不是自己写的弄懂就行。

在教学方面,我觉得王老师的课件做的特别的好,课件重点、难点突出,讲解非常详细,而且还补充了一些很实用的知识。

在课堂上将难懂的知识通俗易懂化,王老师将理论教学与实际操作相结合,严格要求实验。

对于教学方面的建议我提一点自己的拙见,希望老师以后更加严格要求,让我们更上一层楼。

结束语

通过这次设计使我感触很深。

本次课程设计重点放在培养学生的动手和动脑能力上。

尤其在抢答器硬件设计、制作及软件程序的编写上,更能体现出对学生自己动手、动脑的要求及锻炼。

因为是一人一组一物更能进一步加强学生的动手和动脑能力。

由于硬件在早期过程中就做好了,所以这次课程设计的重点是放在了软件的设计。

软件设计重要的是思路,只要你的思路来了,就能画出流程图,然后根据流程图,运用单片机对应语言将该流程图写出来。

一次也许不能讲该功能完全实现,但经过多次修改,调试,最终会将程序写出来的。

在此次课程设计中,我曾借鉴了一些老师的课件里和其他参考书里的一些程序。

总感觉自己在程序编写方面没有什么好的创新,所以这又是我在此次课程设计中感到遗憾的一件事。

最后,我体会最深的是做文档,以前也做过模电课程设计,可没像这次这么麻烦,因为是按照毕业设计的格式做的,所以有很多细节要处理。

比如字体的大小、段落的行距等等,确实是一个很大的工程。

但是我觉得现在就按照毕业设计的格式做文档,对于我们以后做毕业文档的时候是一次很好的锻炼。

致谢

在此我要感谢王韧老师,实验时因为他的严格要求为我们的这次设计奠定了基础,单片机课程设计是一门综合性课程设计,主要是针对我们所学的知识联系实践进行综合性设计,我们花了比较长的时间作成了属于自己的产品,心里很有成就感。

通过此次课程设计,我的动手能力提高了不少,向认真审阅和提出很好的建议的指导老师王韧老师表示衷心的感谢;

同时向那些支持关心帮助我的老师、朋友和同学们提出的很多切实可行的建议表示感谢。

参考文献

[1]马忠梅,籍顺心,张凯,马岩.单片机的C语言应用程序设计[M].北京:

北京航空航天大学出版社,2006

MaZhongmei,J,ZhangKai,MaYan.MCUClanguageprogramdesign[M].beijing:

Beijingaerospaceuniversitypress,2006

[2]李广弟,朱月秀,冷祖祁.单片机基础[M].北京:

北京航空航天大学出版社,2007

LiGuangdi,ZhuYuexiu,LengZuqi.Microcontroller[M].beijing:

Beijinguniversityofaeronauticsandpress,2007

[3]李光飞.单片机课程设计实例指导[M].北京:

北京航空航天大学出版社,2004.9

LiGuangfei.Thiscoursedesignexampleguide[M].beijing:

Beijinguniversityofaeronauticsandpress,2004.9

[4]邢增平.Protel99SE设计专家指导[M].北京:

中国铁道出版社,2004

XingZengping.Protel99SEdesignexpertguidance[M].beijing:

Chinarailwaypublishinghouse,2004

附录A总电路图

附录BPCB顶层图

附录CPCB底层图

附录D元器件布局图

附录E元器件清单

PartType

Designator

Footprint

CON8

JP1

1K

R12

RE

JP4

R13

JP3

R2

JP2

12MHZ

Y1

CQ

CON9

J5

22uF

C3

CC

J2

33pF

C2

ISP

C1

LED1

1

200

R1

2

470

R00

LED

D6

R04

D5

R07

D8

R06

D7

R05

D4

R03

D1

R25

D9

R26

D3

R24

D2

R22

PNP

Q7

R23

Q2

R20

Q

R02

Q3

R01

Q1

R27

Q6

R21

Q8

RP0

Q4

RP3

Q5

RP4

SW

S5

RP2

S6

RP5

S4

RP1

S2

RP6

S3

RP7

S7

8051

U1

S1

BELL

LS1

LABA

S9

CON1

J00

S8

CON2

J1

SS

SW6

JX2

USB

J3

JP5

 

附录F程序清单

#include<

reg52.h>

#include<

intrins.h>

//包含左移函数_crol_()的头文件

#defineucharunsignedchar//无符号字符型宏定义

#defineuintunsignedint//无符号整型宏定义

#defineafind_data[0]//数码管的缓冲区宏定义

#definebfind_data[1]

#definecfind_data[2]

#definedfind_data[3]

#defineefind_data[7]

sbitP3_0=P3^0;

//P3口的每根口线进行位定义

sbitspeaker=P3^1;

//此口线只接蜂鸣器时有效

sbitP3_2=P3^2;

sbitP3_3=P3^3;

sbitP3_4=P3^4;

sbitP3_5=P3^5;

sbitP3_6=P3^6;

sbitP3_7=P3^7;

uintt,kaishi;

//定义若干全局变量

ucharp=0;

/*共阳数码管字型码*/

/*0,1,2,3,4,5,6,7,8,9,p.,灭,-*/

Charcode

dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf};

/*"

P."

显示代码序号*/

chardatafind_data[8]={11,11,11,11,11,11,11,10};

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

函数名称:

delay()

函数功能:

进行毫秒级延时

入口参数:

count

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

voiddelay(uintcount)

{

uintj;

while(count--!

=0)

{

for(j=0;

j<

80;

j++);

}

}

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

函数名称:

disp()

在数码管上进行显示

voiddisp()

uinti;

charj=0xfe;

chark;

for(i=0;

i<

8;

i++)

k=find_data[i];

P0=dis_code[k];

//送段控

P2=j;

//送位控

delay

(1);

//缓冲显示一下

P2=0xff;

//消除数码管阴影

j=_crol_(j,1);

//循环左移

}

key()

进行按键处理,获取按键值

出口参数:

keyzhi

ucharkeychuli()

ucharA;

A=P1;

//P1口内容送a

A=~A;

//取反

return(A);

//返回键值

ucharkey()

ucharkeyzhi,keyzhii;

//电子钟键盘按键键值临时存放

keyzhi=keychuli();

//调P1口处理函数

if(keyzhi!

=0)//有键动作延时去抖动,否则函数返回

{

disp();

disp();

keyzhi=keychuli();

//再次调P1口处理函数

if(keyzhi!

=0)//真正有键按下,取键值并暂存

{

keyzhii=keyzhi;

while(keyzhi!

=0)//判按键是否释放

{

disp();

keyzhi=keychuli();

keyzhi=keyzhii;

//按键释放后恢复按键键值

}

}

return(keyzhi);

//返回按键键值

time0()

中断服务程序

voidtimer0(void)interrupt1using2//选用定时器0工作方式为1

{

staticucharclick=0;

TH0=0x3c;

TL0=0xb0;

//定时器重新赋值

click++;

if(click>

20)

click=0;

++p;

if(p<

=10)//前十次为30S--20S的倒计时

{

b=2;

if(a==0)a=9;

elsea--;

if(p==10&

&

kaishi==1)

{speaker=0;

kaishi=0;

;

}//10S后无人抢答报警3S

}

if(p>

10&

p<

=20)//中间十次为20S--10S的倒计时

{

b=1;

if(a==0)a=9;

elsea--;

if(p==13)speaker=1;

20&

=30)//后十次为10S--0S的倒计时

b=0;

if(p==31)//0S后,不同灯亮,做不同处理

p=0;

P3_6=0;

S1=S2=S3=S4=1;

//无人抢答时,LED6亮

if(P3_2==0)//LED2亮,对应处理

{P3_2=1;

//30S时间到,超时灯LED7亮

P3_7=0;

P3_6=1;

a=1;

e=11;

TR0=0;

//关闭定时器,显示自己台号

speaker=0;

//蜂鸣器报警1S

delay(1000);

speaker=1;

}

elseif(P3_3==0)//LED3亮,对应处理

P3_3=1;

//30S时间到,抢答灯灭超时灯亮

a=2;

//蜂鸣器报警1S

}

elseif(P3_4==0)//LED4亮,对应处理

P3_4=1;

//30S时间到,抢答灯灭超时灯亮

a=3;

//蜂鸣器报警1S

}

elseif(P3_5==0)//LED5亮,对应处理

P3_5=1;

a=4;

TR0=0;

de

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

当前位置:首页 > 经管营销 > 财务管理

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

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