毕业设计八路抢答器的设计.docx
- 文档编号:3713278
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:18
- 大小:283.11KB
毕业设计八路抢答器的设计.docx
《毕业设计八路抢答器的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计八路抢答器的设计.docx(18页珍藏版)》请在冰豆网上搜索。
毕业设计八路抢答器的设计
重庆三峡学院
毕业设计(论文)
题目八路抢答器的设计
学院
专业
年级
姓名
学号
指导教师职称
完成毕业设计(论文)时间2014年5月
目录
摘要I
绪论1
第一章抢答器的概述2
第二章C51单片机的功能简介3
第三章硬件电路的设计4
1.整体电路图4
2.时钟电路模块4
3.复位电路模块5
4.显示电路6
5.键盘扫描电路6
6.发声电路7
第四章软件设计9
第五章设计总结18
致谢语19
参考文献20
译文21
附:
清晰版整体原理图22
八路抢答器
摘要随着科学技术的发展,我们会在不同的竞赛中看到抢答器的身影!
本文以AT89C51单片机为核心的抢答器!
采用数码管显示,它能根据不同选手抢答的快慢,经过单片机处后
产生不同的信号,最后显示在数码管上。
这个设计是以抢答为前提,充分考虑到实际中的很多问题!
比如有时间限制,有选手在没在规定的时间内就抢答等问题,用单片机的定时器/计数器定时和计数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,扬声器发声提示。
同时系统能够实现:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示,是系统能够正确无误的实现所预期的功能!
【关键词】抢答器C51单片机数码管定时器
绪论
大家都知道,用数字信号完成对数字量进行算术运算和逻辑运算的电路称为数字电路!
随着电子科技的发展,数字电路也越来越复杂化,但是所能实现的功能也愈来愈多!
数字电路不像模拟电路那样易受噪声的干扰,稳定性好;数字电路只需要区分信号的有无,电路元件参数,允许更大的改变(漂移)的范围,高可靠性;数字信息可以利用某种媒介,如磁带、磁盘、光盘等进行长时期的存储,可长期储存;数字信号输出具有直观,准确的优点,最主要的是便于利用计算机处理的信息;由于数字电路中基本单元电路的结构比较简单,而且又允许组件有较大的分散性,这就使我们不仅可把众多的基本单元做在同一块硅片上,同时又能达到大批量生产所需要的良率,便于高度集成化!
数字电路与数字电子技术已经广泛的应用于电视、雷达、通信、电子计算机、自动控制、航天等科学技术领域,与我们的生活联系越来越紧密,这就要求我们理论与实践相结合!
通过这次设计,我们要达到以下目的:
(1)结合书上所学的理论知识,和这次的物品联系起来!
(2)通过不同的途径大量的查阅不同的资料,进一步熟悉电子电路,最重要的就是要培养一种思维方式!
能解决一个问题的方式!
第一章抢答器的概述
1.实现的功能:
(1)可以同时供8名选手比赛,分别用8个按钮S0~S7表示;
(2)具有开始、暂停、复位的作用;
(3)具有锁存与显示的功能;也就是选手按动按钮,会锁存相应的号码,扬声器发出声响提示,并在数码管上显示选手的号码和剩余的时间,抢答会实行优先锁存,优先抢答选手的编号一直保持到主持人按复位按钮;
(4)具有定时抢答的作用;
2.抢答器原理框图:
抢答器原理框图1
如图1所示,其工作原理为:
接通电源后,可以先设定时间,定时器显示设定时间;主持人将开关置“开始”状态,宣布“开始”,抢答器开始工作,定时器倒计时,选手在设定的时间范围内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果想再次抢答必须由主持人再次操作“复位、开始”状态开关。
第二章C51单片机的功能简介
80C51单片机是Philips公司MC51系列单片机的一种8位单片机。
内部含有存储器是它最大的特点,用途十分广泛,特别是在于生产便携式商品,手提式仪器等方面,有着十分广泛的应用。
80C51单片机内部主要有以下部件:
80C51CPU、振荡电路、总线控制部件、中断控制部件、片内ROM、片内RAM、并行I/O接口、定时器和串行I/O接口
80C51单片机内部由CPU、4KB的ROM,256B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3,一个全双工串行I/O接口,5个中断源等组成。
单片微机内部最核心的部分是CPU,会产生各种控制信号是CPU的主要功能,控制存储器、输入/输出端口的数据传输、数据的算术运算、逻辑运算以及位操作处理等,CPU按它的功能可分为运算器和控制器两部分。
控制器由程序计数器PC、指令储存器、指令译码器、实时控制与条件转移逻辑电路等组成。
它的功能是对来自存储器中的指令进行译码,通过实时控制电路,在规定的时刻发出各种操作所需的内部和外部的控制信号,使各部分协调工作,完成指令所规定的操作。
运算器由累加器ACC、算术逻辑器部件ALU、程序状态寄存器PSW,BCD码运算调整电路等构成。
下图2是C51的内部结构图
图2C51内部结构图
第三章硬件电路的设计
1.整体电路图
图3整体电路图
2.时钟电路模块
时钟电路是由一个晶体振荡器12MHZ和两个30pF的瓷片电容组成。
6MHz的晶振,其机器周期是2us。
12MHz的晶振,他的机器周期是1us,也就是说在执行同一条指令时用6MHz的晶振所用的时间是12MHz晶振的两倍。
为了提高整个系统的性能,我选择了12MHz的晶振。
电容器C1、C2起稳定振荡频率和快速起振的作用,电容值我选择了30pF。
内部振荡方式所得的时钟信号稳定性高。
时钟电路的作用是产生单片机工作所需的时钟信号,而时序所研究的是指令执行中各信号之间的相互关系。
单片机自身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地工作。
其电路如图4:
图4时钟电路模块
3.复位电路模块
很多东西在运行时都需要复位,让他的状态处于一个正确的初始状态,并从这个状态开始工作。
电容在上接高电平,电阻在下接地,中间为RST。
这种复位电路为高电平复位。
其工作原理是:
通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。
其电路如图5所示:
图5复位电路
4.显示电路
在这里我们使用的是七段数码管显示,通常在显示上我们采用的方法一般包括两种:
一种是静态显示,一种是动态显示。
其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。
下图6是4位七段数码管显示电路:
图6显示电路
5.键盘扫描电路
键盘是人与各种微机系统打交道的主要设备。
在文献和书籍中也可以找到关于键盘硬件电路的设计方法,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。
我们这里应采用软件去抖方法,即延时重复扫描法,延时法的原理为:
在检测到有按键下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而消除去抖的影响。
图7按键电路
6.发声电路
大家都知道,人类所能听到的声音的频率范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使蜂鸣器发出不同的声音。
图8蜂鸣器电路
第四章软件设计
软件任务分析环节是为软件设计做一个总体规划。
从软件的功能来看可分为两大类:
一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。
这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。
主程序清单:
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只程序中判断是否查询抢答
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
AJMPERROR
FALSE3:
MOVR3,#03H
AJMPERROR
FALSE4:
MOVR3,#04H
AJMPERROR
FALSE5:
MOVR3,#05H
AJMPERROR
FALSE6:
MOVR3,#06H
AJMPERROR
FALSE7:
MOVR3,#07H
AJMPERROR
FALSE8:
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
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
REPEAT:
MOVA,R2;使用锦囊时重新计时
MOVR6,A
CLRRING
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;如按下停止键退出
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;如果按下了"停止键"执行的程序
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,#06H,FLASH;0.3s向下运行->灭并停响
CLRRING
MOVR3,#0AH
MOVR4,#0AH
MOVR5,#0AH;三灯全灭
AJMPCHECK1
FLASH:
CJNEA,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清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
ACALLDELAY2
MOVDPTR,#DAT2
MOVA,R5
MOVCA,@A+DPTR
MOVP2,#0fdH
MOVP0,A
ACALLDELAY2
MOVA,R4
MOVCA,@A+DPTR
MOVP2,#0fbH
MOVP0,A
ACALLDELAY2
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
;=====延时4236个机器周期(去抖动用到)=====
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
RET
;=====延时4236个机器周期(显示用到)=====
DELAY2:
MOV32H,#43H
LOOP3:
MOV33H,#1EH
MOVA,R7;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZAAAA1;没读到有效数据时继续转到AAAA1
LOOP2:
DJNZ33H,LOOP2
DJNZ32H,LOOP3
RET
;=====读抢答按键数据口程序=====
;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口
;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.
;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性
AAAA1:
MOVA,P1
CJNEA,#0FFH,AA1;当不全为1时的数据为有效数据
AA0:
MOV36H,A;将有效数据送到36H暂存
AJMPLOOP2
AA1:
DECR7
AJMPAA0
;=====发声程序=====
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
EN
第五章设计总结
这次研究与设计的八路多功能抢答器采用了常见的电子元器件,使用了80C51单片机外围接口抢答器系统,采用了单片机的定时器/计数器定时计数原理与硬件和软件的有效结合。
通过对有关文献资料的调查和收集,理论与实践相结合,培养了我的自学能力和实践能力。
和以前被动接受知识到现在的主动寻求知识,这可以是一个很大的突破学习方法。
在设计过程中,由于时间限制和有限的能力,所以很多地方难免存在不足之处,硬件设计和软件设计的一些功能还没有被开发出来。
但在今后的工作中,我会严格要求自己,尽量追求完美。
这个设计通过了软件与硬件上的调试、仿真。
我想这在自己以后的学习和工作都会有很大的益处。
在这次设计中遇到了很多实际性的问题,在实际设计的过程中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
由于我没有选修单片机这门课程,所以单片机的知识给我造成了很大的困扰。
对于单片机设计,其硬件电路是相对而言比较简单的,主要是解决程序设计中的问题。
而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。
它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样连接各个子程序才是关键的问题所在,这需要我们对单片机的结构很熟悉。
因此可以说单片机的设计是软件和硬件相
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 八路 抢答 设计