基于51单片机的抢答器.docx
《基于51单片机的抢答器.docx》由会员分享,可在线阅读,更多相关《基于51单片机的抢答器.docx(35页珍藏版)》请在冰豆网上搜索。
基于51单片机的抢答器
西安邮电学院
毕业设计(论文)
题目:
基于51单片机的抢答器设计
院(系):
专业:
班级:
学生姓名:
导师姓名:
职称:
第一章抢答器的概述
1.1系统设计的功能
1.2抢答器需求分析
1.3抢答器的工作原理
第二章单片机的功能简介
2.189系列单片机的概述
2.2AT89S51的功能
2.2.1TA89S51特殊功能寄存器
2.2.2AT89S51单片机的内部结构
第三节硬件电路的设计
3.1总电路原理
3.2时钟频率电路的设计
3.3复位电路的设计
3.3.1复位电路的可靠性设计
3.3.2人工复位
3.4显示电路的设计
3.5控制电路的实现
3.6发声
3.7系统复位
第四章软件设计
4.1软件任务分析
4.2显示子程序的设计
4.3定时器T0、T1中断服务程序的设计
4.4抢答器处理程序的设计
4.5主程序及分析
第五章元器件及焊接调试
第六章设计小结
致谢
参考文献
摘 要
随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。
目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。
因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。
现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以AT89S51单片机为核心的八路抢答器。
我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。
本设计是以八路抢答为基本理念。
考虑到依需设定限时回答的功能,利用89S51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,扬声器发生提示。
同时系统能够实现:
在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
第一章抢答器的概述
1.1系统设计的功能
1.基本功能:
(1)同时供8名选手比赛,分别用8个按钮S0~S7表示。
(2)设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手号码。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
2.扩展功能:
(1)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
当主持人启动"开始"键后,定时器进行减计时。
(2)参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
在这段(3)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
1.2抢答器的需求分析
1、在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效。
2、抢答限定时间和回答问题的时间可是在1~99s设定。
3、可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示。
4、抢答时间和回答问题时间倒记时显示,时间完后系统自动复位。
5、按键锁定,在有效状态下,按键无效非法。
1.3抢答的工作过程
图2-4抢答器电路
表2-174LS148的功能真值表
1、如果想调节抢答时间或答题时间,按"加一"键或"减一"键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下"加1s"键,如果想减一秒按一下"减1s"键,时间LED上会显示改变后的时间,调整范围为0~99s,0s时再减1s会跳到99,99s时再加1s会变到0s。
2、主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设20s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设20s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。
3、如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。
4、如果主持人未按"抢答开始"键,而有人按了抢答按键,犯规抢答,LED上不显示任何结果,直到按下"停止"键为止。
1.4抢答器的工作原理及流程
抢答器的基本工作原理:
在抢答竞赛或呼叫时[2],有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。
在整个抢答器工作过程中,显示电路、语音电路等还要根据现场的实际情况向外电路输出相应信号。
抢答器的工作流程分为、系统复位、正常流程、违例流程等几部分,如图2-2所示,下面分别予以介绍。
第二章单片机的功能简介
2.189系列单片机的概况
MCS-51单片机是美国INTE公司于1980年推出的产品,典型产品有8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在,MCS-51内核系列兼容的单片机仍是应用
的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。
有些文献甚至也将8051泛指MCS-51系列单片机,8051是早期的最典型的代表作,由于MCS-51单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51内核实际上已经成为一个8位单片机的标准。
其他的公司的51单片机产品都是和MCS-51内核兼容的产品而以。
同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51,PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51指的是ATMEL公司的AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取带了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。
不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。
89S51就是在这样的背景下取代89C51的,现在,89S51目前已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel目前公司已经停产AT89C51,将用AT89S51代替。
89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。
89SXX可以像下兼容89CXX等51系列芯片。
市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。
如果市场需要,Atmel当然也可以再恢复生产AT89C51。
AT89S51/LS51单片机是低功耗的、具有4KB在线课编程Flash存储器的单片机。
它与通用80C51系列单片机的指令系统和引脚兼容。
片内的Flash可允许在线重新编程,也可使用非易失性存储器编程。
他将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能性价比的微控制器。
2.2AT89S51的功能
2.2.1AT89S51特殊功能寄存器
特殊功能寄存器也称专用寄存器,是具有特殊功能的所有寄存器的集合,简称SFR(SpecialFunctionRegister)。
特殊功能寄存器共含有22个不同寄存器。
它们的地址分配在80H~FFH中,即在RAM地址中。
这些寄存器的名称和地址见表2-2。
表2-1器件选型方案的详细清单
虽然特殊功能寄存器地址在80H~FFH之中,但在80H~FFH的地址单元中,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的,如果对这些单元进行操作,得到的是一些随机数,而写入则无效。
所以,用户编程时不应该将数据写入这些未确定的地址单元,它们是公司留待将来开发新产品时使用的
表2-2AT89S51特殊功能寄存器列表
符 号
地 址
注 释
*ACC
E0H
累加器
*B
F0H
乘法寄存器
*PSW
D0H
程序状态字
SP
81H
堆栈指针
DPL
82H
数据存储器指针低8位
DPH
83H
数据存储器指针高8位
*IE
A8H
中断允许控制器
*IP
D8H
中断优先控制器
*P0
80H
端口0
*P1
90H
端口1
*P2
A0H
端口2
*P3
B0H
端口3
PCON
87H
电源控制及波特率选择
*SCON
98H
串行口控制器
SBUF
99H
串行数据缓冲器
*TCON
88H
定时器控制
TMOD
89H
定时器方式选择
TL0
8AH
定时器0低8位
TL1
8BH
定时器1低8位
TH0
8CH
定时器0低8位
TH1
8DH
定时器1高8位
注:
带*号的特殊功能寄存器都是可以位寻址的寄存器
2.2.2AT89S51单片机的内部结构
AT89S51单片机内部由CPU、4KB的FPEROM,128B的RAM,两个16位的定时/计数器T0和T1,4个8位的I/O端P0、P1、P2、P3等组成。
单片微机内部最核心的部分是CPU。
CPU主要功能是产生各种控制信号,控制存储器、输入/输出端口的数据传输、数据的算术运算、逻辑运算以及位操作处理等,CPU按其功能可分为运算器和控制器两部分。
控制器由程序计数器PC、指令储存器、指令译码器、实时控制与条件转移逻辑电路等组成。
它的功能是对来自存储器中的指令进行译码,通过实时控制电路,在规定的时刻发出各种操作所需的内部和外部的控制信号,使各部分协调工作,完成指令所规定的操作。
运算器由算术逻辑器部件ALU、累加器ACC、暂存器、程序状态字寄存器PSW,BCD码运算调整电路等组成。
图2-3AT89S51单片机的内部结构图
为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻辑电路的功能[3]。
其内部结构如图2-3所示。
第三章硬件电路的设计
3.1总电路原理
为使硬件电路设计尽可能合理,应注意以下几方面:
(1)尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的的价格不断下降,并不一定比若干普通芯片价格的总和高。
(2)留有设计余地。
在设计硬件电路时,要考虑到将来修改扩展的方便。
因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。
(3)程序空间,选用片内程序空间足够大的单片机,本设计采用AT89C51单片机。
(4)RAM空间,AT89S51内部RAM不多,当要增强软件数据处理功能时,往往觉得不足。
如果系统配置了外部RAM,则建议多留一些空间。
如选用8155作I/O接口,就可以增强256字节RAM.如果有大批数据需要处理,则应配置足够的RAM,如6264,62256等。
随着软件设计水平的提高,往往只要改变或增加软件中的数据处理算法,就可以使系统功能提高很多,而系统的硬件不必做任何更换就使系统升级换代。
只要在硬件电路设计初期考虑到这一点,就应该为系统将来升级留足够的RAM空间,哪怕多设计一个RAM的插座,暂不插芯片也好。
(5)I/O端口:
在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。
如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。
如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。
P2.4为开始抢答[9],P2.5为加分,P2.6为减分,P1.0-P1.7为六八抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器输出为P2.7口。
3.2时钟频率电路的设计
时钟电路是计算机的心脏,它控制着计算机的工作节奏。
MCS-51单片机允许的时钟频率是因型号而异的。
晶振的选择:
6MHz的晶振,其机器周期是2us。
12MHz的晶振,其机器周期是1us,也就是说在执行同一条指令时用6MHz的晶振所用的时间是12MHz晶振的两倍。
为了提高整个系统的性能我选择了12MHz的晶振。
振荡方式的选择:
内部振荡方式,MCS-51内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。
这样就构成了内部振荡方式
外部振荡方式是把已有的时钟信号引入单片机内。
这种方式适合用来使单片机的时钟与外部信号一致。
在我的这个设计中没有也无需与外部时钟信号一致,所以我选择了内部振荡方式,由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
晶振我选择了12MHz,相对于6MHz的晶振,整个系统的运行速度更快了。
电容器C1、C2起稳定振荡频率、快速起振的作用,电容值我选择了30pF。
内部振荡方式所得的时钟信号稳定性高。
图3-2时钟电路的设计
单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc表示。
如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs。
3.3复位电路的设计
3.3.1复位电路的可靠性设计
计算机在启动运行是都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。
MCS-51的复位输入引脚RST为MCS-51提供了初始化的手段,可以使程序从指定处开始执行,在MCS-51的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作。
只要RST保持高电平,则MCS-51循环复位。
只有当RST由高电平变低电平以后,MCS-51才从0000H地址开始执行程序。
本系统采用按键复位方式的复位电路。
MCS-51单片机有一个复位引脚RST,它是施密特触发输入,当振荡器起振后,该引脚上出现2个机器周期(即24个时钟周期)以上的高电平。
使器件复位,只要RST保持高电平,MCS-51保持复位状态。
此时ALE、/PSEN、P0、P1、P2、P3口都输出高电平。
RST变为低电平后,退出复位,CPU从初始状态开始工作。
复位以后内部寄存器的初始状态为(SP=07,P0、P1、P2、P3为0FFH外,其它寄存器都为0。
在RST复位端接一个电容至VccHE一个电阻至Vss,就能实现上电自动复位,对于CMOS单片机只要接一个电容至Vcc即可。
如图,在加电瞬间,电容通过电阻充电,就在RST端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效地复位。
RST端在加电时应保持的高电平时间包括Vcc的上升时间和振荡器起振时间,Vcc上升时间若为10ms,振荡器起振时间和频率有关。
10MHz时间约为1ms,1MHz时约为10ms,所以一般为了可靠地复位,RST在上电时应保持20ms以上的高电平。
图2.5中,RC时间常数越大,上电时RST端保持高电平的时间越长。
当振荡频率为12MHZ时,典型值为C=10uF,R=8.2kΩ.
图3-3上电复位电路
3.3.2人工复位
除上电自动复位以外,常常需要人工复位,将一个按钮开关并联于上电自动复位电路,按一下开关就RST端出现一段时间的高电平,即使器件复位。
如图所示
图3-4上电和开关复位
而我们在这次的毕业设计中运用的人工复位电路.其中电平复位是通过RST端经电阻和电源Vcc接通而实现的,按键手动电平复位电路如图。
当时钟频率选用12MHz时,C选取10uF,R选择1000欧。
3.4显示电路的设计
显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。
3.4.1显示模块在系统硬件中的安排
操作者主要设计从显示设备上获取微机系统的信息的,因此,操作者每操作一下,显示设备商都应该有一定的反应。
这说明,显示模块与操作有关,即监控程序是需要调用显示模块。
不同的操作需要显示不同的内容,这又说明各执行模块对显示模块的驱动方式是不同的。
另一方面,在操作者没有进行操作时,显示内容也是变化的,如显示现场各物理量的变化情况。
这时显示模块不是由操作者通过命令键来驱动,而是由各类自动执行的功能模块来驱动。
自动执行的各类模块在安排在各种中断子程序中,这就是说,各种中断子程序也要调用显示模块。
如果监控安排在中断子程序中,两者的要求就统一了,问题比较好解决,如果监控程序安排在主程序中,在监控程序调用显示模块的过程中发生了中断,中断子程序也调用显示模块,这时就容易出问题。
一种比较妥善的办法是只让一处调用显示模块,其他各处均不得直接调用显示模块,但有权申请显示。
这就要设置一个显示申请标志,当某模块需要显示时,将申请标志置位,同时设定有关显示内容(或指针)。
由于一处调用显示模块,故不会发生冲突。
为了使显示模块能及时反应系统需要,应将显示模块安排在一个重复执行的循环(如监控循环或时钟中断子程序)中。
当监控程序(键盘解释程序)安排在时钟中断子程序中时,处理比较方便,只要在监控程序的汇合处调用显示模块就可以了。
这里将显示功能集中到一起,作为一个功能模块,就要求它的功能全面,能根据系统软件提供的信息自动完成显示内容的查找,变换和输出驱动。
这样设计使得各功能模块都不必考虑显示问题,只要给出一个简单的信息(如显示格式编码)甚至不用再提供额外信息,直接利用当前状态变量和软件标志就可以完成所需的显示要求。
如果编写这样一个集中显示模块有困难,也可以将显示模块编小一些,只完成显示缓冲区的内容输出到显示器件上的工作。
这时各功能模块在提出显示申请时,还需要将显示内容按需要的格式送入显示缓冲区中。
这样分而治之比较容易编程,但要小心出现显示混乱。
例如后台程序需要调用显示,将有关信息送入到现实缓冲区进行显示;中断返回后,后台程序继续送完后半部分显示内容,但前半部分内容已经变了,这样就出现了显示错误。
解决的办法是,在申请显示前,先检查是否已经有显示申请,如果有,就不再申请,等待下次机会;如果没有,则先申请标志位,再将显示内容送入显示缓冲区。
这时就不必担心其他前台模块来打扰了,就可以得到一次完整的显示机会。
在这里我们使用的是七段数码管显示,通常在显示[6]上我们采用的方法一般包括两种:
一种是静态显示,一种是动态显示。
其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。
在本设计中根据实际情况采用的是动态显示方法。
并通过查表法,将其在数码管上显示出来,其中P0口为字型码输入端,P2口低3位为字选段输入端。
在这里我们通过查表将字型码送给7段数码管显示的数字,数码管显示原理如下:
MOVA,R5
MOVCA,@A+DPTR;查字型码
MOVP2,#01H;送位选码
MOVP0,A;送字型码
ACALLDELAY;调延时,去闪烁
在七段数码管显示中可分为共阳极和共阴极两种类型极。
以共阴为例,要想a段亮,向a段送1就是,返之送0,共阳刚好相反。
3.5扫描电路的实现
键盘是人与微机系统打交道的主要设备。
关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。
站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。
在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。
它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。
其次就是消除在按键过程中产生的“毛刺”
现象。
这里采用最常用的方法,即延时重复扫描法,延时法的原理为:
因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
3.5.1按钮输入的硬件处理
按钮的触点在闭合和断开时均会产生抖动,这是触点的逻辑电平是不稳定的,如不妥善处理,将会引起按键命令的错误执行或重复执行。
现在一般均用软件延时的方法来避开抖动阶段,这一延时过程一般大于5ms,例如取10-20ms。
如果监控程序中的读键操作安排在主程序(后台程序)或键盘中断(外部中断)子程序中,则该延时子程序便可直接插入读键过程中。
如果读键过程安排在定时中断子程序中,就可省去专门的延时子程序,利用两次定时中断的时间间隔来完成抖动处理。
3.6发声
我们知道,声音的频谱范围约在几十到几千赫兹[7],若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。
3.7系统复位
使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。
从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。
硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。
上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。
硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。
但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。
软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。
对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。
而