单片机路智力竞赛抢答器设计.docx

上传人:b****0 文档编号:8990404 上传时间:2023-05-16 格式:DOCX 页数:29 大小:1.82MB
下载 相关 举报
单片机路智力竞赛抢答器设计.docx_第1页
第1页 / 共29页
单片机路智力竞赛抢答器设计.docx_第2页
第2页 / 共29页
单片机路智力竞赛抢答器设计.docx_第3页
第3页 / 共29页
单片机路智力竞赛抢答器设计.docx_第4页
第4页 / 共29页
单片机路智力竞赛抢答器设计.docx_第5页
第5页 / 共29页
单片机路智力竞赛抢答器设计.docx_第6页
第6页 / 共29页
单片机路智力竞赛抢答器设计.docx_第7页
第7页 / 共29页
单片机路智力竞赛抢答器设计.docx_第8页
第8页 / 共29页
单片机路智力竞赛抢答器设计.docx_第9页
第9页 / 共29页
单片机路智力竞赛抢答器设计.docx_第10页
第10页 / 共29页
单片机路智力竞赛抢答器设计.docx_第11页
第11页 / 共29页
单片机路智力竞赛抢答器设计.docx_第12页
第12页 / 共29页
单片机路智力竞赛抢答器设计.docx_第13页
第13页 / 共29页
单片机路智力竞赛抢答器设计.docx_第14页
第14页 / 共29页
单片机路智力竞赛抢答器设计.docx_第15页
第15页 / 共29页
单片机路智力竞赛抢答器设计.docx_第16页
第16页 / 共29页
单片机路智力竞赛抢答器设计.docx_第17页
第17页 / 共29页
单片机路智力竞赛抢答器设计.docx_第18页
第18页 / 共29页
单片机路智力竞赛抢答器设计.docx_第19页
第19页 / 共29页
单片机路智力竞赛抢答器设计.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机路智力竞赛抢答器设计.docx

《单片机路智力竞赛抢答器设计.docx》由会员分享,可在线阅读,更多相关《单片机路智力竞赛抢答器设计.docx(29页珍藏版)》请在冰点文库上搜索。

单片机路智力竞赛抢答器设计.docx

单片机路智力竞赛抢答器设计

 

1.设计内容及要求

1.1设计任务

8路智力竞赛抢答器

1.2设计要求

(1)利用单片机设计并制作智力竞赛抢答器。

(2)设计一个6路或以上的抢答器;

(3)有主持人按键,只有主持人按键按下之后,才允许选手抢答,否则视为犯规,犯规时有对应指示灯亮;

(4)设定抢答时间限制,超过时间若无人抢答则该题作废,并用发光二极管闪烁报警;

(5)抢答限制时间用数码管倒计时显示;

(6)有复位按钮,出现犯规或超时后可复位。

1.3设计方案

1、当主持人按下开始键,开始抢答,初始倒计时30秒开始倒计时,选手抢答成功,进入60秒答题倒计时;

2、如果在主持人按下开始键前按下抢答按钮,抢答犯规,显示器显示犯规选手号码,倒计时和选手号码显示闪烁;

3、主持人可以通过,按"抢答时间调节"键或"答题时间调节"键进入调节状态,此时会显示初始的抢答时间或回答时间,如想加一秒按一下"时间+"键,如果想减一秒按一下"时间-"键,时间LED上会显示改变后的时间,调整范围为0s~99s,0s时再减1s会跳到99,99s时再加1s会变到0s。

4、P3.0为开始抢答,P3.1为复位,p1.0-p1.7为八路抢答输入数码管段选P0口,位选P2口低3位。

P3.2抢答时间调整整,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。

2.抢答器硬件设计

本设计基于AT89S52单片机

AT89S52的引脚图

 

AT89C52芯片引脚图

2.1时钟频率电路的设计

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

 

1)图2-2外部振荡源电路

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

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

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

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

C1,C2的典型值为30PF。

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

其大小是时钟信号频率的倒数,常用fosc表示。

如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。

2.2复位电路

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

值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。

软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

2.3显示电路的设计

电路采用的是CAJ5461BH4位数码管显示,4数码管实物及接线如图所示:

2.4选手抢答按键电路的设计

选手抢答按键选用的是以P1口为输入,电路图如图所示:

2.5主持人按键电路设计

支持人按键电路选用P3口为输入,支持人按键“开始”键接P3.0,“复位”键接P3.1,“修改抢答时间”接P3.2,“修改答题时间”接P3.3,“时间+”接P3.4,“时间-”接P3.5,电路图如图所示:

3.抢答器的程序流程

本设计采用P3.2、P3.3分别接抢答时间调节和答题时间调节按钮,即通过外部中断0、外部中断1分别控制抢答、答题时间的调整。

因此,设计的软件部分可分为工作模块、外部中断0模块、外部中断1模块。

对流程图的分析,也分三部分来介绍。

3.1正常抢答流程

初始化部分:

包括对定时计数器的工作方式、初始化数值的设置,还包括对抢答时间与答题时间的预设,另外,还应对外部中断0、外部中断1进行开放。

 

3.2抢答时间调整

抢答时间调整的流程图见下图

 

P3.2对应键的按下,便进入INT0中断过程。

通过不断对P3.4(加1s)和P3.5(减1s)进行不断的查询,来对抢答时间进行调整:

发现P3.4按下,就对原抢答时间加1s,发现P3.5下,就对原抢答时间减1s并调用显示程序。

根据设计要求,当加至99s时,若再加1s,则时间变为0;当减至0s后,若再减一秒,时间变为99s。

因此,流程中应该对当前时间于99s或0s比较,再作出相应处理。

另外,在中断过程中还需要不时对停止按钮进行查询,一旦发现其按下,立即中断返回。

由于本中断过程在返回前一直是循环执行的,因此,只需要在每次循环末查询一次即可,如流程图所示

3.3答题时间调整流程

与抢答时间调整类似,一旦因P3.3对应的按钮按下,便进入INT1中断过程。

通过不断对P3.4(加1s)和P3.5(减1s)进行不断的查询,来对抢答时间进行调整:

发现P3.4按下,就对原抢答时间加1s,发现P3.5下,就对原抢答时间减1s并调用显示程序。

当加至99s时,若再加1s,则时间变为0;当减至0s后,若再减一秒,时间变为99s。

因此,流程中应该对当前时间于99s或0s比较,再作出相应处理。

 

4.抢答器制作调试问题

4.1在仿真中出现的问题

(1)电路接好后将16进制文件写入单片机内,在数码管显示中,显示的是乱码。

解决方法:

1、检查程序中的字型码是否是共阳极显示的字型码,将共阴极字型码改为共阳极字型码;

2、检查电路图,查看4位数码管显示是不是共阳极显示,将共阴极更改为共阳极显示

(2)数码管显示的数字出现抖动

解决方法:

在显示程序中更改显示延时时间,加长显示的延时时间

(3)在调节抢答时间或调节答题时间是按一次按键显示器上的数字会跳动多次

解决方法:

在按键去抖动程序中加长去抖动的延时时间

4.2在实际电路制作中出现的问题

(1)电路焊接完成将16进制程序烧写进单片机后,电路板不能正常工作,数码管没显示。

解决方法:

检查电路,确认单片机最小系统是否正确及4位数码管与单片机接线是否正确,用万用表检查各管脚间是否短路,排除短路的现象。

(2)最小系统正确及各线路中没有短路接线,数码管全亮,但正确的显示没用显示。

解决方法:

在显示程序中加入将个显示器清零的程序

5.仿真测试效果

5.1初始及复位显示

单片机初始显示及复位显示

5.2正常抢答显示

(1)主持人按下开始键,数码管显示倒计时

抢答倒计时

(2)选手抢答成功,数码管显示选手号码及答题倒计时

4号选手抢答

选手号码及答题倒计时显示

5.3犯规显示

支持人没按下开始键,选手抢答犯规。

数码管显示选手号码并闪烁

4号选手抢答犯规显示

犯规显示

5.4抢答时间调节

支持人按下“复位键”P3.1,按下“修改抢答时间”P3.2,选择调节抢答时间,按“时间+”P3.4和“时间-”P3.5,进行抢答时间的调节;主持人要修改答题时间,按下“复位键”P3.1,按下“修改答题时间”P3.3,选择调节抢答时间,按“时间+”P3.4和“时间-”P3.5,进行答题时间时间的调节,显示如图所示:

抢答时间加7秒显示

 

答题时间修改显示

6.硬件电路功能显示

6.1电路初始化显示

电路初始时数码管显示PPP

6.2正常抢答显示

1、当主持人按下开始按键后,数码管显示30秒倒计时

2、选手抢答成功,数码管显示选手号码,并显示答题时间倒计时

6.3抢答犯规显示

主持人开始按键没按下,选手按下抢答键后犯规,数码管显示犯规选手号码,倒计时显示处显示PP

6.4复位键显示

当支持人按下复位键,数码管显示初始值,显示PPP

7.实训总结

在为期两个周的单片机实训中,通过完成所选的实训题目,我们将课本中的所学到知识应用到制作中,加深了我们对课本知识的理解,在实训中遇到的许多问题,通过查阅资料和老师的讲解我们对单片机的应用又更进一层,在制作实际电路的过程中,不仅锻炼了我们的的动手能力,通过对AT89S52单片机的应用使我们加深了对单片机的认识,将课本上的知识以实际生活中的应用相结合,在制作抢答器的过程中我们遇到了许多的问题,在试过许多解决方案后,没有解决问题,也想过放弃,但还是坚持了下来。

在你解决一个问题,结果出来后,就会非常的兴奋。

在实训中学到的东西对我们以后的生活学习也有很大的帮助在我们的生活中无乱多大的困难挡住我们前进的路,我们都不能放弃,世上没有解决不了的困难,之遥我们坚持下来,成功就在手中。

8.参考文献

[1]胡建主编.《单片机原理及接口技术实践教程》.北京:

机械工业出版社.2004

[2]何立民.《MCS-51系列单片机应用系统设计》.北京:

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

[3]潘永雄.《新编单片机原理与应用》.西安:

西安电子科技大学出版社.2003

[4]张迎新.《单片微型计算机原理、应用及接口技术》(第2版).国防工业出版社.2004

[5]苏平.《单片机原理与接口技术》.电子工业出版社.2003

附录:

8路抢答器源程序

OKEQU20H;抢答开始标志位?

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT_0

ORG000BH

AJMPT0INT

ORG0013H

AJMPINT_1

ORG001BH

AJMPT1INT

ORG0040H

MAIN:

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

MOVR2,#50

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

MOVTH1,#3CH

MOVTL1,#0B0H

SETBEA

SETBET0

SETBET1

SETBEX0

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

CLROK

SETBTR1

SETBTR0;

START:

MOVR5,#0BH

MOVR4,#0BH

MOVR3,#0BH

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

JBP3.0,NEXT;

ACALLDELAY

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

MOVA,R1

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

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

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

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

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

NEXT:

JNBP1.0,K1

JNBP1.1,K2

JNBP1.2,K3

JNBP1.3,K4

JNBP1.4,K5

JNBP1.5,K6

JNBP1.6,K7

JNBP1.7,K8

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

K1:

MOVR3,#01H

AJMPFANGUI

K2:

MOVR3,#02H

AJMPFANGUI

K3:

MOVR3,#03H

AJMPFANGUI

K4:

MOVR3,#04H

AJMPFANGUI

K5:

MOVR3,#05H

AJMPFANGUI

K6:

MOVR3,#06H

AJMPFANGUI

K7:

MOVR3,#07H

AJMPFANGUI

K8:

MOVR3,#08H

AJMPFANGUI

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

INT_0:

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

AJMPINT_0

INC0:

MOVA,R1

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

MOVR1,#00H

ACALLDELAY1

AJMPINT_0

ADD0:

INCR1

ACALLDELAY1

AJMPINT_0

DEC0:

MOVA,R1

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

DECR1

ACALLDELAY1

AJMPINT_0

SETR1:

MOVR1,#63H

ACALLDELAY1

AJMPINT_0

BACK0:

RETI

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

INT_1:

MOVA,R2

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

ACALLDISPLAY

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP3.1,BACK1

AJMPINT_1

INC1:

MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ACALLDELAY1

AJMPINT_1

ADD1:

INCR2

ACALLDELAY1

AJMPINT_1

DEC1:

MOVA,R2

JZSETR2

DECR2

ACALLDELAY1

AJMPINT_1

SETR2:

MOVR2,#63H

ACALLDELAY1

AJMPINT_1

BACK1:

RETI

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

REPEAT:

MOVA,R2;使用设定始浔重新计时

MOVR6,A

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向下运行

AJMPCHECK

FULL:

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

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;如果按下了"停止键"执行的程序

AJMPSTART

/*=====正常抢答处理程序=====*/

TRUE1:

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

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

AJMPCOUNT

TRUE2:

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPCOUNT

TRUE3:

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPCOUNT

TRUE4:

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPCOUNT

TRUE5:

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPCOUNT

TRUE6:

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPCOUNT

TRUE7:

MOVA,R2

MOVR6,A

MOVR3,#07H

CLROK

AJMPCOUNT

TRUE8:

MOVA,R2

MOVR6,A

MOVR3,#08H

CLROK

AJMPCOUNT

/*=====犯规抢答程序=====*/

FANGUI:

MOVR0,#00H

MOVTH1,#3CH

MOVTL1,#0B0H

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

HERE:

MOVA,R0

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

MOVR3,#0AH

MOVR4,#0AH

MOVR5,#0AH;三灯全灭

AJMPCHECK1

FLASH:

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

MOVR0,#00H

MOVR3,34H;取回号数

MOVR5,#0BH

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

AJMPCHECK1

CHECK1:

JNBP3.1,QUIT1

ACALLDISPLAY

AJMPHERE

QUIT1:

CLROK

AJMPSTART;

/*=====显示程序=====*/

DISPLAY:

MOVDPTR,#DAT1

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

MOVP2,#0FFH

ACALLDELAY2

MOVDPTR,#DAT2

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#0fdH

MOVP0,A

MOVP2,#0FFH

ACALLDELAY2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#0fbH

MOVP0,A

MOVP2,#0FFH

ACALLDELAY2

RET

DAT1:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH

;"灭","1","2","3","4","5","6","7","8","9","灭","F"

DAT2:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0H,0FFH

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

DELAY1:

MOV35H,#08H

LOOP0:

ACALLDISPLAY

DJNZ35H,LOOP0

RET

/*=====延时去抖动用到)====*/

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

RET;

/*=====延时显示用到)=====*/

DELAY2:

MOV32H,#43H

LOOP3:

MOV33H,#1EH

MOVA,R7;

JNZKEY;没读到有效数据时继续转到KEY

LOOP2:

DJNZ33H,LOOP2

DJNZ32H,LOOP3

RET

/*=====读抢答按键数据口程序=====*/

KEY:

MOVA,P1

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

KEY1:

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

AJMPLOOP2

KEY2:

DECR7

AJMPKEY1

RET;

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

OUT:

RETI

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

T1INT:

MOVTH1,#3CH

MOVTL1,#0B0H

INCR0

RETI

END

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

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2