为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于单片机的毕业论基于51单片机的抢答器设计文

2011-05-26 42页 doc 359KB 283阅读

用户头像

is_413405

暂无简介

举报
基于单片机的毕业论基于51单片机的抢答器设计文目 录 西安邮电学院 毕 业 设 计(论 文) 题 目: 基于51单片机的抢答器设计 院 (系): 专 业: 班 级: 学生姓名:   导师姓名: 职称: 目 录 第一章 抢答器的概述 1.1 系统设计的功能 1.2 抢答器需求分析 1.3 抢答器的工作原理 第二章 单片机的功能简介 2.1 89系列单片机的概述 2.2 AT89S51的功能 2.2.1 TA89S51特殊功能寄存器 2.2.2 AT89S51单片机的内部结构 第三节 硬件电路的设计 3.1​ 总电路原理 3.2​ 时钟频率电路的设计 3.3​ 复位电路的设...
基于单片机的毕业论基于51单片机的抢答器设计文
目 录 西安邮电学院 毕 业 设 计(论 文) 题 目: 基于51单片机的抢答器设计 院 (系): 专 业: 班 级: 学生姓名:   导师姓名: 职称: 目 录 第一章 抢答器的概述 1.1 系统设计的功能 1.2 抢答器需求 1.3 抢答器的工作原理 第二章 单片机的功能简介 2.1 89系列单片机的概述 2.2 AT89S51的功能 2.2.1 TA89S51特殊功能寄存器 2.2.2 AT89S51单片机的内部结构 第三节 硬件电路的设计 3.1​ 总电路原理 3.2​ 时钟频率电路的设计 3.3​ 复位电路的设计 3.3.1​ 复位电路的可靠性设计 3.3.2​ 人工复位 3.4​ 显示电路的设计 3.5​ 控制电路的实现 3.6​ 发声 3.7​ 系统复位 第4章​  软件设计 4.1​ 软件任务分析 4.2​ 显示子程序的设计 4.3​ 定时器T0、T1中断服务程序的设计 4.4​ 抢答器处理程序的设计 4.5​ 主程序及分析 第5章​  元器件及焊接调试 第6章​  设计小结 致谢 参考文献 摘  要 随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以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-1 74LS148的功能真值表 1、如果想调节抢答时间或答题时间,按"加一"键或"减一"键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下"加1s"键,如果想减一秒按一下"减1s"键,时间LED上会显示改变后的时间,调整范围为0~99s, 0s时再减1s会跳到99,99s时再加1s会变到0s。 2、主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设20s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设20s抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。 3、如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。 4、如果主持人未按"抢答开始"键,而有人按了抢答按键,犯规抢答,LED上不显示任何结果,直到按下"停止" 键为止。 1.4 抢答器的工作原理及 抢答器的基本工作原理:在抢答竞赛或呼叫时[2],有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。在整个抢答器工作过程中,显示电路、语音电路等还要根据现场的实际情况向外电路输出相应信号。抢答器的工作流程分为、系统复位、正常流程、违例流程等几部分,如图2-2所示,下面分别予以介绍。 第2章​ 单片机的功能简介 2.1​ 89系列单片机的概况 MCS-51 单片机是美国INTE 公司于1980 年推出的产品,典型产品有 80 31(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51 的5 倍,实际使用方面已经被市场淘汰)和8751 等通用产品,一直到现在, MCS-5 1 内核系列兼容的单片机仍是应用 的主流产品(比如目前流行的89S51、已经停产的89C51 等),各高校及专业学校的培训教材仍与MCS-51 单片机作为代表进行理论基础学习。有些文献甚至也将8051 泛指MCS-51 系列单片机,8051 是早期的最典型的代表作,由于MCS-51 单片机影响极深远,许多公司都推出了兼容系列单片机,就是说MCS-51 内核实际上已经成为一个8 位单片机的。其他的公司的51 单片机产品都是和MCS-51 内核兼容的产品而以。同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL 的89C51(已经停产)、89S51, PHILIPS(菲利浦),和WINBOND(华邦)等,我们常说的已经停产的89C51 指的是ATMEL公司的 AT 89C51 单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由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.2​ AT89S51的功能 2.2.1​ AT89S51特殊功能寄存器 特殊功能寄存器也称专用寄存器,是具有特殊功能的所有寄存器的集合,简称SFR(Special Function Register)。特殊功能寄存器共含有22个不同寄存器。它们的地址分配在80H~FFH中,即在RAM地址中。这些寄存器的名称和地址见表2-2。 表2-1器件选型的详细清单 虽然特殊功能寄存器地址在80H~FFH之中,但在80H~FFH的地址单元中,不是所有的单元都被特殊功能寄存器占用,未被占用的单元,其内容是不确定的,如果对这些单元进行操作,得到的是一些随机数,而写入则无效。所以,用户编程时不应该将数据写入这些未确定的地址单元,它们是公司留待将来开发新产品时使用的 表2-2 AT89S51特殊功能寄存器列表 符 号 地 址 注 释 *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.2 AT89S51单片机的内部结构 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-3 AT89S51单片机的内部结构图 为了提高数据处理和位操作功能,片内增加了一个通用寄存器B和一些专用寄存器,还增加了位处理逻辑电路的功能[3]。其内部结构如图2-3所示。 第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段数码管显示的数字,数码管显示原理如下: MOV A,R5 MOVC A,@A+DPTR ;查字型码 MOV P2,#01H ;送位选码 MOV P0,A ;送字型码 ACALL DELAY ;调延时,去闪烁 在七段数码管显示中可分为共阳极和共阴极两种类型极。以共阴为例,要想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地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。 在所有的指令中,只有RETI指令能够清除中断激活标志。前文各处提案到的出错处理程序ERR主要完成这一功能,其他的善后工作交由复位后的系统去完成。 有复位时系统的历史状况,可将复位分为“冷启动”和“热启动”。 “冷启动”时,系统的状态全部无效,进行彻底的初始化操作;而“热启动”时,对系统的当前状态进行修复和有选择的初始化。系统初次上电投入运行时,必须是“冷启动”,以后由抗干扰措施引起的复位操作一般均为“热启动”初次上电投入运行时,必须是“冷启动”,以后由抗干扰措施引起的复位操作一般均为“热启动”。为了使系统能正确决定采用何种启动方式,常用上电标志来区分,如图3-6所示。 图3-6 系统复位策略图 第四章 软件设计 4.1 软件任务分析 软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。 软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印[8],输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。 软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难了。 软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系 统和外部中断(如掉电中断)。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰。 4.2​  显示子程序的设计 显示子程序,及部分注解如下: DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出, MOV A,R3 MOVC A,@A+DPTR MOV P2,#0feH MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R5 MOVC A,@A+DPTR MOV P2,#0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,@A+DPTR MOV P2,#0fbH MOV P0,A ACALL DELAY RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  ;"灭","1","2","3","4","5","6","7","8","9","灭","F" DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H 第一个为零,其他与上相同,因为十位如果为零显示熄灭 4.3​ 定时器T0、T1中断服务程序的设计 =====TO溢出中断(响铃程序)===== T0INT:  MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT; CPL P3.6;RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音 OUT:    RETI   T1溢出中断(计时程序): T1INT:  MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END 4.4​  抢答器处理程序的设计 抢答器处理程序: TRUE1: ACALL BARK;按键发声 MOV A,R2 MOV R6,A;抢答时间R2送R6 MOV R3,#01H CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答 AJMP COUNT TRUE2:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#02H CLR OK AJMP COUNT TRUE3:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#03H CLR OK AJMP COUNT TRUE4:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#04H CLR OK AJMP COUNT TRUE5:  ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#05H CLR OK AJMP COUNT TRUE6:  ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#06H CLR OK AJMP COUNT TRUE7:  ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#07H CLR OK AJMP COUNT TRUE8:  ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#08H CLR OK AJMP COUNT 4.5​  程序及分析 单片机控制8路抢答器程序 OK EQU 20H;抢答开始标志位  RING EQU 22H;响铃标志位  ORG 0000H  AJMP MAIN  ORG 0003H  AJMP INT0SUB  ORG 000BH  AJMP T0INT  ORG 0013H  AJMP INT1SUB  ORG 001BH  AJMP T1INT  ORG 0040H MAIN:   MOV R1,#30;初设抢答时间为30s         MOV R2,#60;初设答题时间为60s         MOV TMOD,#11H;设置未定时器/模式1         MOV TH0,#0F0H         MOV TL0,#0FFH;越高发声频率越高,越尖         MOV TH1,#3CH         MOV TL1,#0B0H;50ms为一次溢出中断         SETB EA         SETB ET0         SETB ET1  SETB EX0  SETB EX1;允许四个中断,T0/T1/INT0/INT1         CLR OK  CLR RING          SETB TR1          SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了 ;=====查询程序===== START:   MOV R5,#0BH          MOV R4,#0BH          MOV R3,#0BH  ACALL DISPLAY;未开始抢答时候显示FFF          JB P3.0,NEXT;ddddddd          ACALL DELAY          JB P3.0,NEXT;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询          ACALL BARK;按键发声          MOV A,R1   MOV R6,A;送R1->R6,因为R1中保存了抢答时间      SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答      MOV R3,#0AH;抢答只显示计时,灭号数         AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面 NEXT:   JNB P1.0,FALSE1     JNB P1.1,FALSE2     JNB P1.2,FALSE3     JNB P1.3,FALSE4     JNB P1.4,FALSE5     JNB P1.5,FALSE6     JNB P1.6,TZ1     JNB P1.7,TZ2     AJMP START   TZ1:JMP FALSE7 TZ2:JMP FALSE8 ;=====非法抢答处理程序===== FALSE1: ACALL BARK;按键发声 MOV R3,#01H     AJMP ERROR FALSE2: ACALL BARK MOV R3,#02H     AJMP ERROR FALSE3: ACALL BARK MOV R3,#03H     AJMP ERROR FALSE4: ACALL BARK MOV R3,#04H     AJMP ERROR FALSE5: ACALL BARK MOV R3,#05H     AJMP ERROR FALSE6: ACALL BARK MOV R3,#06H     AJMP ERROR FALSE7: ACALL BARK MOV R3,#07H     AJMP ERROR FALSE8: ACALL BARK MOV R3,#08H     AJMP ERROR ;=====INT0(抢答时间R1调整程序)===== INT0SUB:MOV A,R1         MOV B,#0AH          DIV AB          MOV R5,A          MOV R4,B          MOV R3,#0AH          ACALL DISPLAY;先在两个时间LED上显示R1          JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCO          JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO          JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO     AJMP INT0SUB INC0:   MOV A,R1 CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。         MOV R1,#00H         ACALL DELAY1 AJMP INT0SUB ADD0:   INC R1         ACALL DELAY1         AJMP INT0SUB DEC0:   MOV A,R1     JZ SETR1;如果R1为0, R1就置99,     DEC R1     ACALL DELAY1     AJMP INT0SUB SETR1:  MOV R1,#63H         ACALL DELAY1         AJMP INT0SUB BACK0:  RETI ;=====INT1(回答时间R2调整程序)===== INT1SUB:MOV A,R2         MOV B,#0AH     DIV AB MOV R5,A     MOV R4,B     MOV R3,#0AH     ACALL DISPLAY     JNB P3.4,INC1     JNB P3.5,DEC1     JNB P3.1,BACK1     AJMP INT1SUB INC1:   MOV A,R2     CJNE A,#63H,ADD1         MOV R2,#00H         ACALL DELAY1 AJMP INT1SUB ADD1:   INC R2         ACALL DELAY1         AJMP INT1SUB DEC1:   MOV A,R2     JZ SETR2     DEC R2     ACALL DELAY1     AJMP INT1SUB SETR2:  MOV R2,#63H         ACALL DELAY1         AJMP INT1SUB BACK1:  RETI ;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)===== COUNT:  MOV R0,#00H;重置定时器中断次数         MOV TH1,#3CH         MOV TL1,#0B0H;重置定时器 RECOUNT:MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6         MOV B,#0AH     DIV AB;除十分出个位/十位     MOV 30H,A;十位存于(30H)     MOV 31H,B;个位存于(31H)     MOV R5,30H;取十位     MOV R4,31H;取个位     MOV A,R6     SUBB A,#07H     JNC LARGER;大于5s跳到LARGER,小于等于5s会提醒     MOV A,R0         CJNE A,#0AH,FULL;1s中0.5s向下运行     CLR RING     AJMP CHECK FULL:   CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计         SETB RING         MOV A,R6     JZ QUIT;计时完毕     MOV R0,#00H     DEC R6;一秒标志减1     AJMP CHECK LARGER: MOV A,R0         CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查"停/显示"     DEC R6;计时一秒R6自动减1     MOV R0,#00H CHECK: JNB P3.1,QUIT;如按下停止键退出        ACALL DISPLAY    JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)    AJMP RECOUNT ACCOUT:JNB P1.0,TRUE1    JNB P1.1,TRUE2    JNB P1.2,TRUE3    JNB P1.3,TRUE4    JNB P1.4,TRUE5    JNB P1.5,TRUE6    JNB P1.6,TZ3    JNB P1.7,TZ4    AJMP RECOUNT  TZ3:JMP TRUE7  TZ4:JMP TRUE8    QUIT:  CLR OK;如果按下了"停止键"执行的程序    CLR RING    AJMP START ;=====正常抢答处理程序===== TRUE1: ACALL BARK;按键发声        MOV A,R2    MOV R6,A;抢答时间R2送R6    MOV R3,#01H    CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答    AJMP COUNT TRUE2:ACALL BARK;       MOV A,R2   MOV R6,A   MOV R3,#02H   CLR OK   AJMP COUNT TRUE3:ACALL BARK;       MOV A,R2   MOV R6,A   MOV R3,#03H   CLR OK   AJMP COUNT TRUE4:ACALL BARK;       MOV A,R2     MOV R6,A     MOV R3,#04H     CLR OK     AJMP COUNT TRUE5:  ACALL BARK;         MOV A,R2     MOV R6,A     MOV R3,#05H     CLR OK     AJMP COUNT TRUE6:  ACALL BARK;         MOV A,R2     MOV R6,A     MOV R3,#06H     CLR OK     AJMP COUNT TRUE7:  ACALL BARK;         MOV A,R2     MOV R6,A     MOV R3,#07H     CLR OK     AJMP COUNT TRUE8:  ACALL BARK;         MOV A,R2     MOV R6,A     MOV R3,#08H     CLR OK     AJMP COUNT ;=====犯规抢答程序===== ERROR:  MOV R0,#00H         MOV TH1,#3CH         MOV TL1,#0B0H         MOV 34H,R3;犯规号数暂存与(34H) HERE:   MOV A,R0        CJNE A,#0AH,FLASH;0.5s向下运行->灭并停响     CLR RING     MOV R3,#0AH     MOV R4,#0AH         MOV R5,#0AH;三灯全灭     AJMP CHECK1 FLASH:  CJNE A,#14H,CHECK1;下面是1s的情况,响并显示号数并清R0,重新计         SETB RING         MOV R0,#00H     MOV R3,34H;取回号数     MOV R5,#0BH         MOV R4,#0BH;显示FF和号数     AJMP CHECK1 CHECK1: JNB P3.1,QUIT1         ACALL DISPLAY     AJMP HERE QUIT1:  CLR RING         CLR OK     AJMP START ;=====显示程序===== DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,         MOV A,R3     MOVC A,@A+DPTR   MOV P2,#0feH   MOV P0,A   ACALL DELAY   MOV DPTR,#DAT2   MOV A,R5   MOVC A,@A+DPTR   MOV P2,#0fdH   MOV P0,A   ACALL DELAY   MOV A,R4   MOVC A,@A+DPTR   MOV P2,#0fbH   MOV P0,A   ACALL DELAY   RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H  ;"灭","1","2","3","4","5","6","7","8","9","灭","F" DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H ;第一个为零,其他与上相同,因为十位如果为零显示熄灭 ;====加减时间延时(起到不会按下就加N个数)====== DELAY1: MOV 35H,#08H LOOP0:  ACALL DISPLAY         DJNZ 35H,LOOP0         RET ;=====延时(显示和去抖动用到)===== DELAY:  MOV 32H,#12H LOOP:   MOV 33H,#0AFH LOOP1:  DJNZ 33H,LOOP1         DJNZ 32H,LOOP     RET ;=====发声程序===== BARK:   SETB RING         ACALL DELAY1         ACALL DELAY1         CLR RING;按键发声     RET ;=====TO溢出中断(响铃程序)===== T0INT:  MOV TH0,#0ECH         MOV TL0,#0FFH         JNB RING,OUT;      CPL P3.6;RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音 OUT:    RETI ;=====T1溢出中断(计时程序)===== T1INT:  MOV TH1,#3CH         MOV TL1,#0B0H     INC R0     RETI END 第五章 元器件及焊接调试 5.1蜂鸣器    HYPERLINK "http://baike.baidu.com/image/d478a8006cc0cbbae950cdd6" \t "_blank" INCLUDEPICTURE "http://imgsrc.baidu.com/baike/abpic/item/d478a8006cc0cbbae950cdd6.jpg" \* MERGEFORMATINET 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 ;蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。    HYPERLINK "http://baike.baidu.com/image/a992e31f750cfc1e304e15e9" \t "_blank" INCLUDEPICTURE "http://imgsrc.baidu.com/baike/abpic/item/a992e31f750cfc1e304e15e9.jpg" \* MERGEFORMATINET 蜂鸣器 5.2 数码管 ​ 1、说明 (1)电子板上电时数码显示管显示OPEN (2)每按下一次数字键蜂鸣器鸣叫一声,数码显示管显示该数字,表示该键输入已被承认。 (3)操作键板上“*” 用于表示消除“#”键用于表示确认和开启报警程序。 (4)按下任意键则唤醒进入功能操作。 2、个人密码的设置与更改 (1)按下设置,蜂鸣器鸣叫长响一声,数码显示管显示C1 IN个人密码开始设置或更改。 (2)任意输入1至12位数字(输入多于12位的成个人密码设置无效)后 “#”键确认,蜂鸣器鸣叫长响一声,数码显示管显示SET CI表示个人设置成功,如无任何操作系统自动进入休眠状态。 (3)除非断电至信息丢失或执行步骤个人密码的设置与更改(1),否则个人密码永远保存,不变更。 3、管理密码的设置 (1)按下两次“0”键再按下设置键,蜂鸣器鸣叫长响一声,数码显示管显示C2 IN ,个人密码开始设置或更改。 (2)任意输入1至12位数字(输入多于12位的成个人密码设置无效)后按“#”键确认,蜂鸣器鸣叫长响一声,数码显示管显示SET C2表示个人设置成功,如无任何操作系统自动进入休眠状态。 (3)除非断电至信息丢失或执行步骤管理密码的设置(1),否则管理密码永远保存,不变更。 4、开门,锁门 (1)输入正确的管理密码或个人密码后按 “#”键确认,蜂鸣器鸣叫长响一声,数码显示管显示SET CI或SET C2表示密码正确,电磁铁吸合,可以开门、锁门动作。 (2)约6秒以后,电磁铁释放。 (3)如果密码输入不正确,按下 “#”键确认蜂鸣器鸣会发出急促的提示音,数码显示管显示ERROR。 (4)如果三次输入均不正确,数码显示管显示REJEC,3分钟内将不接受输入密码。 5、报警 在休眠状态下按“#”开启报警程序,电子板受到摇晃或震动报警开始。 6、欠压指示 欠电压开门时,数码显示管显示LO BAT。(此时仍能继续工作,但请用户立即更换电池,本产品使用4节5号碱性电池) 《七段数码管引脚图》 数码管使用条件: a、段及小数点上加限流电阻 b、使用电压:段:根据发光颜色决定;  小数点:根据发光颜色决定 c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA    峰值电流 100mA 上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。 5.3 焊接与调试 PCB板做好了,孔也打好了,接下来的工作就是焊接。先把烙铁靠近焊盘,紧接着把锡丝往烙铁上送,等锡丝熔了轻轻一提,一个又圆又亮的焊点就做好了。板子做好后在一个小时左右把元件都焊上去了。焊接后的板子如图
/
本文档为【基于单片机的毕业论基于51单片机的抢答器设计文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索