多路抢答器设计论文.docx

上传人:b****1 文档编号:16656889 上传时间:2023-04-23 格式:DOCX 页数:19 大小:260.24KB
下载 相关 举报
多路抢答器设计论文.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

多路抢答器设计论文

多路抢答器的设计

摘要

本作品以AT89S52单片机作为主要模块、数码管做为显示模块。

本抢答器主要是通过八个按键开关来摸拟八路选手的抢答,开始键按下,则进入到八个按键的扫描中,同时显数倒计时时间。

同时该抢答器还有时间的加减、数据的清零、八路选择手犯规报警功能;通过数码管来显示抢答的时间和抢答选手的号数。

本作品造价便宜,硬件比较简单,通俗易懂,趣味十足。

关键词:

单片机,抢答器,显示

一、作品设计方案论证与比较

1、主控部分的方案比较

方案一:

用以AT89S52为核心的单片机控制方案,通过相应的程序,并通过按键来进行电平识别,再由单片机输出相应的程序,并将相应数值通过数码来显示,运用这个方案来实现题目的要求,其硬件电路的设计简单,编程并不是很复杂,作品功能的调试只要稍微结合电路,修改一下相应程序即可。

方案二:

采用数字电路实现输出电压的控制方案,用加减计数器,通过加减键实现加计数或减计数,通过计数器的自动加减,锁存器的锁存显示等。

用这种方法来实现,其优点是不用编程,但其不足的之处是电路复杂,焊接工程量大,一旦焊接错误,就会给检查硬件带来很大的麻烦,而且调试也相对麻烦。

通过比较发现,用单片机来制作的抢答器,硬件电路比较简单,容易明白,且成本相对较低;而用数电芯片来制作的抢答器,电路相对比较复杂,,成本相对较高。

综合考滤,最终选择方案一。

2、显示部份的比较设计

 方案一:

采用LCD1602显示,用单片机可实现数据显示,显示内容较为丰富,较为美观,但显示亮度和字体大小在演示时不尽人意,价格也比较昂贵,且题目要求的显示内容也较少,只是倒计时的时间和相应的队号而以,所以没有采用此方案。

方案二:

采用LED七段数码管,采用三极管9012做为位码驱动,电路结构简单,并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易,成本较低。

故采用LED数码管显示。

电路如下图1-1所示

图1-1

三、硬件电路设计

本系统采用AT89S52单片机作为控制核心,对按键开关送来的信号进行分析处理,最终控制数码管显示相应的数值。

本系统主要的单元电路有单片机主控电路、键盘控制电路、LED显示电路模块等。

1.系统整体方案的设计

通过对整个电路部分的比较设计,得出整体系统如图1-2所示。

图1-2系统框图

2.单片机主控电路

主控电路以单片机最小系统(电路图省略)为的接口电路部分,最小系统图作为单片机主控电路工作的基础包括了时钟电路、复位电路等。

主控电路中P0口控制驱动LED段码,P3键盘扫描控制,P2与P0部分接口分别用来作为开始与关断的输入端口。

四、软件的设计

系统程序主流程图如图1-3所示。

五、调试与分析

本次作品的调试是通过实验板供电和编写程序来调试的。

首先,把编好的程序,通过实验板稍入单片机中,在利用单片机放到我们的电路板里进行每项功能的校验与调试,刚开始时我们的电路有些问题,经过修改电路后在重新调试才出功能,需要每实现一个功能就并入另外一个功能,最后使它们完整的结合在一起才算成功。

具体操作:

1、接上五伏电源,观察数码管显示及报警状态。

2、此时按下P2.1,即可进行抢答时间的设置,可加、可减。

3、此时先不按下开始键,而是按下任意键,这时就可以获知犯规的功能是否实现了,结果完全正确。

4、然后再按下开始键,此时观察数码管显示倒计时是否正确,还有按下选手键,这时数码管会显示相应的选手号,同时时间停止。

这个过程完全正确。

综合各个测试合果,发现完全符合题目的要求,所以所有测试完全成功。

六、设计制作总结

通过一个多星期的努力,我们顺利的完成了抢答器的制作,成功的完了此次实训,此次实训相对来说程序比较多,也有很多值得我们去学习的地方。

从作品的构思、用实验板的测试、对要制作板的构造、制作板、整体调试这是一个比较复杂的过程,这是一次对我们的考验,这是给我们的一个锻炼机会。

我们很珍惜此次实训,用心的去完成每个步骤,努力去达到所要得到的理想效果。

作品完成了,我感觉到我们的各方面的能力都上了一层,包括设置、编程、画PCB等等。

实训能促进我们的进步,能够使我们对学习本专业增加信心,锻炼了我们各方面的能力。

七、原理图

 

八主程序清单

定时器T1时间初值

设50ms时间初值为Z,Z的计算方法为

(216-Z)×12=12×50×103,结果Z=15536D=3CB0H

OKEQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT1SUB

ORG001BH

AJMPT1INT

ORG0040H

MAIN:

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

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

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

MOVTH0,#0F0H

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

MOVTH1,#3CH

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

SETBEA

SETBET0

SETBET1

SETBEX0

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

CLROK

CLRRING

SETBTR1

SETBTR0;一开始就运行定时器,以开始显示FFF

=====查询程序=====

START:

MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

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

JBP3.0,NEXT;ddddddd

ACALLDELAY

JBP3.0,NEXT

ACALLBARK;按键发声

MOVA,R1

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

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

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,TZ1

JNBP1.7,TZ2

AJMPSTART

TZ1:

JMPFALSE7

TZ2:

JMPFALSE8

=====非法抢答处理程序=====

FALSE1:

ACALLBARK;;按键发声

MOVR3,#01H

AJMPERROR

FALSE2:

ACALLBARK

MOVR3,#02H

AJMPERROR

FALSE3:

ACALLBARK

MOVR3,#03H

AJMPERROR

FALSE4:

ACALLBARK

MOVR3,#04H

AJMPERROR

FALSE5:

ACALLBARK

MOVR3,#05H

AJMPERROR

FALSE6:

ACALLBARK

MOVR3,#06H

AJMPERROR

FALSE7:

ACALLBARK

MOVR3,#07H

AJMPERROR

FALSE8:

ACALLBARK

MOVR3,#08H

AJMPERROR

=====INT0(抢答时间R1调整程序)=====

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

=====INT1(回答时间R2调整程序)=====

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

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

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,FULL1s中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;如按下停止键退出

ACALLDISPLAY

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

AJMPRECOUNT

ACCOUT:

JNBP1.0,TRUE1

JNBP1.1,TRUE2

JNBP1.2,TRUE3

JNBP1.3,TRUE4

JNBP1.4,TRUE5

JNBP1.5,TRUE6

JNBP1.6,TZ3

JNBP1.7,TZ4

AJMPRECOUNT

TZ3:

JMPTRUE7

TZ4:

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,#0AH,FLASH;0.5s向下运行->灭并停响

CLRRING

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

CJNEA,#14H,CHECK1下面是1s的情况,响并显示号数并清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

ACALLDELAY

MOVDPTR,#DAT2

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

ACALLDELAY

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

ACALLDELAY

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

=====延时(显示和去抖动用到)=====

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

RET

=====发声程序=====

BARK:

SETBRING

ACALLDELAY1

ACALLDELAY1

CLRRING;按键发声

RET

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

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

CPLP3.6;RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音

OUT:

RETI

=====T1溢出中断(计时程序)=====

T1INT:

MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

END

九、参考资料

[1]《电子整机装配实训-李伟民》.苏伯贤

[2]《单片机原理与应用》.王效华张咏梅

[3]《数字电路》.刘勇杜德昌陈松

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

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

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

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