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

上传人:b****8 文档编号:29694147 上传时间:2023-07-26 格式:DOCX 页数:28 大小:264.66KB
下载 相关 举报
基于单片机的六路抢答器的设计.docx_第1页
第1页 / 共28页
基于单片机的六路抢答器的设计.docx_第2页
第2页 / 共28页
基于单片机的六路抢答器的设计.docx_第3页
第3页 / 共28页
基于单片机的六路抢答器的设计.docx_第4页
第4页 / 共28页
基于单片机的六路抢答器的设计.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

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

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

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

基于单片机的六路抢答器的设计

六路抢答器

一、设计任务与要求

设计基本要求:

(1)抢答器同时供6名选手或6个代表队比赛,分别用6个按钮S0~S5表示。

(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。

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

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

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

(4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。

当主持人启动"开始"键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。

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

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

二、方案设计与论证

方案:

该系统采用51系列单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。

由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。

整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。

MCS-51单片机特点如下:

<1>可靠性好:

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

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

<3>控制功能强:

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

其原理框图如下:

 

图2-1抢答器框图

论证:

抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。

于是,我想到了用单片机实现。

单片机体积小价格低,应用方便,稳定可靠。

单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。

由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。

在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。

如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。

在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil进行仿真。

三、硬件电路设计

3、1抢答器的电路框图

    如图1所示为电路框图。

其工作原理为:

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

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

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

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

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

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

如图1所示为电路框图。

其工作原理为:

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

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

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

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

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

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

 

图3-1抢答电路的接口电路

3、2单元电路设计

(1)抢答器电路

参考电路如图3-1所示。

该电路完成两个功能:

一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。

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

(2)时序控制电路设计

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

a.主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。

                    

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

(3)复位电路的设计

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

复位电路如图所示:

 

图3-2复位电路

 

图3-3时钟震荡电路

3、3时钟震荡电路

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

3、5报警电路设计

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

一般喇叭是一种电感性图5报警电路图。

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

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

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

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

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

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

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

如果再次抢答必须由主持人再次作"清除"和"开始"状态开关。

 

图3-4报警电路图

四、软件设计

4、1系统主程序设计

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

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

 

 

图4-1主程序流程图

4、2主程序清单

OKEQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0000H

AJMPMAIN

附录:

程序代码:

P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口。

ORG0000H

AJMPMAIN

ORG0003H

AJMPINT0SUB

ORG000BH

AJMPT0INT

ORG001BH

AJMPT1INT

OKEQU20H;抢答开始标志位

RINGEQU22H;响铃标志位

ORG0040H

MAIN:

MOVR1,#0FH;初设抢答时间为15s

MOVR2,#0AH;初设答题时间为10s

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只程序中判断是否查询抢答

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:

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

倒计时程序(包括有效抢答程序):

COUNT:

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

MOVTH1,#3CH

MOVTL1,#0B0H;重置定时器

RECOUNT:

MOVA,R6;R6保存了倒计时的时间

MOVB,#0AH

DIVAB;除十分出个位/十位

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

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

MOVR5,30H;取十位

MOVR4,31H;取个位

MOVA,R6

CLRC

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

ACALLDISPLAY

JNBP1.0,TRUE1

JNBP1.1,TRUE2

JNBP1.2,TRUE3

JNBP1.3,TRUE4

JNBP1.4,TRUE5

JNBP1.5,TRUE6

JNBP1.6,TRUE7

JNBP1.7,TRUE8

AJMPRECOUNT

QUIT:

CLROK;如果按下了"停止键"重新回到开始

CLRRING

ACALLBARK

AJMPSTART

正常抢答处理程序:

TRUE1:

ACALLBARK;按键发声

MOVA,R2

MOVR6,A;抢答时间R2送R6

MOVR3,#01H

CLROK;

AJMPLOOP2

TRUE2:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#02H

CLROK

AJMPLOOP2

TRUE3:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#03H

CLROK

AJMPLOOP2

TRUE4:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#04H

CLROK

AJMPLOOP2

TRUE5:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#05H

CLROK

AJMPLOOP2

TRUE6:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#06H

CLROK

AJMPLOOP2

TRUE7:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#07H

CLROK

AJMPLOOP2

TRUE8:

ACALLBARK;

MOVA,R2

MOVR6,A

MOVR3,#08H

CLROK

LOOP2:

AJMPDISPLAY;抢答后停止计时,等待返回

SETBRING

JNBP3.1QUIT

AJMPLOOP2

犯规抢答程序:

ERROR:

SETBRING;犯规响铃

MOVR5,#0BH

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

LOOP3:

ACALLDISPLAY

JNBP3.1QUIT1;等待“停止”键按下

AJMPLOOP3

QUIT1:

CLRRING

CLROK

AJMPSTART

显示程序:

DISPLAY:

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

MOVA,R5

MOVCA,@A+DPTR

MOVP2,#01H

MOVP0,A

ACALLDELAY

MOVDPTR,#DAT2

MOVA,R4

MOVCA,@A+DPTR

MOVP2,#02H

MOVP0,A

ACALLDELAY

MOVA,R3

MOVCA,@A+DPTR

MOVP2,#04H

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

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

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

INT0SUB:

MOVA,R1

MOVB,#0AH

DIVAB

MOVR5,A

MOVR4,B

MOVR3,#0AH

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

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

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

JNBP3.4,BACK0;P3.4为确定键,如按下跳到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

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

五、仿真过程与仿真结果

图5-1仿真图

这里仿真用的是PROTUES软件和KEIL软件,仿真图如上图所示。

六、安装与调试

当仿真之后就可以做实际电路图了,在这次实训中是用portal来制作电路板的,在portal中先画好原理图,然后再转印成PCB图形,画好PCB之后就可

图6-1总原理图

以做实际的电路板了。

在portal中画画的原理如图;在画原理图时尽量用网络标号,这样可以减少连线的麻烦,也可以减少错误的发生,若用连线有时会发生这样的情况,就是有时我们虽然把线连到了元器件上,可是我们在连线时分好几段了,线虽然看起来是连在一起的,可是实际上是没有连在一起的,这样会导致在画PCB时,这条线就不会体现出来,我们就会少画一条线,这样的错误时致命的,会直接导致我们制出的板没有用。

所以尽量用网络标号。

画原理图时有的元器件是库中没有的,这就需要我们自己画,画原理图原件是一定要注意我们所画的元器件要和实际的管脚相一致,负责将导致我们制板的失败,在画元器件是还要注意的一点是:

我们标管脚时管脚的标号一定要标在元器件外部,管脚的说明要标在内部,负责软件将无法识别,也无法成功转印为PCB。

在画PCB时要注意先要设置好线的粗细,线太细在腐蚀时很容易被腐蚀掉,线太粗了将使得制出的板很大。

一般线粗选择在35到45mil比较合适。

其次是焊盘的设置,焊盘尽量越大越好,但也不是无限大,太小的焊盘,在我们钻孔时其周围的铜很容易被钻掉,这将导致我们焊元器件时会产生虚焊。

下面是画好的PCB原理图:

 

 

图6-2PCB图

接下来的工作是要很细心的,我们要把PCB图转印到铜板上,转印过程可能会由于墨喷的没有那么均匀会在铜板上出现不连续的间断点,有的是非常细的,我们要是没有认真是很难发现的,因此我们还要做一个非常重要的工作就是用油性笔在墨迹不清楚的地方再补点墨,这工作是非常必要的,对后面有事半功倍的作用。

在腐蚀时也要注意腐蚀的时间,不要腐蚀过度也不要腐蚀不完全,这两种结果都将导致电路调试不成功。

腐蚀完后的焊接也是一个非常精细的活,我们最重要的就是保证我们焊接既不短路也不虚焊。

其中一个错误都会让我们浪费大量的时间去检查电路。

在这次调试中有出先以下几个情况:

一、数码管不会亮,但是单片机等其他芯片有工作。

二、数码管的有些段不会亮,也就是显示数字不完整。

三、有些断码一直亮。

四、蜂鸣器不会响。

这些我在调试时是这样解决的,首先这次我用的是共阴的数码管,当单片机输出为1时就能点亮数码管,单片机能正常工作说明单片机能正常输出1,这说明问题出在数码管上,可能是启动数码管的电流很小,驱动不了数码管,也可能是在还接时把个对应的断码和地短接了,使所有的断码值都是0,经过检查驱动电流没有问题,再用万用电表检查段码线和地发现时由于短接了,经过检查发现时由于在腐蚀电路时由于相邻的线之间有墨喷上去了所以腐蚀时没有腐蚀完,把多余的铜挂掉后能显示了。

但是还有一个段码不能正常显示,其他的段码能正常显示,这种情况能判断是由于这一路出现问题了,但是用万用电表检测也不能检测出有什么问题,这很有可能是由于虚焊引起的,用烙铁把这一路的所有焊点重新焊过一遍后再调试就能正常显示了。

还有一些段码一直亮,这有可能是由于程序的问题,也可能是由于这段和VCC短接了。

后面还有一个问题就是蜂鸣器不会响,这有三种情况:

一是由于三级管放大的电流不够大不能驱动蜂鸣器,这有可能是由于限流电阻取得太大或者是三极管的放大倍数不够,二是由于程序有误,三是由于电路的问题,我的问题是出现在限流电阻取的太大,当换过小一点的电阻之后就能正常发声了。

六、结论与心得

我在这一次抢答器的设计过程中,很是受益匪浅。

通过对自己在大学三年时间里所学的知识的回顾,并充分发挥对所学知识的理解和对毕业设计的思考及书面表达能力,最终完成了。

这为自己今后进一步深化学习,积累了一定宝贵的经验。

撰写论文的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。

培养了我运用所学知识解决实际问题的能力。

通过这次课程设计我发现,只有理论水平提高了;才能够将课本知识与实践相整合,理论知识服务于教学实践,以增强自己的动手能力。

这个实验十分有意义我获得很深刻的经验。

通过这次课程设计,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性,,也从中得知了很多书本上无法得知的知识。

我们的学习不但要立足于书本,以解决理论和实际教学中的实际问题为目的,还要以实践相结合,理论问题即实践课题,解决问题即课程研究,学生自己就是一个专家,通过自己的手来解决问题比用脑子解决问题更加深刻。

学习就应该采取理论与实践结合的方式,理论的问题,也就是实践性的课题。

这种做法既有助于完成理论知识的巩固,又有助于带动实践,解决实际问题,加强我们的动手能力和解决问题的能力。

参考文献

我们将各个部分的程序编好后怎么都连不起来,出不了预期的效果.对于硬件在编程过程中PCB板的接触又是一个头疼的问题,在进行编译的时候,数码显示管上什么都没有,按一下旁边与之相连的元器件时就有显示了,所以也花费了好多时间在PCB板的重新焊接上.对于软件我们在时钟完成后就对其加入了报警系统,可加了之后发现程序乱了,以前的时钟也不可以控制了.经过反

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

当前位置:首页 > 职业教育 > 中职中专

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

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