基于单片机的抢答器设计.docx

上传人:b****4 文档编号:4796973 上传时间:2022-12-09 格式:DOCX 页数:19 大小:327.01KB
下载 相关 举报
基于单片机的抢答器设计.docx_第1页
第1页 / 共19页
基于单片机的抢答器设计.docx_第2页
第2页 / 共19页
基于单片机的抢答器设计.docx_第3页
第3页 / 共19页
基于单片机的抢答器设计.docx_第4页
第4页 / 共19页
基于单片机的抢答器设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于单片机的抢答器设计.docx

《基于单片机的抢答器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的抢答器设计.docx(19页珍藏版)》请在冰豆网上搜索。

基于单片机的抢答器设计.docx

基于单片机的抢答器设计

摘要

本次课程设计制作的是智能抢答器。

对于抢答器我们大家都很熟悉:

是用于选手做抢答题目时用的,选手进行抢答,最先抢到题的选手回答问题。

本实验设计的智能抢答器由主体电路与扩展电路组成。

优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。

通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。

经过布线、焊接、调试等工作后智能抢答器成形。

Abstract

ThecoursedesignissmartResponder.TheResponderofusarefamiliarwith:

useforplayersdoRespondertopic,playersfortheanswerinthefirsttograbthetitleofplayersanswerquestions.IntelligentResponderoftheexperimentaldesigniscomposedbythemaincircuitandtheexpansionofthecircuit.Thepriorityencodercircuit,alatch,thedecodingcircuitwillbeparticipatingteamoftheinputsignalisoutputonthedisplay;tostartalarmcircuitwiththecontrolcircuitandahostswitch,theabovetwo-partmaincircuit.Thesecondpulsesignalgeneratedbythetimingcircuitandadecodingcircuitoutputonthedisplayrealizethechronographfunction,constitutingtheexpansioncircuit.Afterwiring,welding,commissioningworksmartResponderforming.

 

1引言

1.1设计目的

对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。

抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。

选手们都站在同一个起跑线上,体现了公平公正的原则。

本实验设计的数字抢答器由主体电路与扩展电路组成。

优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。

通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。

经过布线、焊接、调试等工作后数字抢答器成形。

更具有实用性。

1.2设计要求

抢答器具有锁存与显示功能。

即选手按动按钮,锁存相应的编号,并在数码管上显示,同时扬声器发出报警声响提示。

选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。

在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。

如果在抢答中,靠视觉是很难判断出哪组先答题。

利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。

1.3设计方法

用单片机来实现,它的制作比较简单,与我们学的《单片机原理》联系紧密,能将我们所学知识用于实际,对巩固所学知识有重要意义,使总体方案易于实现。

所以本方案用单片机来实现。

2总体设计方案

2.1本数字抢答器的组成

本抢答器的电路主要有四部分组成:

数字抢答电路、时序控制电路、报警电路以及可预置时间的定时电路。

其中数字抢答部分有一个74LS373锁存器和LED数码管显示器组成,可以将八位抢答者的按钮通过LED数码管显示器显示出他们最先抢答者的序号。

而时序控制电路的功能是当参赛选手按动抢答器时,使扬声器发声,这时抢答电路和定时电路停止工作。

而且设定的时间到达后若无人抢答,则报警电路工作。

报警电路工作的条件是当设定时间到达后或者有人抢答时,报警电路被输入一个高电平,这时此电路工作。

2.2数字抢答器主要功能

抢答器原理:

每个选手的座位前安装一只抢答按钮开关和一只信号灯。

主持人的座位前安装一只复原按钮开关、一只蜂鸣器和一只抢答器工作状态指示灯。

每当主持人口头发出允许抢答的号令之后,哪个队先按下座位上的按钮开关,该座位的信号灯就先被点亮,同时封锁其他按钮开关的活动。

并且熄灭主持人座位上的状态指示灯和发出3声类似于电话振铃的提示声,以“声明”此次抢答动作已经完成。

在主持人确认后,按下复原按钮,状态指示灯重新点亮,并且同时发出“笛——笛——”声,为下一次的抢答作好准备。

电路中的蜂鸣器FM是一只带有助音腔的压电陶瓷蜂鸣器,用于模拟发出报警声的功率放大器和喇叭。

在FM发声的同时,灯D6也在发光。

FM可以看作是一个电容性负载,本身不能流过直流电流。

发声的原理是,作用在两个电极极板的电位在发生变化时,陶瓷材料就发生弯曲,从而振动空气发出声音。

FM和4只按钮开关以及4只电阻都是在演示板的基础上额外添加的。

由于RB端口内部具有上拉电阻,只要用软件设置其有效,即可省略在4只端口引脚上外接上拉电阻。

参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。

如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示0。

抢答器可以利用硬件电子元器件实现,但电路结构复杂,调试困难,涉及到的外围元件多,不便于安装,实验给实际操作带来很大的麻烦。

如果有选手在规定的时间以前完成问题,主持人通过按键开始按钮来复位,开始新的问题作答,因为程序不是很大不需要扩展存储空间,选手按键跳入相应的子程序,回答倒记时。

3系统软件设计

3.1主程序系

3.1.1部分软件设计

系统结构图

软件系统结构图见图3.1

图3.1软件系统结构图

3.1.2键盘扫描程序流程图

本系统的键盘采用独立式按键键盘程序流图见图3.2:

 

Y

图3.2键盘扫描程序流程

3.1.3抢答数码显示软件程序设计

LED数码管采用静态显示,显示器由9个共阳极数码管组成。

输入只有两个信号,它们是串行数据线DIN和移位信号CLK。

9个串/并移位寄存器芯片74LS164首尾相连了九位共阳极七段数码管,共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),其他管脚接段驱动电路输出端。

数码管显示程序流程图见图3-3:

 

Y

 

图3-3数码显示程序流程

3.1.4程序代码

见附录1

3.2软件调试

3.2.1编译、连接项目,形成目标文件

把程序文件添加到项目文件中,并且程序文件已经建立好存盘后,就可以进行编译、连接,形成目标文件。

编译、连接用Project菜单下的BuiltTarget命令(或快捷键F7),见图3.5和图3.6所示:

图3-5程序编译

图3-6连接创建目标文件

编译、连接时,如果程序有错,则编译不成功,并在下面的信息窗口给出相应的出错提示信息,以便用户进行修改,修改后再编译、连接,这个过程可能会重复多次。

如果没有错误,则编译、连接成功,并且信息窗口给出提示信息。

4系统仿真测试

系统硬件及系统软件设计完成,经硬件和软件调试成功后,可以将系统软件和硬件结合起来调试,这里采用Proteus单片机仿真软件进行仿真。

完成电路原理图设计后,将Keil软件调试产生的HEX文件添加到Proteus软件中,运行后,其仿真结果如下图4.1、4.2、4.3:

图4.1系统仿真图

图4.2系统仿真图

4.3系统仿真图

5总结

这次的课程设计收获颇多。

由于是自由选择课题,在最初选择课题的时候就遇到一点问题,参考了一些资料,最终确立了智能抢答器这个课题。

课题选定之后,就注重搜集相关的资料,网上也下载了不少资料,对自己所要设计的智能抢答器有了初步的了解。

我主要是负责软件方面的设计,编程方面,自己的基础不是很好,遇到了不少困难,借鉴了一些资料的相关程序,同时也回顾了单片机教科书上的内容,巩固了以前学习的知识,这一点也是这次比较大的收获。

程序编完后,就开始了调试的过程,期间同样不可避免的遇到了一些问题,很多低级的错误都不应该,这点我尤其有体会,以后的编程中我会更加注意这个问题。

最后就是用Proteus单片机仿真软件进行仿真,这部分由于前面的调试和检查,硬件和软件部分都接近预想的效果,这就导致软硬件综合仿真很顺利的完成。

 

附录1

程序代码

EQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

ORG0040H

MAIN:

MOVR1,#30;初设抢答时间为30s

MOVR2,#60;初设答题时间为60s

MOVTMOD,#11H;设置未定时器/模式1

MOVTH0,#0F0H

MOVTL0,#0FFH;越高发声频率越高,越尖

MOVTH1,#3CH

MOVTL1,#0B0H;50ms为一次溢出中断

SETBEA

SETBET0

SETBET1

SETBEX0

SETBEX1;允许四个中断,T0/T1/INT0/INT1

CLROK

CLRRING

SETBTR1

SETBTR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了

查询程序:

START:

MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

ACALLDISPLAY;未开始抢答时候显示FFF

JBP3.0,NEXT

ACALLDELAY

JBP3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询

ACALLBARK;按键发声

MOVA,R1

MOVR6,A;送R1->R6,因为R1中保存了抢答时间

SETBOK;抢答标志位,用于COUNT只程序中判断是否查询抢答

MOVR7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号

MOVR3,#0AH;抢答只显示计时,灭号数

AJMPCOUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面

NEXT:

JNBP1.0,FALSE1

JNBP1.1,FALSE2

JNBP1.2,FALSE3

JNBP1.3,FALSE4

JNBP1.4,FALSE5

JNBP1.5,FALSE6

JNBP1.6,FALSE7

JNBP1.7,FALSE8

AJMPSTART

非法抢答处理:

FALSE1:

MOVR3,#01H

AJMPERROR

FALSE2:

MOVR3,#02H

AJMPERROR

FALSE3:

MOVR3,#03H

AJMPERROR

FALSE4:

MOVR3,#04H

AJMPERROR

FALSE5:

MOVR3,#05H

AJMPERROR

FALSE6:

MOVR3,#06H

AJMPERROR

FALSE7:

MOVR3,#07H

AJMPERROR

FALSE8:

MOVR3,#08H

AJMPERROR

抢答时间调整程序:

INT0SUB:

MOVA,R1

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY;先在两个时间LED上显示R1

JNBP3.4,INC0;P3.4为+1s键,如按下跳到INCO

JNBP3.5,DEC0;P3.5为-1s键,如按下跳到DECO

JNBP3.1,BACK0;P3.1为确定键,如按下跳到BACKO

AJMPINT0SUB

INC0:

MOVA,R1

CJNEA,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。

MOVR1,#00H

ACALLDELAY1

AJMPINT0SUB

ADD0:

INCR1

ACALLDELAY1

AJMPINT0SUB

DEC0:

MOVA,R1

JZSETR1;如果R1为0,R1就置99,

DECR1

ACALLDELAY1

AJMPINT0SUB

SETR1:

MOVR1,#63H

ACALLDELAY1

AJMPINT0SUB

BACK0:

RETI

回答时间调整程序:

INT1SUB:

MOVA,R2

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP3.1,BACK1

AJMPINT1SUB

INC1:

MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ACALLDELAY1

AJMPINT1SUB

ADD1:

INCR2

ACALLDELAY1

AJMPINT1SUB

DEC1:

MOVA,R2

JZSETR2

DECR2

ACALLDELAY1

AJMPINT1SUB

SETR2:

MOVR2,#63H

ACALLDELAY1

AJMPINT1SUB

BACK1:

RETI

倒计时程序(抢答倒计时和回答倒计时都跳到改程序):

REPEAT:

MOVA,R2;使用锦囊时重新计时

MOVR6,A

CLRRING

COUNT:

MOVR0,#00H;重置定时器中断次数

MOVTH1,#3CH

MOVTL1,#0B0H;重置定时器

RECOUNT:

MOVA,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6

MOVB,#0AH

DIVAB;除十分出个位/十位

MOV30H,A;十位存于(30H)

MOV31H,B;个位存于(31H)

MOVR5,30H;取十位

MOVR4,31H;取个位

MOVA,R6

SUBBA,#07H

JNCLARGER;大于5s跳到LARGER,小于等于5s会提醒

MOVA,R0

CJNEA,#0AH,FULL;1s中0.5s向下运行

CLRRING

AJMPCHECK

FULL:

CJNEA,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计

SETBRING

MOVA,R6

JZQUIT;计时完毕

MOVR0,#00H

DECR6;一秒标志减1

AJMPCHECK

LARGER:

MOVA,R0

CJNEA,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"

DECR6;计时一秒R6自动减1

MOVR0,#00H

CHECK:

JNBP3.1,QUIT;如按下停止键退出

JNBOK,CHECKK;只在回答倒计时才有效

AJMPNEXTT

CHECKK:

JNBP3.0,REPEAT;判断是否使用锦囊

NEXTT:

ACALLDISPLAY

JBOK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)

AJMPRECOUNT

ACCOUT:

MOVA,36H

JNBACC.0,TRUE1

JNBACC.1,TRUE2

JNBACC.2,TRUE3

JNBACC.3,TRUE4

JNBACC.4,TRUE5

JNBACC.5,TRUE6

JNBACC.6,TZ1

JNBACC.7,TZ2

AJMPRECOUNT

TZ1:

JMPTRUE7

TZ2:

JMPTRUE8

QUIT:

CLROK;如果按下了"停止键"执行的程序

CLRRING

AJMPSTART

正常抢答处理程序:

TRUE1:

ACALLBARK

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

CLROK;因为答题的计时不再查询抢答,所以就锁了抢答

AJMPCOUNT

TRUE2:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

TRUE7:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#07H

CLROK

AJMPCOUNT

TRUE8:

ACALLBARK

MOVA,R2

MOVR6,A

MOVR3,#08H

CLROK

AJMPCOUNT

犯规抢答程序:

ERROR:

MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

MOV34H,R3;犯规号数暂存与(34H)

HERE:

MOVA,R0

CJNEA,#06H,FLASH;0.3s向下运行->灭并停响

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

CJNEA,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计

SETBRING

MOVR0,#00H

MOVR3,34H;取回号数

MOVR5,#0BH

MOVR4,#0BH;显示FF和号数

AJMPCHECK1

CHECK1:

JNBP3.1,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:

CLRRING

CLROK

AJMPSTART

显示程序:

DISPLAY:

MOVDPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

ACALLDELAY2

MOVDPTR,#DAT2

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

ACALLDELAY2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

ACALLDELAY2

RET

DAT1:

DB00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;"灭","1","2","3","4","5","6","7","8","9","灭","F"

DAT2:

DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;第一个为零,其他与上相同,因为十位如果为零显示熄灭

加减时间延时(起到不会按下就加N个数):

DELAY1:

MOV35H,#08H

LOOP0:

ACALLDISPLAY

DJNZ35H,LOOP0

RET

延时4236个机器周期(去抖动用到):

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

延时4236个机器周期(显示用到):

DELAY2:

MOV32H,#43H

LOOP3:

MOV33H,#1EH

MOVA,R7;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理

JNZAAAA1;没读到有效数据时继续转到AAAA1

LOOP2:

DJNZ33H,LOOP2

DJNZ32H,LOOP3

RET

读抢答按键数据口程序:

AAAA1:

MOVA,P1

CJNEA,#0FFH,AA1;当不全为1时的数据为有效数据

AA0:

MOV36H,A;将有效数据送到36H暂存

AJMPLOOP2

AA1:

DECR7

AJMPAA0

发声程序:

BARK:

SETBRING

ACALLDELAY1

ACALLDELAY1

CLRRING;按键发声

RET

TO溢出中断(响铃程序):

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

CPLP2.4;RING标志位为1时候P2.4口不短取反使喇叭发出一定频率的声音

OUT:

RET

参考文献

[1]李朝青.单片机原理及接口技术(第3版)[M].北京:

航空航天大学出版社,2006:

17-47.

[2]张克农.数字电子技术基础[M].北京:

高等教育出版社,2003:

263-270.

[3]刘湘涛,江世民.单片机原理与应用[M].北京:

电子工业出版社,2006:

184-201.

[4]余小平,奚大顺.电子系统设计——

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

当前位置:首页 > 求职职场 > 简历

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

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