243单片机课程八路抢答器设计 1文档格式.docx

上传人:b****6 文档编号:16524170 上传时间:2022-11-24 格式:DOCX 页数:21 大小:726.23KB
下载 相关 举报
243单片机课程八路抢答器设计 1文档格式.docx_第1页
第1页 / 共21页
243单片机课程八路抢答器设计 1文档格式.docx_第2页
第2页 / 共21页
243单片机课程八路抢答器设计 1文档格式.docx_第3页
第3页 / 共21页
243单片机课程八路抢答器设计 1文档格式.docx_第4页
第4页 / 共21页
243单片机课程八路抢答器设计 1文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

243单片机课程八路抢答器设计 1文档格式.docx

《243单片机课程八路抢答器设计 1文档格式.docx》由会员分享,可在线阅读,更多相关《243单片机课程八路抢答器设计 1文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

243单片机课程八路抢答器设计 1文档格式.docx

1>

可靠性好:

单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。

<

2>

单片机有一般电脑所必须的器件,如三态双向总线,串并行的输入及输出引脚,可扩充为各种规模的微电脑系统。

3>

控制功能强:

单片机指令除了输入输出指令,逻辑判断指令外还有更丰富的条件分支跳跃指令。

方案比较及其选用依据,显然方案二比方案一简单的多,不但从性能上优于方案一,而且在使用上及其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。

另外80C51单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。

而方案一采用了中小规模集成电路,有其复杂的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。

依此依据选择方案二比较适合。

其原理框图如下:

三、硬件电路设计

1、抢答器的电路框图

如图11、1所示为电路框图。

其工作原理为:

接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;

主持人将开关置,“开始”状态,宣布“开始”抢答器工作。

定时器倒计时,扬声器给出声响提示。

选手在定时时间内抢答时,抢答器完成:

优先判断、编号锁存、编号显示、扬声器提示。

当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。

如果再次抢答必须由主持人再次操作"

开始、停止"

状态开关。

图11.1抢答器框图

图11.2抢答电路的接口电路

如图11、1所示为电路框图。

如果再次抢答必须由主持人再次操作“开始、停止”状态开关。

2、单元电路设计

(1)抢答器电路

参考电路如图11.2所示。

该电路完成两个功能:

一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;

二是禁止其他选手按键操作无效。

如有再次抢答需由主持人将S开关重新置,“清除”然后再进行下一

次抢答。

(2)时序控制电路设计

时序控制电路是抢答器设计的关键,它要完成以下功能:

a.主持人将控制开关拨到"

位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。

                    

b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。

(3)复位电路的设计

外部中断和内部中断并存,单片机硬件复位端,只要持续4个机器周期的高电平即可实现复位,硬件复位后的各状态可知寄存器以及存储器的值都恢复到了初始值,因为本设计中功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软件复位,软件复位实际上就是当程序执行完之后,将程序通过一条跳转指令让它完成复位。

复位电路如下图示:

2.3.3外部震荡电路

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

2.3.4报警电路设计

报警电路用于报警,当遇到报警信号时,发出警报。

一般喇叭是一种电感性

图11.4报警电路图。

8951驱动喇叭的信号为各种频率的脉冲。

因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。

在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。

不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。

选手在设定的时间内抢答时,实现:

如果再次抢答必须由主持人再次*作"

清除"

和"

图面是数字抢答器的报警电路图。

其中555构成多谐振荡器,振荡频率fo=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。

PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。

四、软件设计

1、系统主程序设计

为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人发布抢答命令按下P1.7按键,程序开始打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序。

当在扫描到有人按下了答题键,马上关闭T0、调用显示程序、封锁键盘。

(1)主程序流程图

2、主程序清单

OKEQU20H;

抢答开始标志位

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;

ddddddd

ACALLDELAY

去抖动,如果"

开始键"

按下就向下执行,否者跳到非法抢答查询

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

FALSE3:

MOVR3,#03H

FALSE4:

MOVR3,#04H

FALSE5:

MOVR3,#05H

FALSE6:

MOVR3,#06H

FALSE7:

MOVR3,#07H

FALSE8:

MOVR3,#08H

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

INT0SUB:

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

先在两个时间LED上显示R1

JNBP3.4,INC0;

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

JNBP3.5,DEC0;

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

JNBP3.1,BACK0;

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

INC0:

MOVA,R1

CJNEA,#63H,ADD0;

如果不是99,R2加1,如果加到99,R1就置0,重新加起。

MOVR1,#00H

ACALLDELAY1

ADD0:

INCR1

DEC0:

JZSETR1;

如果R1为0,R1就置99,

DECR1

SETR1:

MOVR1,#63H

BACK0:

RETI

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

INT1SUB:

MOVA,R2

ACALLDISPLAY

JNBP3.4,INC1

JNBP3.5,DEC1

JNBP3.1,BACK1

INC1:

MOVA,R2

CJNEA,#63H,ADD1

MOVR2,#00H

ADD1:

INCR2

DEC1:

JZSETR2

DECR2

SETR2:

MOVR2,#63H

BACK1:

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

REPEAT:

MOVA,R2;

使用锦囊时重新计时

MOVR6,A

COUNT:

MOVR0,#00H;

重置定时器中断次数

重置定时器

RECOUNT:

MOVA,R6;

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

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,重新计

SETBRING

JZQUIT;

计时完毕

MOVR0,#00H

DECR6;

一秒标志减1

LARGER:

MOVA,R0

CJNEA,#14H,CHECK;

如果1s向下运行,否者跳到查"

停/显示"

计时一秒R6自动减1

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

TZ1:

JMPTRUE7

TZ2:

JMPTRUE8

QUIT:

CLROK;

如果按下了"

停止键"

执行的程序

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

TRUE1:

ACALLBARK

抢答时间R2送R6

MOVR3,#01H

CLROK;

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

AJMPCOUNT

TRUE2:

ACALLBARK

MOVR3,#02H

TRUE3:

MOVR3,#03H

TRUE4:

MOVR3,#04H

TRUE5:

MOVR3,#05H

TRUE6:

MOVR3,#06H

TRUE7:

MOVR3,#07H

TRUE8:

MOVR3,#08H

=====犯规抢答程序=====

ERROR:

MOVR0,#00H

MOVTL1,#0B0H

MOV34H,R3;

犯规号数暂存与(34H)

HERE:

CJNEA,#06H,FLASH;

0.3s向下运行->

灭并停响

MOVR4,#0AH

MOVR5,#0AH;

三灯全灭

AJMPCHECK1

FLASH:

CJNEA,#0CH,CHECK1;

下面是0.8s的情况,响并显示号数并清R0,重新计

MOVR3,34H;

取回号数

MOVR5,#0BH

MOVR4,#0BH;

显示FF和号数

CHECK1:

JNBP3.1,QUIT1

AJMPHERE

QUIT1:

CLRRING

=====显示程序=====

DISPLAY:

MOVDPTR,#DAT1;

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

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#0feH

MOVP0,A

ACALLDELAY2

MOVDPTR,#DAT2

MOVA,R5

MOVP2,#0fdH

MOVA,R4

MOVP2,#0fbH

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:

DJNZ35H,LOOP0

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

DELAY:

MOV32H,#12H

LOOP:

MOV33H,#0AFH

LOOP1:

DJNZ33H,LOOP1

DJNZ32H,LOOP

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

DELAY2:

MOV32H,#43H

LOOP3:

MOV33H,#1EH

MOVA,R7;

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

JNZAAAA1;

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

LOOP2:

DJNZ33H,LOOP2

DJNZ32H,LOOP3

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

由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口

然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.

故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性

AAAA1:

MOVA,P1

CJNEA,#0FFH,AA1;

当不全为1时的数据为有效数据

AA0:

MOV36H,A;

将有效数据送到36H暂存

AJMPLOOP2

AA1:

DECR7

AJMPAA0

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

BARK:

SETBRING

CLRRING;

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

T0INT:

MOVTH0,#0ECH

MOVTL0,#0FFH

JNBRING,OUT;

CPLP3.6;

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

OUT:

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

T1INT:

MOVTH1,#3CH

INCR0

RETI

END

五、仿真过程与仿真结果

1、用到了keil软件仿真,界面如下:

2、Proteus仿真

做好的Proteus仿真图如下:

抢答30秒倒计时显示:

选手按答题键号在答题时候60秒倒计时:

用DXP连接原理图如下:

用DXP连接PCB图如下:

通过仿真可知,仿真结果完全符合设计要求。

六、安装与调试

制作PCB电路板流程:

打印PCB——裁剪覆铜板——预处理覆铜板(打磨)——转印PCB——腐蚀电路板——电路板钻孔——电路板预处理(打磨、清洗、涂松香)——焊接电子元件。

表1器件选型方案的详细清单

器件名称

规格型号

数量

微处理器

AT89C51

1

极性电容

10uF

电阻

3WTT10K

9

电容

20PF

3

晶振

12MHZ

按钮

15

共阴4位7段数码管

SMGSM410561K

扬声器

调试:

(1)开机

按电源开关,显示屏左边的"

抢答"

指示灯亮,数码管显示。

(2)设定"

倒计时时间

(3)设定"

答题"

(4)测试各组抢答按键

  试按一下各组的抢答按钮,应立即显示该组的组别数字,同时机内喇叭发出"

叮咚"

的提示音,按"

取消"

键,返回"

0"

闪烁状态。

(5)启动抢答倒计时,开始抢答

  "

FFF"

状态下,当主持人宣布抢答开始时,马上按一下"

键,屏幕显示所设定的抢答倒计时时间并开始倒计时,提示倒计时时间马上临近结束。

倒计时到0以后,仪器发出"

的结束提示音,同时显示屏返回"

待命状态。

在"

倒计时中,如果有参赛组抢答,仪器屏幕立即显示该组的组别号,同时发出"

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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