基于STC89C52单片机的8路数字抢答器的设计—毕业论文陶相成组
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
基于STC89C52单片机的8路数字抢答器的设计—毕业论文陶相成组 2014 ~ 2015学年 第 1 学期 《单片机C51技术应用》 课 程 设 计 报 告 题 目: 智力竞赛抢答器 专 业: 电子信息工程 班 级: 12电子信息(2)班 姓 名: 陶香成 孙时平 汪政 王亚南 王震 王攀登 指导教师: 王银花 电气工程学院 2014 年 11月27日 任务书 课题名称 智力竞赛抢答器 指导教师(职称) 王银花(副教授) 执行时间 2014~2015学年第1学期 第13周 学生姓名 学号 承担任务 1209121095 孙时平 查阅资料 1209121096 陶香成 模板的设计及规划 1209121097 汪政 制图 1209121098 王攀登 语言文字的书写及串联 1209121099 王亚南 整体布局的设计 1209121100 王震 资料的整理及编辑 基于单片机STC89C52单片机为核心,设计具有八个抢答设计目的 键的数字抢答器,实现八路数字智力竞赛抢答器功能。 设计要求 (1) 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮SW1 ~ SW8表示。 (2) 设置一个系统复位键RESET,一个系统开始键START,由主持人控制。 (3) 抢答器可自动识别抢答成功的选手,并在LED数码管上显示该选手编号,同时 蜂鸣器发出提示声。选手抢答成功后其他选手不可抢答,及按下抢答键后无效。 (4) 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(默认30秒)。当主持人启动" START"键后,中断程序开始计时。抢答时间开始减少。同时蜂鸣器发出短暂的声响,声响持续的时间0.5秒。 (5) 参赛选手在设定的时间内进行抢答,抢答有效,报警0.5秒,数码管上显示选手的编号和抢答的时间,并保持到主持人启动RESET复位键为止。 (6) 如果定时时间已到,无人抢答,本次抢答无效,系统报警并自动复位。准备下一次的抢答。 1 目 录 摘 要 .................................................................................................................................... 4一、绪论 .................................................................................................................................... 51.1 课题的背景与意义 ........................................................................................................ 5 1.1.1 课题的背景 ................................................. 5 1.1.2 课题的意义 ................................................. 5 1.2 课题的任务和要求 ........................................................................................................ 5 1.2.1 课题的任务 ................................................. 5 1.2.2 课题的要求 ................................................. 6 二、 STC89C52单片机系统说明 .......................................................................................... 7 2.1 89系列单片机的概况 ................................................................................................... 7 2.2 STC89C52单片机介绍 ................................................................................................ 8 2.3 STC89C52单片机的性能 .......................................................................................... 11 2.4 各类单片机的比较与分析 .......................................................................................... 12 3 数字抢答器总体方案的设计 ............................................................................................ 12 3.1 系统硬件的设计 .......................................................................................................... 13 3.1.1 系统设计原理图 ....................................... 13 3.1.2 时钟频率电路的设计 ............................... 14 3.1.3 复位电路的设计 ....................................... 15 3.1.4 显示电路的设计 ....................................... 16 3.1.5 键盘扫描电路的设计 ............................... 16 3.1.6 报警电路的设计 ....................................... 18 3.2 系统软件的设计 .......................................................................................................... 18 3.2.1 Keil C51 v8.05软件介绍 ......................... 18 3.2.2 主程序系统结构图 ................................... 19 结论 .......................................................................................................................................... 20 参考文献 .................................................................................................................................. 21 附录A ...................................................................................................................................... 22 答辩记录及评分表 .................................................................................................................. 29 1 摘 要 随着科学技术的发展,人们学习知识的手段也越来越多。趣味抢答竞赛就是其中的一种。众所周知,抢答赛一定要公平,公正的判断出选手的答题权,这就离不开抢答器。通过本课题的设计研究,设计一种基于单片机的数字抢答器,该设备投资小,操作简单,功率小,效率高,是现代抢答赛不可或缺的工具。 本课题简单的介绍了89C52单片机的概况。采用经典的绘图工具Protel99Se设计原理图,C语言功能强大的Keil C51来编写程序。 课题叙述了数字抢答器的基本原理,介绍一种以89C52单片机为核心的八路数字抢答器系统。给出了一种数字抢答器的设计方案。设计内容包括声音提示、主持人键、选手编号显示,剩余时间显示等部分。此次设计的抢答器拥有电路简单,成本较低,操作方便,灵敏可靠等特点。 本课题从硬件和软件两方面阐述了该抢答器系统的设计技术。经过调试和运行,该抢答器达到了预期目标。 关键词:单片机;抢答器;Protel99Se;Keil C51 1 一、绪论 1.1 课题的背景与意义 1.1.1 课题的背景 随着科学技术的迅猛发展,单片机的应用正在不断的深入。它有着价格低廉,体积小巧,性能优越,开发简单,耗能低等优点。正逐步用来开发各种智能家电,学习用具,工业设备等产品。同时带动传统控制检测技术日新月异的更新。[2] 1.1.2 课题的意义 目前,各学校、企业、电视台及其他单位常举办各种智力和知识竞赛。这些竞赛又离不开抢答的环节。然而我们常看到的是举办方通过选手举手来判断答题权。这在某种程度上会因为主持人的主观误判造成比赛的不公平性。这就很容易影响一次竞赛的气氛。在电子产品日益廉价、高效、简单易用的今天,这种方式已经不适应社会的需要了。在这个竞争激烈的社会中,比赛要做到公正、准确、高效以及直观的判断选手的答题权,数字抢答器就必不可少了。 国内外研究进展及发展趋势: 我国电子市场正在突飞猛进的发展。当然,抢答器也不例外。抢答器作为一种电子产品。已广泛用于各种智力和知识竞赛场合。但目前所使用的传统的抢答器工艺复杂,可靠性低,实现困难,体积庞大,操作更是不简单。这极大的影响了整个行业的发展。 随着科学技术的发展,现在抢答器必然将向着数字化,智能化,小型化方向发展。因此,本课题选择了STC89C52单片机来设计具有八个抢答键的数字抢答。该抢答器具有制作简单,成本低廉,可靠性高,易于实现,体积小巧以及操作简单等特点。 对于STC89C52单片机,第二章有详细介绍。这里不做赘述。 1.2 课题的任务和要求 1.2.1 课题的任务 利用现在市面上性价比极高且易于购买的STC89C52单片机设计一款数字抢答器,需实现以下功能: 1 (1) 八名选手同时使用; (2) 能显示答题人的编号; (3) 需显示出剩余时间; (4) 开始与抢答成功声音提示; (5) 主持人可控制开始和结束抢答; (6) 时间可调。 1.2.2 课题的要求 本设计主要内容: 接通电源后,系统自动复位,无需手动按复位键。抢答器处于禁止状态,选手按抢答键无效,也不作提示。数码管显示030,主持人这时可以按动ADD键与DEC键设置抢答剩余时间;主持人启动START键后,抢答器开始工作。蜂鸣器给出声响提示。抢答时间开始减少,直到有选手抢答为止。如果在规定的时间内,没有选手抢答,抢答器自动复位。选手在设定的时间内抢答时,抢答器完成:优先判断、编号显示、蜂鸣器提示。当一轮抢答成之后,禁止二次抢答、数码管显示当前剩余时间。选手答题结束后,主持人按下RESET键,抢答器复位,方可进行下一轮的抢答。 该数字抢答器的预期目标如下: (1) 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮SW1 ~ SW8表示。 (2) 设置一个系统复位键RESET,一个系统开始键START,由主持人控制。 (3) 抢答器可自动识别抢答成功的选手,并在LED数码管上显示该选手编号,同时 蜂鸣器发出提示声。选手抢答成功后其他选手不可抢答,及按下抢答键后无效。 (4) 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(默认30秒)。当主持人启动" START"键后,中断程序开始计时。抢答时间开始减少。同时蜂鸣器发出短暂的声响,声响持续的时间0.5秒。 (5) 参赛选手在设定的时间内进行抢答,抢答有效,报警0.5秒,数码管上显示选手的编号和抢答的时间,并保持到主持人启动RESET复位键为止。 (6) 如果定时时间已到,无人抢答,本次抢答无效,系统报警并自动复位。准备下一次的抢答。 1 二、 图 2-1 STC89C52单片机 STC89C52单片机内部包含了作为微型计算机所必须的基本功能部件,各功能部件相互独立的集成在同一块芯片上。本章主要介绍STC89C52单片机的系统结构及其功能。 2.1 89系列单片机的概况 STC89C52单片机系统说明 AT89系列单片机是ATMEL公司的8位 Flash 单片机系列这个系列单片机的最大特点是在片内含有 Flash 存储器。能方便的存储所开发的程序,而不需要外加储存模块。因此, 在应用中有着十分广泛的前途。特别是在便携式、省电及特殊信息保存的仪器和系统中显得更为有用。 89 系列单片机特点: AT89 系列单片机是以 8051 内核构成的。 所以, 它和 8051 系列单片机是兼容的系列。这个系列对于以 8051 为基础的系统来说, 是十分容易进行取代和组成的。故而对于熟悉 8051 的用户来说, 用 ATMEL 公司的 89 系列单片机进行取代 8051 的系统设计是轻而易举的事。 89 系列单片机的优点: (1) 内部含 Flash 存储器 在系统的开发过程中可以十分容易进行程序的修改这就大大缩短了系统的开发周期同时在系统工作过程中能有效地保存一些数据信息即使外界电源损坏也不会影响到信息的保存。 (2) 和 80C51 插座兼容 89 系列单片机的引脚是和 80C51 的引脚一样的所以当用89 系列单片机取代 80C51 时可以直接进行代换这时不管采用 40 引脚或是 44 引1 脚的产品只要用相同引脚的 89 系列单片机取代 80C51 的单片机即可。 (3) 静态时钟方式。89 系列单片机采用静态时钟方式,所以可以节省电能,这对于降低便携式产品的功耗十分有用。 (4) 错误编程亦无废品产生。一般的 OTP 产品一旦错误编程就成了废品,而 89 系列单片机内部采用了 Flash 存储器所以错误编程之后仍可以重新编程直到正确为止。故不存在废品。 (5) 可进行反复系统试验。用 89 系列单片机设计的系统可以反复进行系统试验。每次试验可以编入不同的程序。这样可以保证用户的系统设计达到最优。而且,随用户的需要和发展还可以进行修改使系统不断能追随用户的最新要求。[3] 2.2 STC89C52单片机介绍 STC89C52 是INTEL公司MCS-51系列单片机中基本的产品,它采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。STC89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。 内部结构图: 如图2-2, 电源电路 GND VCC 外部设备1 外部设备2 接口电路 输出 输入 输出 接口电路 输I/O复位电路 内部总运算时钟电路 控制程序 存储器 数据 存储器 寄存CPU 存储图 2-1 STC89C52内部结构图 1 图中: (1) 内部总线是STC89C52单片机内部的数据通路。 (2) 时钟电路为单片机提供一个基准工作时钟。 (3) 复位电路是为单片机通电后设置初始状态。 各引脚介绍: 如图2-3,本设计所选用的STC89C52单片机是PDIP封装。及双排针式,40引脚的封装。 P0 口: P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1 口: P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入图 2-2 STC89C52封装图 1 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2 的触输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能 P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出。 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)。 P1.5 MOSI(在线系统编程用)。 P1.6 MISO(在线系统编程用)。 P1.7 SCK(在线系统编程用)。 P2 口: P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口: P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为STC89C52特殊功能(第二功能)使用。在flash编程和校验时,P3口也接收一些控制信号。 端口引脚 第二功能 P3.0 RXD(串行输入口)。 P3.1 TXD(串行输出口)。 P3.2 INTO(外中断0)。 P3.3 INT1(外中断1)。 P3.4 TO(定时/计数器0)。 P3.5 T1(定时/计数器1)。 P3.6 WR(外部数据存储器写选通)。 P3.7 RD(外部数据存储器读选通)。 此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 RST——复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。 1 ALE/PROG——当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。 对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN——程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP——外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。[4] 2.3 STC89C52单片机的性能 STC89C52 与MCS-51单片机产品兼容。8K字节在系统可编程Flash存储器,1000次擦写周期,全静态操作。晶振频率范围0Hz~33Hz,三级加密程序存储器,32个可编程I/O口线、三个16位定时器/计数器,八个中断源,全双工UART串行通道,低功耗空闲和掉电模式,掉电后中断可唤醒,看门狗定时器,双数据指针,掉电标识符 。 STC89C52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 STC89C52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K字节在系统可编程 Flash。 [5]1 2.4 各类单片机的比较与分析 如表2-4所示,以下各种类型的单片机内除CPU外,还包括ROM、RAM、4*8 I/O口和2个16位定时/计数器,它们都是功能很强的单片微型计算机。但由于80C51片内为掩膜ROM,故内部程序不能改写,不用于实验开发。87C51具有片内EPROM,是真正的单片微机,但由于价格较贵,且程序改写时要用紫外线擦除,时间较长,所以用得较少。80C31在市场上的价格很低,但片内没有ROM,必须在片外扩展一片EPROM,非常不便。AT89C51片内具有可电擦除的FPEROM,可以快速、多次地编程,且价格不高,所以用得非常广泛,目前开发用的MCS—51产品绝大多数用89C51。由于现在市面上 89C51 和 89C52 价格相差极小(仅5角钱的差异),故本设计采用了性能更好的89C52系列。使系统有了更大的扩展空间。[6] 片型号 80C31 80C51 87C51 89C51 89C52 ROM 形式 接ROM ROM EPROM FPEPROM EEPROM 内 ROM 4K 4K 4K 4K 8K 片内 RAM 128 128 128 128 256 表 2-4 寻址 范围 2*64 K 2*64 K 2*64 K 2*64 K 2*64 K 定时 计数 2*16 2*16 2*16 2*16 3*16 4 4 4 4 4 I/O口 串行 I/O口 UART UART UART UART UART 外部 中断 2 2 2 2 3 3 数字抢答器总体方案的设计 本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务,随着集成电路技术的飞速发展,各种功能很强的芯片不断出现,使硬件电路的集成度越来越高,硬件设计的工作量在整个项目中的所占的比重逐渐下降。 1 3.1 系统硬件的设计 为使硬件电路设计尽可能合理,应注意以下几方面: (1) 尽可能采用功能强的芯片,以简化电路,功能强的芯片可以代替若干普通芯片,随着生产工艺的提高,新型芯片的价格不断下降,并不一定比若干普通芯片价格的总和高。 (2) 留有设计余地。在设计硬件电路时,要考虑到将来修改扩展的方便。因为很少有一锤定音的电路设计,如果现在不留余地,将来可能要为一点小小的修改或扩展而被迫进行全面返工。 (3) 程序空间,选用片内程序空间足够大的单片机,本设计采用STC89C52单片机。 (4) I/O端口,在样机研制出来后进行现场试用时,往往会发现一些被忽视的问题,而这些问题不是靠单纯的软件措施来解决的。如有些新的信号需要采集,就必须增加输入检测端;有些物理量需要控制,就必须增加输出端。如果在硬件电路设计就预留出一些I/O端口,虽然当时空着没用,那么用的时候就派上用场了。 3.1.1 系统设计原理图 1. 本设计各原理图所使用的画图软件简介 Protel99Se的介绍 图 3-1 如图3-1,Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及3D模1 拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。[7] 2. 原理图 图 3-2系统原理图 如图3-2,P2.3口为开始START键,P2.4为复位RESET键,P1.0-P1.7为八路抢答输入SW1-SW8键,数码管段选P0口,位选P2.0、P2.1、P2.2,蜂鸣器输出为P2.7口。P2.5为时间加1 ADD键,P2.6为时间减1 DEC键。 3.1.2 时钟频率电路的设计 图 3-3 时钟电路 1 如图3-3,单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。本设计采用11.0592M晶振,而不是12M,使计时更加精准。 单片机一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。 单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为110592MHz,即fosc=11.0592MHz,则时钟周期为1/11.0592µs。[8] 3.1.3 复位电路的设计 如图3-4,单片机的第9脚RESET为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图3-所示: 值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,系统实现了复位 。本设计还设计了软复位功能。软复位实际上就是当复位程序执行完毕之后,将程序中的变量恢复到初始状态,也实现了系统复位。 图 3-4 复位电路 1 3.1.4 显示电路的设计 图 3-5 显示电路 如图3-5,数码管采用4位八段共阳极LED,位选采用PNP三极管间接控制。增强数码管的电流输入。避免了因单片机驱动电流较小而引起的显示问题。使选手和主持人都能清楚的看到显示内容。且大大减小了单片机的负担。 3.1.5 键盘扫描电路的设计 键盘是人与微机系统打交道的主要设备。键盘分为独立式和矩阵式。它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。这里采用最常用的方法,即延时法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取200ms)后再进行运算。 本设计共12个键。为增强本设计的稳定性,减少单片机的工作量,在单片机剩余[9]1 引脚允许的情况下,本设计采用了独立式键盘。 1. 抢答部分 如图3-6: P1 口八个引脚刚好代表八个抢答键,方便编程与布线。 2. 主持人控制部分 如图3-7: 图 3-7 主持人键盘电路 图 3-6 选手键盘电路 1 3.1.6 报警电路的设计 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。 的高低电平即可。 3.2 系统软件的设计 3.2.1 Keil C51 v8.05软件介绍 图 3-9 图3-8 报警电路 如图3-8,本设计对声音要求不高,不需要复杂的编程。我们只需要简单的控制P2.71 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 2006年1月30日ARM推出全新的针对各种嵌入式处理器的软件开发工具,集成Keil μVision3的RealView MDK开发环境。 RealView MDK开发工具KeilμVision3源自Keil公司。 RealView MDK集成了业内领先的技术,包括Keil μVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的 Simulation设备模拟,性能分析等功能,与ARM之前的工具包ADS等相比,RealView编译器的最新版本可将性能改善超过20%。[10] 3.2.2 主程序系统结构图 如图3-10: 本课题公布全部源程序,详情请参见附录A。 减一键按下? 加一键按下?开始键按下? 复位键按下? 初始化 显示0XX Y Y 抢答 成功 Y 无人 抢答 主持人 复位 Y 抢答时 间减一 抢答时 间加一 系统 复位 图 3-10 主程序系统结构图 1 结论 首先,毕业课题的研究是检验我们在校学习成果的重要措施,也是提高教学质量的重要环节。是作为大学生在毕业前都必须完成的任务。毕业论文是结束大学学习生活走向社会的一个中介和桥梁,毕业论文是我们大学生才华的第一次显露,是向祖国和人民所交的一份有份量的答卷,是投身社会主义现代化建设事业的报到书。通过本次课题的研究,可以锻炼我仔细认真的学习态度,可以很好的陪养我的求实创新思维。还可以增强我追求科学的热情。 其次,通过撰写毕业论文,提高了我们的写作水平。增加了师生之间的感情。在整个论文的撰写过程中遇到的每一个难题都是我们取得进步的动力点。遇到难题我们就要去解决,自己能力不足的请教老师。只要我们努力去克服它就是一次进步。更是一次超越自我的尝试。这一切在我们的人生阅历中将是无比珍贵的财富,也是在踏入社会前对专业知识做最后一次的提升。 再次,本课题主要是研究和设计基于单片机的数字抢答器,选用单片机芯片作为核心,加上廉价的LED数码管巧妙完美的配合,设计出了廉价,实用,小巧的抢答器,提升了抢答器市场的竞争力,弥补了智力竞赛的不足。 本课题是以产品的低能耗、提高性价比为出发点进行构思设计,STC89C52单片机采用CMOS工艺。大大减少了系统的能耗。符合国家节能减排的大背景。 数字抢答器的设计这一课题具有很强的针对性实战性,很好的考查了我对电子类知识的掌握能力,在研究课题期间让我学习到了很多知识同时也认识到了自己的不足之处,为我今后的发展提供更好的指引;拿到课题后在老师的关怀指导和同学们的热心帮助下,通过查阅相关书籍、上网查阅等途径涉猎与课题相关的知识,经过不懈努力最终将课题完成,在这期间很好的培养了我独立处理问题的能力和主动涉猎知识的习惯,为我在以后的工作就业打下了更好的基础,让我能更快的融入到社会中。 1 参考文献 [1] 臧殿红,臧殿红.基于AT89S51的八路抢答器的设计[J]. 科技信息,2011,25[2] 张毅刚. 新编MCS-51单片机应用设计[M].3版.哈尔滨:哈尔滨工业大学出版期:3. 社,2008:4 [3] 王建. 单片机入门与典型应用实例[M].1版.北京:中国电力出版社,2010:6-7 [4] 郭天祥. 新概念51单片机C语言教程[M].1版.哈尔滨:电子工业出版社,2009:7-10. [5] 凌志浩. AT89C52单片机原理与接口技术[M].1版.北京:高等教育出版社,2011:10 [6] 李学海. 经典80C51单片机轻松入门与上手[M].1版.哈尔滨:清华大学出版社,2009:10-11 [7] 赵建岭. Protel99SE设计宝典[M].1版.哈尔滨:电子工业出版社,2011:17 [8] 郭天祥. 新概念51单片机C语言教程[M].1版.哈尔滨:电子工业出版社,2009:13. [9] 李朝青. 单片机原理及接口技术[M].3版.北京:北京航空航天大学出版社,2006:15. [10] 王东锋. 单片机C语言应用100例[M].1版.哈尔滨:电子工业出版社,2009:17. 1 附录A 注:以下内容是直接复制写在Keil中的完整程序。 //*******************>>>程序开始<<<******************// //作用:数字抢答器 //时间:2012.05 //作者:林 海 /* 项目要求: 接通电源后,系统自动复位,无需手动按复位键。抢答器处于禁止状态, 选手按抢答键无效,也不作提示。数码管显示030,主持人这时可以按动 ADD键与DEC键设置抢答剩余时间;主持人接通START后,抢答器开始工作。 扬声器给出声响提示。抢答时间开始减少,直到有选手抢答为止。选手在 定时时间内抢答时,抢答器完成:优先判断、编号显示、扬声器提示。当 一轮抢答之后,禁止二次抢答、数码管显示剩余时间。选手答题结束后, 主持人按下RESET键,抢答器复位,方可进行下一轮的抢答。 该数字抢答器的预期目标如下: 1. 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮SW1 ~ SW8表示。 2. 设置一个系统复位键RESET,一个系统开始键START,由主持人控制。 3. 抢答器可自动识别抢答成功的选手,并在LED数码管上显示该选手编号, 同时蜂鸣器发出报警声响提示。选手抢答成功后其他选手不可抢答,及按下 抢答键后无效。 4. 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(默认30秒)。 当主持人启动" START"键后,中断程序开始计时。抢答时间开始减少。同时 扬声器发出短暂的声响,声响持续的时间0.5秒。 5. 参赛选手在设定的时间内进行抢答,抢答有效,报警0.5秒,数码管上显 示选手的编号和抢答的时间,并保持到主持人启动RESET复位键为止。 6. 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定 时显示器上显示030。 */ #include #define uint unsigned int 1 #define uchar unsigned char sbit SW1=P1^0; // ****** sbit SW2=P1^1; // * 八 * sbit SW3=P1^2; // * 路 * sbit SW4=P1^3; // * 抢 * sbit SW5=P1^4; // * 答 * sbit SW6=P1^5; // * 按 * sbit SW7=P1^6; // * 钮 * sbit SW8=P1^7; // ****** sbit START=P2^3; // 开始; sbit RESET=P2^4; // 复位; sbit ADD=P2^5; // 加一; sbit DEC=P2^6; // 减一; sbit A=P2^7; // 蜂鸣器; sbit H1=P2^0; // 选手编号位 bai sbit H2=P2^1; // 剩余时间十位 shi sbit H3=P2^2; // 剩余时间个位 ge /* 显示部分: 段选:P0.0~P0.6;7段 位选:P2.0~P2.2;三位 注:共阳极LED */ uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,}; //数码管显示字符定义 对应0~9; void keyscan(); void display(); void delay(uint); void FUWEI(); void qushu(); //键盘扫描函数申明; //显示函数申明 //延时函数申明 //复位函数申明 //拆分任意两位数 //默认剩余时间30秒; //定义变量; uint input=30; uchar ge,shi,bai=0,n=1,m=0,t=0,temp; 1 //***************************************************************// //*********************>>>主函数开始<<<**************************// //***************************************************************// void main() { TMOD=0x01; //设置定时器0为工作方式1.(M1M0为1) TH0=(65536-50000)/256; //装初值。11.0592M晶振定时50ms数为45872. TL0=(65536-50000)%256; //低位 EA=1; ET0=1; /***************中断服务子程序每结束一次都回到TR0=1这点***********/ while(1) { } } //系统复位函数 void FUWEI() { TR0=0; //关定时器 TH0=(65536-50000)/256; //重装初值。 TL0=(65536-50000)%256; //低8位 t=0; A=0; A=1; bai=0; } //中断函数计数清零 //*********** //报警500毫秒 //*********** //选手编号清零 //设置剩余时间 keyscan(); qushu(); display(); //************************* //****依次扫描此3个函数*** //************************* //主程序死循环,保证抢答器一直运行下去 //开启总中断。 //开定时器0中断 delay(500); input=30; 1 //系统显示函数 void display() { H1=0; //************************************** P0=table[bai]; //********* 选手编号显示 ************* delay(1); //************************************** H1=1; H2=0; //关一位数码管,保证选手编号位不被干扰** //************************************** P0=table[shi]; //********* 剩余时间十位显示 ********* delay(1); //************************************** H2=1; H3=0; //********* 关二位数码管 ************* //************************************** P0=table[ge]; //********* 剩余时间个位显示 ********* delay(1); //************************************** H3=1; } //拆分任意两位数函数 void qushu() { shi=input/10; //取整 ge=input%10; //取余 } //键盘扫描函数 void keyscan() { //复位操作,无论何时,都可以复位,节省时间 if(RESET==0) { delay(200); FUWEI(); n=1; //延时200毫秒,防止按键机械振动引起的误差 //系统复位 //复位后开启主持人其他权限 //********* 关三位数码管 ************* 1 } //n为1时,表示还没开始抢答,可以操作 if(n) { } //调整时间函数,抢答前可操作。 if(n) { } //主持人启动START按钮后,开始检查选手按钮。 if(m) { 止。 if(P1!=0xFF) //如果有选手抢答,则找出他的编号 { temp=P1; m=0; //自锁,此后不再检测选手抢答键,直到主持人启动START为 if(ADD==0) { } if(DEC==0) { } delay(200); input--; //时间减一 delay(200); //防止按键抖动重复加一 input++; //时间加一 TR0=1; //开定时器 A=0; A=1; m=1; n=0; //************* //报警500毫秒* //************* //开启选手抢答权限 //自锁,开始后不检测此按钮,有效防止在选手答题时主持delay(500); //开始抢答 >>需要自锁<< if(START==0) 人误操作。 1 } } } switch(temp) { case 0xFE:bai=1; //一号选手答题 break; break; break; break; //五号选手答题 break; break; break; break; } case 0xFD:bai=2; //二号选手答题 case 0xFB:bai=3; //三号选手答题 case 0xF7:bai=4; //四号选手答题 case 0xEF:bai=5; case 0xDF:bai=6; //六号选手答题 case 0xBF:bai=7; //七号选手答题 case 0x7F:bai=8; //八号选手答题 TR0=0; //关定时器,剩余时间不再减少,显示剩余时间 //中断方式一服务程序。 void timer() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++; { t=0; //然后把t清零重新再记20次。 //减一秒 input--; if(input==0) //每累加一次,判断是否到20. if(t==20) //如果到了20次,说明1秒时间到。 //重装初值。 //如果没人回答,自动复位; 1 } } FUWEI(); //系统复位 //刷新显示 qushu(); //延时函数,利用系统计算时间延时,不占用计时器。 void delay(uint z) { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } 1 答辩记录及评分表 课题名称 智力竞赛抢答器 答辩教师(职称) 周珍艮、王银花 答辩时间 2014-2015学年第1学期 第 13周 1.时钟电路中C1,C2的作用是什么? 答:(1)帮助振荡器起振;(2)对振荡器的频率进行微调。 2.为什么STC89C52的P1,P2和P3口作为输入使用时, 都是输出电流(IIL)? 答:因为他们作为输入使用时,被外部拉低的引脚由于内部 电阻的原因,将输出流(IIL) 答 3.本设计采用11.0592M的晶振而不是12M的晶振,为什 么? 辩 答:为了使计时更加精确,达到预期的效果。 记 录 评 分 表 学生姓名 学号 评分 1209121095 孙时平 1209121096 陶香成 1209121097 汪政 1209121098 王攀登 1209121099 王亚南 1209121100 王震 1 本文来源:https://www.wddqw.com/doc/ccbb1ac7132de2bd960590c69ec3d5bbfd0adaeb.html