基于80C51单片机的八路抢答器设计.docx

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

基于80C51单片机的八路抢答器设计.docx

《基于80C51单片机的八路抢答器设计.docx》由会员分享,可在线阅读,更多相关《基于80C51单片机的八路抢答器设计.docx(23页珍藏版)》请在冰点文库上搜索。

基于80C51单片机的八路抢答器设计.docx

基于80C51单片机的八路抢答器设计

专业论文

题目:

基于80C51单片机的八路抢答器设计

 

摘要:

八路智力抢答器是一个可供八个参赛组进行智力竞赛的电路装置,该装置主要是由单片机最小系统、控制电路(八个选手抢答按钮;三个主持人控制按钮;四个修改按钮)、数码显示电路与蜂鸣器电路组成的。

单片机(MCU)是目前在电气控制技术中广泛应用的重要元件。

它具有体积小,稳定性高,应用范围广,控制能力强,升级改造容易等诸多优点。

本论文介绍采用ATMEL公司AT89S52单片机设计八路智能抢答器。

软件采用汇编语言编程,汇编语言属于计算机领域的低级语言,具有简明易懂,执行效率高等的优点。

智能八路抢答器具有抢答时间与答题时间调整,抢答错误报警提示等功能,可以广泛应用于各类知识竞赛。

关键词:

抢答器;单片机;硬件系统;软件编程

 

基于80C51单片机的八路抢答器设计

一、系统概述与原理方框图

在文中,我对八路抢答器的总体设计及其主要的功能特点进行简单的分析,并给出它的特点,实现的功能以及系统的简单操作,以对单片机及其控制系统的了解。

(一)单片机技术发展的概述与系统问题的提出

目前,单片机正朝着高性能和多品种方向发展,单片机的发展正朝着CMOS化,低功耗,小体积,大容量,高性能,低价格和外围电路的内装化等几个方面

发展。

近几年,由于某种原因CHMOS技术的进步,大大地促进了单片机的CMOS化,此种芯片除了低功耗外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态,特别是IIC,API等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。

我们设计出的8路抢答器是一种基于MCS-51单片机的硬件和软件设计及实现方法,这种电路设计具有按键有效提示,输入错误提示,控制报警电路,在线修改功能等多种功能,保密性强,灵活性高,特别适用于家庭!

办公室!

学生宿舍及宾馆等场所。

它具有全集成化,智能化,高精度,高性能,高可靠性和低价格等优点,是一个值得推广的一种方法。

接下来我们就对方案与设计原理方框图进行比较分析。

(二)设计思路与系统组成及主要特点

为了使设计更具有针对性,使用性更强,我对其进行精心的设计,在设计过程中,我们想到了很多的设计方案。

1.设计思路

设计一个八路抢答器,可同时供8名选手或者8个代表队参加比赛,他们的编号分别为1——8,各用一个抢答器按钮,按钮的编号与选手的编号相对应,分别设为S1…S8。

节目主持人设置一组控制开关,用来控制系统的清零和抢答器的开始,修改抢答时间与答题时间,如果想调节抢答时间或答题时间,按"抢答时间调节"键或"答题时间调节"键进入调节状态。

并且抢答器具有数据锁存和显示的功能,抢答开始,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答,优先抢答选手的编号一直保持到主持人将系统清零为止。

2.系统的主要特点有:

1)该产品的互换性好,响应速度快,抗干扰能力强,外围电路简单易懂,因此相对来说体积小。

2)该系统能用软件的方式设计硬件,所以用软件方式设计的系统向硬件系统的转换是由有关开发软件自动完成的,易操作。

3)具有具体数字显示的功能。

4)可以从以前的组合设计转向真正的自由设计,所以设计的移植性好,效率高。

可适合大规模的现场制作。

5)

利用按钮进行输入,输入简单。

6)具有智能报警的功能,当选定之后就马上锁定,并且发出音乐声音。

大大提高了抢答器的可靠性。

7)因为整个系统可集成在一个芯片上,因此体积小,功耗低,可靠边性更高。

3.系统组成

硬件电路框架如图1.2所示:

硬件部分由单片机控制模块、按键模块、蜂鸣器模块和数码显示模块组成。

图1.2

二、系统硬件电路的设计(元器件选择)

硬件电路应能完成以下功能:

当主持人按下开始键时,参与选手对主持人提出的问题要在最短的时间内作出判断,并按下抢答按键回答。

当第一个人按下按键后,则在显示器上显示此参赛选手号码并进行声音提示,同时电路将其他抢答按键封锁,使其不起作用。

若有人在主持人按下开始键之前按键,应有违规提示。

当选手开始答题时,电路具有倒计时功能,倒计时时间可以设置并显示,倒计时时间到时提醒主持人时间到。

如果在规定时间内没有人抢答则蜂鸣器报警提示。

回答完或超时后,由主持人将所有按键恢复,重新开始下一轮答题。

(一)单片机控制模块

该模块采用AT89C52单片机作为核心控制元件,它对整个抢答器起到控制作用。

当主持人按下开始按键后,选手就可以按下自己的抢答键进行抢答,当主持人没有按下开始键时,选手按下自己的抢答键是无效的。

 

AT89C52

(二)按键输入模块(加口电路的介绍)

该模块主要由两部分组成,一部分是主持人按键起到控制的作用,一部分是选手按键。

其中,主持人按键起到控制的作用,当主持人没有按下开始键时,选手不能抢答。

另外,当选手答题完毕后,主持人要按下复位键,准备进行下一轮的抢答,当在规定的时间内,没有选手抢答时,主持人也要按下复位键,使其进入下一轮的抢答。

按键开关是实现人机对话的最简单地输入设备,通过它能随时发出各种控制指令和数据到单片机。

按键输入模块的基本工作原理:

当有按键被按下时按键所接的单片机端口引脚接地,其引脚电平为0,未按下时引脚电平为1。

所以,判断按键开关是否有信号输入,是通过测量按键所接的引脚电平高低,当检测到按键所接引脚的电平为0时,说明该按键被按下,然后再检测到电平为1时,说明按键按下后又被放开,完成一次信号输入的过程。

单片机复位电路包括片内、片外两部分。

外部复位电路就是为内部复位电路提供两个机器周期以上的高电平而设计的。

通常采用上电自动复位和按键手动复位两种方式。

当运行出错或进入死循环时,可按复位键重新运行。

复位操作可使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。

按键电平复位电路

单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。

硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,应为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位,只能用软复位。

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

(三)外部晶振模块

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

单片机内部有一个高增益的反相放大器,用于构成振荡器,反相放大器的输入端为XTAL1,输出端为XTAL2。

内部振荡方式:

是在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个电容构成稳定的自激振荡电路。

外部振荡方式:

外部振荡方式就是把外部已有的时钟信号引入单片机内。

电容C1和C2通常取30pF,对振荡频率有微调作用。

晶振频率范围是1.2MHz~12MHz。

(四)蜂鸣器模块

该模块主要是起到提醒和报警的作用,当主持人按下开始键时,蜂鸣器响,当有选手犯规时,蜂鸣器也要发出声音,还有就是当倒计时开始时,蜂鸣器就要发出报警的声音。

单片机I/O引脚以软件延时方法产出一定频率的方波输出,控制接在该引脚的三极管导通和截止,从而会使接在三极管上的蜂鸣器发出声响。

其发生模块由三部分组成:

(1)产生方波输出、

(2)确定发生频率、(3)确定维持发生的时间。

蜂鸣器发声时工作在三极管的饱和状态,不发声时工作在三极管的截止状态。

三极管在电路中起到开关与放大作用,即:

发射结正偏,集电结反偏时三极管起放大作用;发射结正偏,集电结正偏时三极管起饱和(开关闭合)作用;发射结反偏集电结反偏时三极管起截止(开关断开)作用。

电路中发射极与集电极上的电阻是限流电阻,起到保护三极管作用。

在这里使用的是无缘蜂鸣器,工作时需要接入音频方波,改变方波频率可以得到不同音调的声音。

(五)数字显示模块(加四位一体数码管的原理)

图2.5.1图2.5.2

图2.5.3

该模块主要显示两部分内容。

一部分是参加选手的编号,另一部分是显示倒计时。

图2.5.1中R2—R8七个330欧姆电阻起到限流作用,可用来控制显示管的亮度,亮度随阻值的增大而增大。

图2.5.2中数码管上的8个引脚依照A、B、C、D、E、F、G、DP与单片机P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7相连接的阳极接口。

BIT1、BIT2、BIT3、BIT4是数码管的片选,对应选择第几个数码管可以亮。

对于图2.5.3中的七段数码管,各段二极管的阴极连接在一起作为公共端,这样可以使驱动电路简单,将阴极连接在一起的称为共阴极数码管,用高电平驱动数码管各段的阳极,其COM端接地。

(六)抢答器电路接线图

三、系统的软件程序设计

(一)抢答器功能介绍

1.如果想调节抢答时间或答题时间,按"抢答时间调节"键或"答题时间调节"键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下"加1s"键,如果想减一秒按一下"-1s"键,时间LED上会显示改变后的时间,调整范围为0s~99s,0s时再减1s会跳到99,99s时再加1s会变到0s。

2.主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。

倒数时间到小于5s会每秒响一下提示音。

3.如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。

4.如果主持人未按"抢答开始"键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下"停止"键为止。

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

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

(二)程序流程

(三)程序设计

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

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

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口不断取反使喇叭发

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

当前位置:首页 > 总结汇报 > 学习总结

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

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