八路抢答器毕业设计说明书

单位代码 01

学 号 1101020024

分 类 号 TN7

密 级

毕业设计说明书

抢答器设计

院(系)名称

专业名称 信息工程学院 电子信息工程

学生姓名 刘十飞

指导教师 郭 彬

2015年05月11日

黄河科技学院毕业设计说明书 第 I 页

抢答器设计

摘 要

当今社会上的竞争愈来愈多,也越来越激烈,评优评先,智力竞赛之类等活动也愈见频繁,因此抢答器的应用与需求也就越来越普遍。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用集成电路制成,价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中无法精确保证比赛的公平、公正、直观。考虑到需设定限时回答和锁定按钮等功能,本系统采用STC89C52单片机为控制核心。本文根据系统功能划分成五个模块,分别为:单片机最小系统模块、电源模块、按键输入模块、显示模块、报警模块。软件设计则采用C语言进行编程。该智能抢答器,通过软件编程控制能显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时,降低了成本、简化了硬件结构,并且抢答公平、误差较小。该智能电路简单、反应快、实用性强等优点,具有较高的推广价值,目前,国内外开始普遍使用。

关键词:单片机STC89C52,抢答器,C语言

黄河科技学院毕业设计说明书 第 II 页

The Design of the Responder

Author: liu shi fei

Tutor: Guo Bin

Abstract

Competition in today's society more and more, also more and more intense, with explicit PingXian, such as quiz activities also increasingly frequent, so the application of the buzzer and the demand is becoming more and more popular. Now on the market some of the buzzer is not only cost is high, the line more, large size, and is very complicated to install and use. Ordinary buzzer, for example, is made from common integrated circuit, high price, single function, cost performance is bad, often easily affected by man-made factors, in the knowledge competition, therefore, cannot accurately to ensure that the game fair and just, and intuitive. Considering the need to set the time to answer and lock button, and other functions, this system adopts the STC89C52 single-chip microcomputer as the control core. According to the system function is divided into five modules, respectively is: single chip microcomputer minimum system module, power module, key input module, display module, alarm module. The software design using C language for programming. The intelligent responder, through software programming control can show the players get the title number, violations of vies to answer first contestant number, vies to answer first time, and problem solving time countdown, reduces the cost, simplifies the hardware structure, and vies to answer first fair and smaller error. The smart circuit is simple, rapid response, strong practicability, etc, is of high popularization value. At present, began to widely used at home and abroad.

Key words: Microcontroller STC89C52, responder, c language

黄河科技学院毕业设计说明书 第 III 页

目 录

1 绪论 ........................................................................................................................................ 1

1.1 课题背景 ...................................................................................................................... 1

1.2 课题研究现状 .............................................................................................................. 1

1.3 目的与意义 .................................................................................................................. 2

1.4 基本的要求 .................................................................................................................. 2

2 总体设计方案论证 ................................................................................................................ 3

3 系统硬件设计 ........................................................................................................................ 4

3.1 系统概述 ...................................................................................................................... 4

3.2 设计总体框图 .............................................................................................................. 4

3.3 最小系统模块 .............................................................................................................. 4

3.3.1 单片机最小系统 ................................................................................................ 4

3.3.2 STC89C52简介 .................................................................................................. 5

3.4 键盘扫描电路 .............................................................................................................. 7

3.5 蜂鸣器报警电路 .......................................................................................................... 8

3.6 数码管显示 .................................................................................................................. 9

4系统软件设计 ....................................................................................................................... 10

4.1 总体程序设计 ............................................................................................................ 10

4.2 抢答/答题时间设置 ................................................................................................... 10

4.3 数码管动态扫描程序 ................................................................................................ 11

5 仿真与测试分析 .................................................................................................................. 13

5.1 用Keil进行程序编译结果 ....................................................................................... 13

5.2 Proteus仿真结果 ........................................................................................................ 13

6 电路板的制作与调试 .......................................................................................................... 16

黄河科技学院毕业设计说明书 第 IV 页

6.1 制作 ............................................................................................................................ 16

6.2 调试 ............................................................................................................................ 16

结论 .......................................................................................................................................... 18

致谢 .......................................................................................................................................... 19

参考文献 .................................................................................................................................. 20

附录 .......................................................................................................................................... 21

附录A ............................................................................................................................... 21

附录B ............................................................................................................................... 21

黄河科技学院毕业设计说明书 第 1 页

1 绪论

1.1 课题背景

随着我国抢答器市场的日新月异的发展,与此相关的核心生产技术的应用和开发研究也愈来愈受业内企业的关注。技术工艺,是衡量一个企业进步的重要标准,是衡量一个企业是否具备市场竞争力的重要依据,更是衡量一个企业是否能不断处于主导地位的重要指标。目前市场上抢答器的不仅种类让人眼花缭乱,功能各种各样,而且价格参差不齐。那么选择一款真正适合的抢答器是至关重要的。

抢答器是一种在现代竞技社会中十分常见的的设备,它能很快地判断出第一个发言的组号。目前抢答器大部分使用数字集成电路与单片机,而且还附加了很多新特点,比如显示抢答组号、显示组号得分等功能。

1.2 课题研究现状

抢答器作为一种电子产品,随着各种智力和知识竞赛的越来越多,已普遍应用。如今市场上抢答器种类多样,功能也各有不同。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用的集成电路制成,有些专用集成价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中,无法精确保证比赛的公平、公正、直观。目前国内外研究人员都加大对智能抢答器的研究和设计,完善抢答器的各项功能。而由于单片机体积小、价格低廉、功能强、使用灵活等优点,在工业控制、智能仪表、航天航空设备、机器人、家电产品等领域得到了广泛应用,尤其在新产品研制、设备的更新改造中具有广泛的应用前景。现在,智能抢答器的在国内外已经开始普遍应用。 随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。由于现在小规模的知识竞赛愈见频繁,所以那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。由于现在小规模的知识竞赛愈见频繁,所以

黄河科技学院毕业设计说明书 第 2 页

那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。因此针对各类赛事活动而设计的无线抢答器也应时出现,一个公认的抢答器不仅可以快速、准确的显示出第一名抢答者编号而且还可以排除人为操作及判断带来的误差,它是由电子逻辑代替人的主观,可以在一定的程度上保证了比赛的公正。

1.3 目的与意义

在设计过程中通过查阅大量资料,掌握了单片机的原理和功能,深刻体会了单片机应用系统硬件和软件的设计方法,锻炼开发单片机应用系统的能力;同时也了解了抢答器结构组成和工作原理,各单元电路的作用及相互影响。所以本研究是在实际应用中比较实用,具有创新性。通过在电路设计过程、结果验证表明用单片机比其他技术的抢答器有许多优点。大多数功能单元都可以通过软件的程序编程在单片机内部实现,得电路简单连接方便,且工作性能可靠,抗干扰能力强。而我所设计的四路抢答器使用的元件普通 ,不仅具有易于购买等优点,而且功能也比较多,使用方便,采用单片机,大大减少布线带来的种种麻烦,所以在国内外已经开始了普遍的应用。

1.4 基本的要求

1)可同时提供最多包括8个人(组)的参加比赛,用8个按钮来表示。

2)在主持人按下“开始”按扭后,开始30秒钟倒计时,选手可以正式开始抢答。如果到没有人按下按钮,最后蜂鸣器就会响。

3)若主持人还没按下“开始”按扭,就有选手(组)按下,是违反规定抢答,蜂鸣器就会响,同时显示该选手的编号。

4)要求具有抢答锁定功能,即某一选手抢到后,其它选手的抢答功能被锁定,无法进行抢答,直至下一轮抢答开始。

5)该抢答器有显示和锁存的功能。也就是说当选手按下按钮,锁存器会锁存对应的组号,并且组号显示在左边LED数码管上,右边开始15秒钟倒计时

6)选手可以正式开始抢答的时间、选手回答问题的时间都是可以设置的。

黄河科技学院毕业设计说明书 第 3 页

2 总体设计方案论证

方案一: 八路抢答器系统的各部分都用中小规模数字集成电路,通过硬件电子元器件搭建电路实现,把机械开关按钮作为控制开关完成抢答输入信号的触发。如我用74LS138编码器等电气器件来实现抢答功能,这个方案不用软件编程,功能实现齐全,可靠性强,但实际搭建起来麻烦,因为需要的元件多,电路复杂,焊板子时也很容易出现错误。

方案二:设计基于可编程的PLC,依据控制系统的工作原理和技术性能系统[2]可分为硬件和软件。在硬件方面,选择特定的元器件来画原理图;在对电路测试,已达到我们要实现的要求,就软件来说,用特定的语言来编程设计。

方案三:系统主要基于单片机作为控制核心的设计。单片机技术比较成熟,体积小价格低,稳定可靠;在外围焊接上了复位电路、上拉电阻、数码管,硬件电路简单,容易调试。单片机算术运算功能强[3],软件编程灵活、自由度大,许多功能都可以通过软件编程来实现,例如选手是否抢答,强大的时间是否正确;可以实现倒计时、选手等显示。

方案分析:方案一由抢答电路模块、定时电路模块、时序控制模块、译码电路模块,显示电路模块、报警电路模块等部分组成,它的功能很齐全,设计的电路也很稳定,但特定的集成成本高。方案三我用单片机为核心控制器件,其可靠性好,结构简单,完善功能很容易,也可以进行扩展,更深的研究。总体来说在许多方面都比方案一和方案二好,例如性能、效率。其功能的实现也比较方案简洁,经济也实用。

综上看来我选用基于单片机的方案,即方案三。

黄河科技学院毕业设计说明书 第 4 页

3 系统硬件设计

3.1 系统概述

整个系统以STC89C52单片机为核心器件,其它个模块围绕着单片机展开。输入部分包括选手的抢答输入和主持人的控制输入2个内容,由于这两个内容都是通过按键控制的,所以这里统一使用普通的轻触开关作为本设计的输入模块包[4],一共包括8个选手输入按键和2个主持人输入按键。输出部分则采用蜂鸣器和一个四位共阳数码管进行声光的输出,这里主要有几个需蜂鸣器发出报警的地方,如最后5秒仍无人抢答、答题剩余最后5秒、抢答时间结束以及答题时间结束等。而数码管则主要用于信息的输出,如可以用来显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时等。

3.2 设计总体框图

设计总体框图如图所示。

主持人控制输入

图3.1 总体设计方框图 数码管显示模块 选手抢答输入 STC89C52 最小系统 蜂鸣器报警模块

3.3 最小系统模块

STC89C52的最小系统由4个部分组成,晶振电路部分、复位电路部分、P0口上拉电路部分以及程序下载口[5]部分。

3.3.1 单片机最小系统

STC89C52的最小系统如图3.2所示。

黄河科技学院毕业设计说明书 第 5 页

图3.2 单片机最小系统

晶振电路是石英晶体和两个30pF电容组成的;2个小电容帮助振荡器起振,同时电容的大小可以对振荡器的频率进行微调。

单片机多种复位电路,本系统采用上电自复位和按键复位方式。复位电路包括10uF的极性电容C1和10K的电阻R2。

由于STC89C52的P0口是漏极开路输出,而本设计是将P0口用作数码管的数据口,因此在P0口接了一个10K的排阻,使得P0口可以作为普通的I/O口使用,

为了方便调试和下载,还把P30、P31、GND和VCC这4个引脚[6]通过排针引出来作为程序的下载口。

3.3.2 STC89C52简介

宏晶科技公司了许多STC系类的单片机,STC89C52是其中的一款8位单片机,该单片机属于增强型。STC89C52片内提供有512字节的RAM和4K字节的EEPROM;32根I/O口线,比传统51单片机扩充4个引脚,P0口做普通的I/O口必须接上上拉电阻;芯片编程选择机器周期12系统时钟,工作频率从0MHz到40MHz;中断源增加到8,中断优先级增加到4级,从而使中断的优先权排队更加灵活超强抗干扰能力超低功耗;在工作电压上,有3V和5V两种规格;此外,STC89C52还有3个16位定时器[7]。

STC89C52型号单片机:P1.0~P1.7开始信号输入端;P3.7是主位信号输入端;

黄河科技学院毕业设计说明书 第 6 页

P2.0~P2.3用于驱动三极管,控制一边数码管的位选;P0.0~P0.7用于控制一边数码管的段选;

STC89C52各个引脚具体介绍如下:

2个主电源引脚

VCC:是电源输入端,接+5V电源,为Pin40

GND:接地线,为Pin20

外接2个晶振引脚

XTAL1:单片机振荡电路的输入口,为Pin19

XTAL2:单片机振荡电路的输出口,为Pin20

4个控制引脚

RST/VPP:复位引脚,是Pin9

PSEN:部存储器的读选通信号,为Pin29

PROG/ ALE:地址锁存的允许信号,为Pin30

VPP/ EA:使能引脚,为Pin31

32个可编程输入/输出引脚

P0口(Pin39~Pin32):8位双向I/O口线,名称是P0.0~P0.7

P1口(Pin1~Pin8):8位准双向I/O口线,名称是P1.0~P1.7

P2口(Pin21~Pin28):8位准双向I/O口线,名称是P2.0~P2.7

P3口(Pin10~Pin17):8位准双向I/O口线,名称是P3.0~P3.7

STC89C52引脚图如图3.3所示。

黄河科技学院毕业设计说明书 第 7 页

图3.3 STC89C52

3.4 键盘扫描电路

在单片机应用中键盘可分为独立键盘和矩阵键盘两种。矩阵键盘的硬件电路设计复杂,程序算法烦琐,但它占用端口资源少,因此一般用于多按键电路。独立键盘硬件电路简单,程序设计上简单,各键的工作状态互不影响,适用于对硬件电路要求不高的简单电路。键在闭合和断开的瞬间均会产生抖动,若不妥善处理容易引起误动作,必须去抖动。去抖动有用硬件的方法和软件的方法两种,例如,硬件采用滤波电路防抖。在这里采用软件延时的方法来避开抖动。

本设计中采用了独立键盘的方式。独立式键盘电路简单,程序容易。设计中有10个按键,其中8个抢答按键,一个复位按键,另一个是主持人使用的主控按键。同时为了简化电路设计,节约单片机的IO口资源[8],将设置抢答时间和答题时间等这些功能按键复合到了8个选手的抢答按键中。按键的连接图如图3.4所示。

黄河科技学院毕业设计说明书 第 8 页

图3.4 按键电路

3.5 蜂鸣器报警电路

本设计选用的蜂鸣器是有源蜂鸣器,即蜂鸣器内部已经内置了震荡电路,单片机不需要连续发出高低电平来驱动它[9],而只要输出高(或低)电平即可,这大大简化了单片机程序的设计,由于蜂鸣器工作时,需要的电流比较大,单片机的IO口输出的电流又比较小,所以这里利用三极管的开关管功能来控制蜂鸣器发音,本设计选用的三极管型号是PNP三极管S8550,由于选用的是PNP型而单片机上电IO口默认是高电平的,所以上电时蜂鸣器是不会发出鸣叫的。蜂鸣器电路如图3.5所示。

图3.5 蜂鸣器电路

黄河科技学院毕业设计说明书 第 9 页

3.6 数码管显示

数码管是单片机应用系统中常用的输出设备,具有结构简单、价格便宜等特点。在这里我们使用的数码管是7段数码管,它是由7个LED组成的。左边1位数码管用来显示组号,右边2位数码管主要用来显示倒计时。一般情况下,我们用的是静态显示、动态显示两种,根据实际情况本设计采用的是动态显示方法。

数码管还可以分共阳型和共阴型,本设计我采用的是4位共阳数码管;其中A、B、

C、D、E、F、G、DP[10]段分别接到单片机的P00、P01、P02、P03、P04、P05、P06、P07口,由单片机输出的数据来决定段码值,位选码W1、W2、W3、W4分别接到单片机的P2.0、P2.1、P2.2以及P2.3上,由单片机来决定当前该显示的是哪一位。

由于单片机的IO口驱动电流不够,这里还使用了4个NPN的三极管S8050作为开关管,来驱动数码管的位选。

图3.6 数码管显示电路

黄河科技学院毕业设计说明书 第 10 页

4系统软件设计

4.1 总体程序设计

八路抢答器的整体程序从定时器的初始化开始,这里用到了单片机的2个定时器,一个是用于数码管的动态扫描,另一个是用于答题时间的计时。

接着程序开始判断是否进行抢答时间设置,判断“是”则进入抢答时间设置模式,没有则继续下一步判断是否进入答题时间设置,判断“是”则进入答题时间设置模式,没有则跳进入大循环。

进入大循环,该流程是先判断是否有人按键;如果有人按键则判断是谁按下了按键,若是选手则蜂鸣器就会报警,这个选手在还没开始时就抢答了,属于违规行为;若是主持人按下了开始键说明抢答开始,选手可以正式抢答了。如果检测按键没按下,则一直在大循环里面扫描按键。

选手可以抢答了模式时,选手可以正式抢答时,先判断是否有人在抢答的正确时间内按下抢答键了,如果有人在30S内按下了,那么就会通过外部中断系统来禁止其他选手进行抢答,使数码管只显示第一个抢答到组号和这组回答问题时间15S倒计时;若是没有人抢答,则在最后5秒发出滴滴上的报警,并且5秒结束后,蜂鸣器报警,并且数码管显示“----”,表示此轮抢答结束,直至主持人按下复位键K9进行复位,再次进入初始化,进行下一轮的抢答。八路抢答器的整体程序流程图如图4.1所示。

4.2 抢答/答题时间设置

为了简化八路抢答器的硬件电路,通过软件编程将抢答时间和答题时间的设置按键和抢答键合并在一起。设置抢答时间时,先断开抢答器的电源,然后按下选手一的抢答键,然后上电,系统上电检测到按键一被按下了,那么就进入到抢答时间的设置,通过按键七减时间及按键八加时间来设置答题时间的大小。答题时间的设置也基本类似,只 是在上电前按下按键二。

黄河科技学院毕业设计说明书 第 11 页

图4.1 八路抢答器程序流程图

4.3 数码管动态扫描程序

为了简化程序的编译,合理利用单片机的内部资源,因此将数码管的动态扫描程序

黄河科技学院毕业设计说明书 第 12 页

通过定时器来实现。本设计设置的定时器发生中断的时间为2毫秒,每次显示四位中的一位,因此,完成四位数码管的扫描需要8毫秒的时间,即发生四次定时器中断。

黄河科技学院毕业设计说明书 第 13 页

5 仿真与测试分析

5.1 用Keil进行程序编译结果

本设计软件部分采用Keil进行程序编译,Keil编译C语言程序运行如图5.1所示。

图 5.1 Keil编译C语言程序

5.2 Proteus仿真结果

由于实物制作时用的CPU是STC89C52,而仿真用的是AT89C52,STC89C52内部是带有EEPROM的,EEPROM可以实现数据的断电保存,而后者是没有的,本设计需要保存的数据是等待时间和答题时间这两个。所以导致了仿真的程序和实物的程序不同,不同之处就是实物的多了写数据到单片机内部的EEPROM和从单片机内部的EEPROM读数据的部分,其它程序一模一样。由于仿真的CPU内部不带EEPROM,所以默认的等待抢答时间是30秒,答题时间是15秒。

黄河科技学院毕业设计说明书 第 14 页

电源开关按下,板子启动,数码管显示“0000”Proteus仿真图如图5.2所示。

图5.2板子启动仿真图

如果在抢答倒数时间的过程中,有选手进行抢答,数码管的显示抢答选手编号和15秒答题时间。数码管后两位开始15秒倒数,倒数到最后5秒,蜂鸣器就会发出滴滴的响声,提示答题时间即将结束,5秒倒数完,数码管的显示变为“----”,蜂鸣器长鸣,说明本轮答题结束。选手抢答成功仿真图如图5.3所示。

图5.3选手4答题倒计时

黄河科技学院毕业设计说明书 第 15 页

选手可以抢答时倒计时显示仿真图如图5.4所示。

图5.3抢答30秒倒计时仿真图

在主持人还没有按主控制键已经有选手抢答,此为违规抢答。下图为5号选手犯规抢答时仿真图。

图5.5选手违规抢答

黄河科技学院毕业设计说明书 第 16 页

6 电路板的制作与调试

6.1 制作

1.先画出原理图。

2.由Protell99软件生成PCB图。 3.用实验室的油纸把PCB图打印出来。

4.裁剪成一个150mm80mm和两个60mm30mm铜制电路板。

5.把铜制电路板边和油纸对折好,然后放入制版机上进行打印。把打印过的电路板放入三氯化铁溶液中,把电路板上的铜在溶液中腐蚀掉。腐蚀完毕后把电路板用清水清洗一下,晾干。

6.将处理好的板子用细砂纸把布线上的铜擦掉,之后用直径1.0mm钻头钻孔、定位口。

7.按电路板上元器件的位置把元器件插上并且用烙铁进行焊接。 8.焊接完成后进行调试。 焊接注意事项:

1. 三极管的正负极要接正确 2. 电源正负极要接正确 3. 焊点不易过大,容易出现短路 6.2 调试

1. 先观察电路板,看板子上是否出现元器件插反,焊接不牢固,元器件出现裂痕的情况。第一次调试,发现三极管的管脚插反,导致调试不出来。所以就把三极管的正负极调了一下。

2. 第二次调试,还是调试不出来。我用万用表测量发现显示电路部分出现短路现象,通过测量发现焊点太大,导致两个焊点连在一起以至于出现短路现象,通过修改确定没有短路现象。

黄河科技学院毕业设计说明书 第 17 页

3. 第三次调试,还是无法调试出来,我又仔细检查一下电路图,认真分析了电路图的元器件,发现所用的电源电压太小导致无法供应整个电路,之后调整了一下电源电压。

4. 第四次调试,基本没有什么问题,完成了任务。调试结果如下图6.1所示。

图6.1选手违规抢答

黄河科技学院毕业设计说明书 第 18 页

结论

在本毕业设计中,关于这个课题我查阅了好多的相关资料与书籍,指导老师也帮我指导了系统的整体框架以及电路的基本工作原理,使我对电路的整个工作过程有了清晰的了解,使我少走了不少弯路,节约了时间。通过查阅相关的文献资料,也让我更进一步掌握了模电和数电等方面的相关知识,加深对其的理解。

通过这次毕业设计,使我进一步的巩固了以往所学的知识,更加认识到电子技术是一门实践性很强的课程,它与我们的日常生活有着密不可分的关系。并且这次的毕业设计也让我将电子设计方面的知识加以综合,而且很好的巩固了原来模糊不清的知识结构,特别是了解和掌握了单片机的定时器、计数器定时和计数的原理。

在这次设计中使我深刻认识到,理论和实际是有很大差距的,所以有些时候不但要深入地理解,更要积极地去实践,把实践应用到理论中,这样才更有意义。电路设计考验人的灵活性,它传达了你解决问题的自主与逻辑思维能力,是一个设计的核心部分。在整个设计过程中需要花大部分时间在单元电路的掌握、理解和设计上。需要单元电路都可以来自书本,关键就在怎样衔接好各个单元的电路。

经过这次毕业设计我也从中发现自己的很多缺点。在做毕业设计过程中发现自己考虑问题太过简单,自己的专业知识比较薄弱,操作电路应用软件还不是很熟练,希望自己在今后的学习与工作中能把这些不足之处得到改正。

黄河科技学院毕业设计说明书 第 19 页

致谢

在这本课题的设计设计中,我最感谢的就是我的指导老师郭彬。从选题到开题报告、再到写作提纲,整个过程中老师多次询问我的进度,严格把关,一次一次地指出每稿中的具体错误问题,积极引导我如何解决问题,帮我开拓思路。且在设计的过程中,老师给我提供了很多课题资料和提出专业知识的指导,在此我表示衷心感谢。

除此之外,在设计进行当中,我还要感谢我们班的同学,在我没有思路的时候,他们帮助我分析电路功能和电路结构,让我找到了切入点,在此深表感谢。

黄河科技学院毕业设计说明书 第 20 页

参考文献

[1] 康华光.电子技术基础.数字部分(第四版)[M].高等教育出版社.2003. [2] 苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006.

[3] 纪宗南.单片机外围器件使用手册[M].北京:北京航空航天大学出版社. 2002. [4] 余永权.单片机在控制系统中的应用[M].北京:电子工业出版社.2003. [5] 唐俊翟.单片机原理与应用[M].北京:冶金工业出版社.252-267.

[6] 周润景.张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M]航空航天大学出版社.2010.

[7] 许海峰,叶钢.C51单片机项目式教程[M].北京:清华大学出版社,2011. [8] 刘坤.protel 99 SE操作指导与电路设计实例[M].北京:清华大学出版社.2008. [9] 张兰红、邹华.单片机原理及应用.机械工业出版社,2012. [10] 王文峰.数码显示六路抢答器的设计.井冈山师范学院学报,2000. [11] Analog Device.Inc.Loop-Powered4—20mv DAC.Data Sheet.1996.

[12]Hans Peter Limbah.IEEE 1394-das Tor zu Multimedia.Radior-Fernsee-Elektronik, 1997(9).

黄河科技学院毕业设计说明书 第 21 页

附 录

附录A

基于单片机的八路抢答器原理图

附录B

#include

黄河科技学院毕业设计说明书 第 22 页

#include

#define uchar unsigned char #define uint unsigned int

sfr ISP_DATA = 0xe2; // 从Flash读出和要向Flash写入的的数据都放在这个寄存器中 sfr ISP_ADDRH = 0xe3; // 地址寄存器高八位 sfr ISP_ADDRL = 0xe4; // 地址寄存器低八位 sfr ISP_CMD = 0xe5; // 命令寄存器 sfr ISP_TRIG = 0xe6; // 命令触发寄存器 sfr ISP_CONTR = 0xe7; // 命令寄存器 sbit w1 = P2^3; sbit w2 = P2^2; sbit w3 = P2^1; sbit w4 = P2^0; sbit k1 = P1^0; sbit k2 = P1^1; sbit k3 = P1^2; sbit k4 = P1^3; sbit k5 = P1^4; sbit k6 = P1^5; sbit k7 = P1^6; sbit k8 = P1^7; sbit k9 = P3^7; sbit bp = P2^6;

// 定义了数码管第1位的控制脚 // 定义了数码管第2位的控制脚 // 定义了数码管第3位的控制脚 // 定义了数码管第4位的控制脚

// 定义了选手1的抢答按键(可用于进入设置抢答时间) // 定义了选手2的抢答按键(可用于进入设置答题时间) // 定义了选手3的抢答按键 // 定义了选手4的抢答按键 // 定义了选手5的抢答按键 // 定义了选手6的抢答按键

// 定义了选手7的抢答按键(设置时间时,是“减”的功能) // 定义了选手8的抢答按键(设置时间时,是“加”的功能) // 定义了开始抢答的按键 // 定义蜂鸣器的控制引脚

uchar code ShowDig[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; uchar dig[4];

// dig[0]、dig[1]、dig[2]、dig[3]分别代表了四位数码管显示的内容

char gWaitTime,gAnswerTime; char gCount,gSecond; void ISP_Disable() {

ISP_CONTR = 0; ISP_ADDRH = 0; ISP_ADDRL = 0; }

unsigned char Byte_Read(unsigned int add)

黄河科技学院毕业设计说明书 第 23 页

{

ISP_DATA = 0x00; ISP_CONTR = 0x83; ISP_CMD = 0x01;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff);

ISP_TRIG = 0x46; // 对STC89C51系列来说,每次要写入0x46, ISP_TRIG = 0xB9; // 再写入0xB9,ISP/IAP才会生效 _nop_();

ISP_Disable();

return (ISP_DATA); // 将读出的数据作为函数的返回值

}

void Byte_Program(unsigned int add,unsigned char ch) {

ISP_CONTR = 0x83; ISP_CMD = 0x02;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff); ISP_DATA = ch; ISP_TRIG = 0x46; ISP_TRIG = 0xB9; _nop_();

ISP_Disable(); }

void Sector_Erase(unsigned int add) {

ISP_CONTR = 0x83; ISP_CMD = 0x03;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff); ISP_TRIG = 0x46; ISP_TRIG = 0xB9; _nop_();

ISP_Disable(); }

void DelayMs(uint n) {

黄河科技学院毕业设计说明书 第 24 页

uint x,y;

for(x=n;x>0;x--) for(y=110;y>0;y--); }

void TimerInit() {

TMOD = 0x11;// 定时器0用于数码管的动态扫描,定时器1用于秒数的计时 TH0 = (65536-1000)/256; TL0 = (65536-1000)%256; TH1 = (65536-50000)/256; TL1 = (65536-50000)%256; TR0 = 1; ET0 = 1; ET1 = 1; EA = 1;

// 给定时器0的TH0装初值 // 给定时器0的TL0装初值 // 给定时器1的TH1装初值 // 给定时器1的TL1装初值

// 启动定时器0(开始动态扫描数码管) // 定时器0中断使能 // 定时器1中断使能 // 打开总中断

}

void WaitTimeSet(void) {

if(k1==0)// 判断按键1是否有按下,等于0代表按键按下了,则进入抢答时间设置{

// 数码管显示“EEEE” dig[0]=ShowDig[14]; dig[1]=ShowDig[14]; dig[2]=ShowDig[14]; dig[3]=ShowDig[14]; while(!k1);

// 等待按键释放 // 利用延时去抖 // 数码管显示“E EE” // 数码管显示“E 30”

DelayMs(500);

模式

dig[1]=ShowDig[17];

dig[2]=ShowDig[gWaitTime/10];

dig[3]=ShowDig[gWaitTime%10];

while(k1)// 当再次按下按键1时,退出抢答时间设置模式,否则一直扫描“加”、{

if(k8==0)// 判断“加”按键是否被按下 {

“减”按键

黄河科技学院毕业设计说明书 第 25 页

DelayMs(250);// 利用延时去抖

gWaitTime++;// 当前要设置的秒数自加1 if(gWaitTime==100) // 当自加到100时,自动清零

gWaitTime=0;

// 擦除内部EEPROM(写入之前必须先擦除)

// 将新设置的等待时间写入到

Sector_Erase(0x2000); }

Byte_Program(0x2000,gWaitTime);

内部EEPROM的0x2000这个地址

Byte_Program(0x2001,gAnswerTime); // 将答题时间写入到内部dig[2]=ShowDig[gWaitTime/10]; dig[3]=ShowDig[gWaitTime%10];

// 更新数码管的秒数显式(十位) // 更新数码管的秒数显式(个位)

EEPROM的0x2001这个地址

if(k7==0)// 判断“减”按键是否被按下 {

DelayMs(250);// 利用延时去抖

gWaitTime--;// 当前要设置的秒数自减1 if(gWaitTime==-1) // 自减到-1时,自动变成99

gWaitTime=99;

Sector_Erase(0x2000);// 擦除内部EEPROM(写入之前必须先擦除)

Byte_Program(0x2000,gWaitTime);// 将新设置的等待时间写入到内部Byte_Program(0x2001,gAnswerTime); // 将答题时间写入到内部dig[2]=ShowDig[gWaitTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gWaitTime%10];// 更新数码管的秒数显式(个位)

EEPROM的0x2000这个地址 EEPROM的0x2001这个地址

}

} while(!k1); DelayMs(500); } }

void AnswerTimeSet(void) {

if(k2==0)// 判断按键2是否有按下,等于0代表按键按下了,则进入答题时间设置

黄河科技学院毕业设计说明书 第 26 页

模式

{// 数码管显示“FFFF”

dig[0]=ShowDig[15]; dig[1]=ShowDig[15]; dig[2]=ShowDig[15]; dig[3]=ShowDig[15]; while(!k2);// 等待按键释放 DelayMs(500);// 利用延时去抖

dig[1]=ShowDig[17]; // 数码管显示“F FF”

dig[2]=ShowDig[gAnswerTime/10];// 数码管显示“F 15” (15就是要设置答题时dig[3]=ShowDig[gAnswerTime%10];

while(k2)// 当再次按下按键2时,退出抢答时间设置模式,否则一直扫描“加”、{

间,15只是个例子,具体数字视具体情况而定)

“减”按键

if(k8==0) { }

if(k7==0)// 判断“减”按键是否被按下 {

DelayMs(250);// 利用延时去抖

gAnswerTime--;// 当前要设置的秒数自减1

if(gAnswerTime==-1) // 当自减到-1时,自动变成99

gAnswerTime=99; DelayMs(250);// 利用延时去抖

gAnswerTime++;// 当前要设置的秒数自加1

if(gAnswerTime==100) // 当自加到100时,自动清零

gAnswerTime=0;

// 擦除内部EEPROM(写入之前必须先擦除)

Sector_Erase(0x2000);

Byte_Program(0x2000,gWaitTime);// 将等待时间写入到内部EEPROMByte_Program(0x2001,gAnswerTime); // 将新设置的答题时间写入到dig[2]=ShowDig[gAnswerTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gAnswerTime%10];// 更新数码管的秒数显式(个位)

的0x2000这个地址

内部EEPROM的0x2001这个地址

黄河科技学院毕业设计说明书 第 27 页

}

Sector_Erase(0x2000);// 擦除内部EEPROM(写入之前必须先擦除) }

Byte_Program(0x2000,gWaitTime);// 将等待时间写入到内部EEPROMByte_Program(0x2001,gAnswerTime); // 将新设置的答题时间写入到内dig[2]=ShowDig[gAnswerTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gAnswerTime%10];// 更新数码管的秒数显式(个位)

的0x2000这个地址

部EEPROM的0x2001这个地址

while(!k2);// 等待按键释放 DelayMs(500);// 利用延时去抖

}

}

uchar KeyScanf(void) {

if(k1==0)// 选手1按下,返回1

return 1; return 2; return 3; return 4; return 5; return 6; return 7; return 8;

if(k2==0)// 选手2按下,返回2 if(k3==0)// 选手3按下,返回3 if(k4==0)// 选手4按下,返回4 if(k5==0)// 选手5按下,返回5 if(k6==0)// 选手6按下,返回6 if(k7==0)// 选手7按下,返回7 if(k8==0)// 选手8按下,返回8 if(k9==0)// 开始抢答按键按下,返回9 return 9; return 0;

黄河科技学院毕业设计说明书 第 28 页

}

void main(void) {

uchar ret;// ret用于保存按键扫描程序的返回值 TimerInit();

// 新单片机下载程序请打开,因为EEPROM的内部数据读取出来是乱码,下载完第一次之后就可以注释掉这3行代码 // Sector_Erase(0x2000); // Byte_Program(0x2000,30); // Byte_Program(0x2001,15);

gWaitTime = Byte_Read(0x2000);// 读取EEPROM中设置温度上限的报警值,并gAnswerTime = Byte_Read(0x2001);// 读取EEPROM中设置温度下限的报警值,并WaitTimeSet();// 判断是否要进入等待时间设置模式 AnswerTimeSet();// 判断是否要进入答题时间设置模式 dig[0]=ShowDig[0];// 数码管显示“0000” dig[1]=ShowDig[0]; dig[2]=ShowDig[0]; dig[3]=ShowDig[0]; while(1) {

if(KeyScanf()!=0)// 当按键扫描程序的返回值不是0时,代表有按键被按下 {

ret=KeyScanf()

// 保存按键扫描程序的返回值

while(KeyScanf());// 等待按键释放 DelayMs(500);// 利用延时去抖 if(ret==9)// 如果是开始抢答按键被按下 {

TR1=1;// 启动定时器,即开始秒数的倒计时 dig[0]=ShowDig[17]; // 数码管显示“ 00” dig[1]=ShowDig[17];

gSecond=gWaitTime;// 此时,gSecond代表了具体有多少秒需要倒计时 while(!KeyScanf())// 如果一直没有人按键,则一直判断秒数是不是计到 {

赋给全局变量 赋给全局变量

0了

黄河科技学院毕业设计说明书 第 29 页

}

}

if(gSecond==0)// 如果计数到0了,数码管显示“----”,表示此轮抢{ } { }

答结束

dig[2]=ShowDig[16]; dig[3]=ShowDig[16];

else // 如果没有计到0,则数码管一直显示当前倒数的秒数

dig[2]=ShowDig[gSecond/10]; dig[3]=ShowDig[gSecond%10];

ret=KeyScanf();// 保存按键扫描程序的返回值

dig[0]=ShowDig[ret];// 数码管第一位显示抢到答题权限的选手的编号 dig[1]=ShowDig[16]; // 数码管第二位显示“-”

gSecond=gAnswerTime; // gSecond代表了答题的时间(之前是代表抢答while(1) // 一直判断秒数是不是计到0了 { }

if(gSecond==0)// 如果计数到0了,数码管显示“----”,表示此轮抢{ } { }

时间)

答结束

dig[2]=ShowDig[16]; dig[3]=ShowDig[16];

else// 如果没有计到0,则数码管一直显示当前倒数的秒数

dig[2]=ShowDig[gSecond/10]; dig[3]=ShowDig[gSecond%10];

else// 如果不是开始抢答按键被按下,说明是选手按键被按下,此时是违规{

dig[0]=ShowDig[ret];// 数码管第一位显示违规选手的编号

的提前抢答

黄河科技学院毕业设计说明书 第 30 页

dig[1]=ShowDig[16]; // 数码管第二位显示“-” dig[2]=ShowDig[12]; // 数码管第三位显示“C” dig[3]=ShowDig[12]; // 数码管第四位显示“C” bp=0; // 蜂鸣器报警

while(1);

} } } }

void TimerInt0(void) interrupt 1 {

TH0 = (65536-2000)/256;// 给定时器0的TH0装初值 TL0 = (65536-2000)%256;// 给定时器0的TL0装初值 P0=0xff;

if(w4==1)// 数码管第一位显示 { } { } { } {

w4=0; w1=1; P0=dig[0];

else if(w1==1)// 数码管第二位显示

w1=0; w2=1; P0=dig[1];

else if(w2==1)// 数码管第三位显示

w2=0; w3=1; P0=dig[2];

else// 数码管第四位显示

w3=0; w4=1;

黄河科技学院毕业设计说明书 第 31 页

P0=dig[3]; } }

void TimerInt1(void) interrupt 3 { }

TH1 = (65536-50000)/256;// 给定时器1的TL1装初值 TL1 = (65536-50000)%256;// 给定时器1的TH1装初值 gCount++;// gCount每自加1,说明时间经过了50毫米 if(gCount==5)// 5代表250毫米 { } { }

gCount=0;// 将gCount清零,进入下一秒的计时 gSecond--;// 秒数自减1

if((gSecond0))// 当剩最后5秒时,进入这个if语句的代码 { } { }

TR1=0;// 停止定时器 bp=0;// 蜂鸣器响

dig[0]=ShowDig[16]; // 数码管显示“----” dig[1]=ShowDig[16]; dig[2]=ShowDig[16]; dig[3]=ShowDig[16]; bp=0; bp=1;

if(gCount==20)// 20代表计数了1秒

if(gSecond==0)// 当计数到0时

单位代码 01

学 号 1101020024

分 类 号 TN7

密 级

毕业设计说明书

抢答器设计

院(系)名称

专业名称 信息工程学院 电子信息工程

学生姓名 刘十飞

指导教师 郭 彬

2015年05月11日

黄河科技学院毕业设计说明书 第 I 页

抢答器设计

摘 要

当今社会上的竞争愈来愈多,也越来越激烈,评优评先,智力竞赛之类等活动也愈见频繁,因此抢答器的应用与需求也就越来越普遍。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用集成电路制成,价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中无法精确保证比赛的公平、公正、直观。考虑到需设定限时回答和锁定按钮等功能,本系统采用STC89C52单片机为控制核心。本文根据系统功能划分成五个模块,分别为:单片机最小系统模块、电源模块、按键输入模块、显示模块、报警模块。软件设计则采用C语言进行编程。该智能抢答器,通过软件编程控制能显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时,降低了成本、简化了硬件结构,并且抢答公平、误差较小。该智能电路简单、反应快、实用性强等优点,具有较高的推广价值,目前,国内外开始普遍使用。

关键词:单片机STC89C52,抢答器,C语言

黄河科技学院毕业设计说明书 第 II 页

The Design of the Responder

Author: liu shi fei

Tutor: Guo Bin

Abstract

Competition in today's society more and more, also more and more intense, with explicit PingXian, such as quiz activities also increasingly frequent, so the application of the buzzer and the demand is becoming more and more popular. Now on the market some of the buzzer is not only cost is high, the line more, large size, and is very complicated to install and use. Ordinary buzzer, for example, is made from common integrated circuit, high price, single function, cost performance is bad, often easily affected by man-made factors, in the knowledge competition, therefore, cannot accurately to ensure that the game fair and just, and intuitive. Considering the need to set the time to answer and lock button, and other functions, this system adopts the STC89C52 single-chip microcomputer as the control core. According to the system function is divided into five modules, respectively is: single chip microcomputer minimum system module, power module, key input module, display module, alarm module. The software design using C language for programming. The intelligent responder, through software programming control can show the players get the title number, violations of vies to answer first contestant number, vies to answer first time, and problem solving time countdown, reduces the cost, simplifies the hardware structure, and vies to answer first fair and smaller error. The smart circuit is simple, rapid response, strong practicability, etc, is of high popularization value. At present, began to widely used at home and abroad.

Key words: Microcontroller STC89C52, responder, c language

黄河科技学院毕业设计说明书 第 III 页

目 录

1 绪论 ........................................................................................................................................ 1

1.1 课题背景 ...................................................................................................................... 1

1.2 课题研究现状 .............................................................................................................. 1

1.3 目的与意义 .................................................................................................................. 2

1.4 基本的要求 .................................................................................................................. 2

2 总体设计方案论证 ................................................................................................................ 3

3 系统硬件设计 ........................................................................................................................ 4

3.1 系统概述 ...................................................................................................................... 4

3.2 设计总体框图 .............................................................................................................. 4

3.3 最小系统模块 .............................................................................................................. 4

3.3.1 单片机最小系统 ................................................................................................ 4

3.3.2 STC89C52简介 .................................................................................................. 5

3.4 键盘扫描电路 .............................................................................................................. 7

3.5 蜂鸣器报警电路 .......................................................................................................... 8

3.6 数码管显示 .................................................................................................................. 9

4系统软件设计 ....................................................................................................................... 10

4.1 总体程序设计 ............................................................................................................ 10

4.2 抢答/答题时间设置 ................................................................................................... 10

4.3 数码管动态扫描程序 ................................................................................................ 11

5 仿真与测试分析 .................................................................................................................. 13

5.1 用Keil进行程序编译结果 ....................................................................................... 13

5.2 Proteus仿真结果 ........................................................................................................ 13

6 电路板的制作与调试 .......................................................................................................... 16

黄河科技学院毕业设计说明书 第 IV 页

6.1 制作 ............................................................................................................................ 16

6.2 调试 ............................................................................................................................ 16

结论 .......................................................................................................................................... 18

致谢 .......................................................................................................................................... 19

参考文献 .................................................................................................................................. 20

附录 .......................................................................................................................................... 21

附录A ............................................................................................................................... 21

附录B ............................................................................................................................... 21

黄河科技学院毕业设计说明书 第 1 页

1 绪论

1.1 课题背景

随着我国抢答器市场的日新月异的发展,与此相关的核心生产技术的应用和开发研究也愈来愈受业内企业的关注。技术工艺,是衡量一个企业进步的重要标准,是衡量一个企业是否具备市场竞争力的重要依据,更是衡量一个企业是否能不断处于主导地位的重要指标。目前市场上抢答器的不仅种类让人眼花缭乱,功能各种各样,而且价格参差不齐。那么选择一款真正适合的抢答器是至关重要的。

抢答器是一种在现代竞技社会中十分常见的的设备,它能很快地判断出第一个发言的组号。目前抢答器大部分使用数字集成电路与单片机,而且还附加了很多新特点,比如显示抢答组号、显示组号得分等功能。

1.2 课题研究现状

抢答器作为一种电子产品,随着各种智力和知识竞赛的越来越多,已普遍应用。如今市场上抢答器种类多样,功能也各有不同。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用的集成电路制成,有些专用集成价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中,无法精确保证比赛的公平、公正、直观。目前国内外研究人员都加大对智能抢答器的研究和设计,完善抢答器的各项功能。而由于单片机体积小、价格低廉、功能强、使用灵活等优点,在工业控制、智能仪表、航天航空设备、机器人、家电产品等领域得到了广泛应用,尤其在新产品研制、设备的更新改造中具有广泛的应用前景。现在,智能抢答器的在国内外已经开始普遍应用。 随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。由于现在小规模的知识竞赛愈见频繁,所以那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。由于现在小规模的知识竞赛愈见频繁,所以

黄河科技学院毕业设计说明书 第 2 页

那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。因此针对各类赛事活动而设计的无线抢答器也应时出现,一个公认的抢答器不仅可以快速、准确的显示出第一名抢答者编号而且还可以排除人为操作及判断带来的误差,它是由电子逻辑代替人的主观,可以在一定的程度上保证了比赛的公正。

1.3 目的与意义

在设计过程中通过查阅大量资料,掌握了单片机的原理和功能,深刻体会了单片机应用系统硬件和软件的设计方法,锻炼开发单片机应用系统的能力;同时也了解了抢答器结构组成和工作原理,各单元电路的作用及相互影响。所以本研究是在实际应用中比较实用,具有创新性。通过在电路设计过程、结果验证表明用单片机比其他技术的抢答器有许多优点。大多数功能单元都可以通过软件的程序编程在单片机内部实现,得电路简单连接方便,且工作性能可靠,抗干扰能力强。而我所设计的四路抢答器使用的元件普通 ,不仅具有易于购买等优点,而且功能也比较多,使用方便,采用单片机,大大减少布线带来的种种麻烦,所以在国内外已经开始了普遍的应用。

1.4 基本的要求

1)可同时提供最多包括8个人(组)的参加比赛,用8个按钮来表示。

2)在主持人按下“开始”按扭后,开始30秒钟倒计时,选手可以正式开始抢答。如果到没有人按下按钮,最后蜂鸣器就会响。

3)若主持人还没按下“开始”按扭,就有选手(组)按下,是违反规定抢答,蜂鸣器就会响,同时显示该选手的编号。

4)要求具有抢答锁定功能,即某一选手抢到后,其它选手的抢答功能被锁定,无法进行抢答,直至下一轮抢答开始。

5)该抢答器有显示和锁存的功能。也就是说当选手按下按钮,锁存器会锁存对应的组号,并且组号显示在左边LED数码管上,右边开始15秒钟倒计时

6)选手可以正式开始抢答的时间、选手回答问题的时间都是可以设置的。

黄河科技学院毕业设计说明书 第 3 页

2 总体设计方案论证

方案一: 八路抢答器系统的各部分都用中小规模数字集成电路,通过硬件电子元器件搭建电路实现,把机械开关按钮作为控制开关完成抢答输入信号的触发。如我用74LS138编码器等电气器件来实现抢答功能,这个方案不用软件编程,功能实现齐全,可靠性强,但实际搭建起来麻烦,因为需要的元件多,电路复杂,焊板子时也很容易出现错误。

方案二:设计基于可编程的PLC,依据控制系统的工作原理和技术性能系统[2]可分为硬件和软件。在硬件方面,选择特定的元器件来画原理图;在对电路测试,已达到我们要实现的要求,就软件来说,用特定的语言来编程设计。

方案三:系统主要基于单片机作为控制核心的设计。单片机技术比较成熟,体积小价格低,稳定可靠;在外围焊接上了复位电路、上拉电阻、数码管,硬件电路简单,容易调试。单片机算术运算功能强[3],软件编程灵活、自由度大,许多功能都可以通过软件编程来实现,例如选手是否抢答,强大的时间是否正确;可以实现倒计时、选手等显示。

方案分析:方案一由抢答电路模块、定时电路模块、时序控制模块、译码电路模块,显示电路模块、报警电路模块等部分组成,它的功能很齐全,设计的电路也很稳定,但特定的集成成本高。方案三我用单片机为核心控制器件,其可靠性好,结构简单,完善功能很容易,也可以进行扩展,更深的研究。总体来说在许多方面都比方案一和方案二好,例如性能、效率。其功能的实现也比较方案简洁,经济也实用。

综上看来我选用基于单片机的方案,即方案三。

黄河科技学院毕业设计说明书 第 4 页

3 系统硬件设计

3.1 系统概述

整个系统以STC89C52单片机为核心器件,其它个模块围绕着单片机展开。输入部分包括选手的抢答输入和主持人的控制输入2个内容,由于这两个内容都是通过按键控制的,所以这里统一使用普通的轻触开关作为本设计的输入模块包[4],一共包括8个选手输入按键和2个主持人输入按键。输出部分则采用蜂鸣器和一个四位共阳数码管进行声光的输出,这里主要有几个需蜂鸣器发出报警的地方,如最后5秒仍无人抢答、答题剩余最后5秒、抢答时间结束以及答题时间结束等。而数码管则主要用于信息的输出,如可以用来显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时等。

3.2 设计总体框图

设计总体框图如图所示。

主持人控制输入

图3.1 总体设计方框图 数码管显示模块 选手抢答输入 STC89C52 最小系统 蜂鸣器报警模块

3.3 最小系统模块

STC89C52的最小系统由4个部分组成,晶振电路部分、复位电路部分、P0口上拉电路部分以及程序下载口[5]部分。

3.3.1 单片机最小系统

STC89C52的最小系统如图3.2所示。

黄河科技学院毕业设计说明书 第 5 页

图3.2 单片机最小系统

晶振电路是石英晶体和两个30pF电容组成的;2个小电容帮助振荡器起振,同时电容的大小可以对振荡器的频率进行微调。

单片机多种复位电路,本系统采用上电自复位和按键复位方式。复位电路包括10uF的极性电容C1和10K的电阻R2。

由于STC89C52的P0口是漏极开路输出,而本设计是将P0口用作数码管的数据口,因此在P0口接了一个10K的排阻,使得P0口可以作为普通的I/O口使用,

为了方便调试和下载,还把P30、P31、GND和VCC这4个引脚[6]通过排针引出来作为程序的下载口。

3.3.2 STC89C52简介

宏晶科技公司了许多STC系类的单片机,STC89C52是其中的一款8位单片机,该单片机属于增强型。STC89C52片内提供有512字节的RAM和4K字节的EEPROM;32根I/O口线,比传统51单片机扩充4个引脚,P0口做普通的I/O口必须接上上拉电阻;芯片编程选择机器周期12系统时钟,工作频率从0MHz到40MHz;中断源增加到8,中断优先级增加到4级,从而使中断的优先权排队更加灵活超强抗干扰能力超低功耗;在工作电压上,有3V和5V两种规格;此外,STC89C52还有3个16位定时器[7]。

STC89C52型号单片机:P1.0~P1.7开始信号输入端;P3.7是主位信号输入端;

黄河科技学院毕业设计说明书 第 6 页

P2.0~P2.3用于驱动三极管,控制一边数码管的位选;P0.0~P0.7用于控制一边数码管的段选;

STC89C52各个引脚具体介绍如下:

2个主电源引脚

VCC:是电源输入端,接+5V电源,为Pin40

GND:接地线,为Pin20

外接2个晶振引脚

XTAL1:单片机振荡电路的输入口,为Pin19

XTAL2:单片机振荡电路的输出口,为Pin20

4个控制引脚

RST/VPP:复位引脚,是Pin9

PSEN:部存储器的读选通信号,为Pin29

PROG/ ALE:地址锁存的允许信号,为Pin30

VPP/ EA:使能引脚,为Pin31

32个可编程输入/输出引脚

P0口(Pin39~Pin32):8位双向I/O口线,名称是P0.0~P0.7

P1口(Pin1~Pin8):8位准双向I/O口线,名称是P1.0~P1.7

P2口(Pin21~Pin28):8位准双向I/O口线,名称是P2.0~P2.7

P3口(Pin10~Pin17):8位准双向I/O口线,名称是P3.0~P3.7

STC89C52引脚图如图3.3所示。

黄河科技学院毕业设计说明书 第 7 页

图3.3 STC89C52

3.4 键盘扫描电路

在单片机应用中键盘可分为独立键盘和矩阵键盘两种。矩阵键盘的硬件电路设计复杂,程序算法烦琐,但它占用端口资源少,因此一般用于多按键电路。独立键盘硬件电路简单,程序设计上简单,各键的工作状态互不影响,适用于对硬件电路要求不高的简单电路。键在闭合和断开的瞬间均会产生抖动,若不妥善处理容易引起误动作,必须去抖动。去抖动有用硬件的方法和软件的方法两种,例如,硬件采用滤波电路防抖。在这里采用软件延时的方法来避开抖动。

本设计中采用了独立键盘的方式。独立式键盘电路简单,程序容易。设计中有10个按键,其中8个抢答按键,一个复位按键,另一个是主持人使用的主控按键。同时为了简化电路设计,节约单片机的IO口资源[8],将设置抢答时间和答题时间等这些功能按键复合到了8个选手的抢答按键中。按键的连接图如图3.4所示。

黄河科技学院毕业设计说明书 第 8 页

图3.4 按键电路

3.5 蜂鸣器报警电路

本设计选用的蜂鸣器是有源蜂鸣器,即蜂鸣器内部已经内置了震荡电路,单片机不需要连续发出高低电平来驱动它[9],而只要输出高(或低)电平即可,这大大简化了单片机程序的设计,由于蜂鸣器工作时,需要的电流比较大,单片机的IO口输出的电流又比较小,所以这里利用三极管的开关管功能来控制蜂鸣器发音,本设计选用的三极管型号是PNP三极管S8550,由于选用的是PNP型而单片机上电IO口默认是高电平的,所以上电时蜂鸣器是不会发出鸣叫的。蜂鸣器电路如图3.5所示。

图3.5 蜂鸣器电路

黄河科技学院毕业设计说明书 第 9 页

3.6 数码管显示

数码管是单片机应用系统中常用的输出设备,具有结构简单、价格便宜等特点。在这里我们使用的数码管是7段数码管,它是由7个LED组成的。左边1位数码管用来显示组号,右边2位数码管主要用来显示倒计时。一般情况下,我们用的是静态显示、动态显示两种,根据实际情况本设计采用的是动态显示方法。

数码管还可以分共阳型和共阴型,本设计我采用的是4位共阳数码管;其中A、B、

C、D、E、F、G、DP[10]段分别接到单片机的P00、P01、P02、P03、P04、P05、P06、P07口,由单片机输出的数据来决定段码值,位选码W1、W2、W3、W4分别接到单片机的P2.0、P2.1、P2.2以及P2.3上,由单片机来决定当前该显示的是哪一位。

由于单片机的IO口驱动电流不够,这里还使用了4个NPN的三极管S8050作为开关管,来驱动数码管的位选。

图3.6 数码管显示电路

黄河科技学院毕业设计说明书 第 10 页

4系统软件设计

4.1 总体程序设计

八路抢答器的整体程序从定时器的初始化开始,这里用到了单片机的2个定时器,一个是用于数码管的动态扫描,另一个是用于答题时间的计时。

接着程序开始判断是否进行抢答时间设置,判断“是”则进入抢答时间设置模式,没有则继续下一步判断是否进入答题时间设置,判断“是”则进入答题时间设置模式,没有则跳进入大循环。

进入大循环,该流程是先判断是否有人按键;如果有人按键则判断是谁按下了按键,若是选手则蜂鸣器就会报警,这个选手在还没开始时就抢答了,属于违规行为;若是主持人按下了开始键说明抢答开始,选手可以正式抢答了。如果检测按键没按下,则一直在大循环里面扫描按键。

选手可以抢答了模式时,选手可以正式抢答时,先判断是否有人在抢答的正确时间内按下抢答键了,如果有人在30S内按下了,那么就会通过外部中断系统来禁止其他选手进行抢答,使数码管只显示第一个抢答到组号和这组回答问题时间15S倒计时;若是没有人抢答,则在最后5秒发出滴滴上的报警,并且5秒结束后,蜂鸣器报警,并且数码管显示“----”,表示此轮抢答结束,直至主持人按下复位键K9进行复位,再次进入初始化,进行下一轮的抢答。八路抢答器的整体程序流程图如图4.1所示。

4.2 抢答/答题时间设置

为了简化八路抢答器的硬件电路,通过软件编程将抢答时间和答题时间的设置按键和抢答键合并在一起。设置抢答时间时,先断开抢答器的电源,然后按下选手一的抢答键,然后上电,系统上电检测到按键一被按下了,那么就进入到抢答时间的设置,通过按键七减时间及按键八加时间来设置答题时间的大小。答题时间的设置也基本类似,只 是在上电前按下按键二。

黄河科技学院毕业设计说明书 第 11 页

图4.1 八路抢答器程序流程图

4.3 数码管动态扫描程序

为了简化程序的编译,合理利用单片机的内部资源,因此将数码管的动态扫描程序

黄河科技学院毕业设计说明书 第 12 页

通过定时器来实现。本设计设置的定时器发生中断的时间为2毫秒,每次显示四位中的一位,因此,完成四位数码管的扫描需要8毫秒的时间,即发生四次定时器中断。

黄河科技学院毕业设计说明书 第 13 页

5 仿真与测试分析

5.1 用Keil进行程序编译结果

本设计软件部分采用Keil进行程序编译,Keil编译C语言程序运行如图5.1所示。

图 5.1 Keil编译C语言程序

5.2 Proteus仿真结果

由于实物制作时用的CPU是STC89C52,而仿真用的是AT89C52,STC89C52内部是带有EEPROM的,EEPROM可以实现数据的断电保存,而后者是没有的,本设计需要保存的数据是等待时间和答题时间这两个。所以导致了仿真的程序和实物的程序不同,不同之处就是实物的多了写数据到单片机内部的EEPROM和从单片机内部的EEPROM读数据的部分,其它程序一模一样。由于仿真的CPU内部不带EEPROM,所以默认的等待抢答时间是30秒,答题时间是15秒。

黄河科技学院毕业设计说明书 第 14 页

电源开关按下,板子启动,数码管显示“0000”Proteus仿真图如图5.2所示。

图5.2板子启动仿真图

如果在抢答倒数时间的过程中,有选手进行抢答,数码管的显示抢答选手编号和15秒答题时间。数码管后两位开始15秒倒数,倒数到最后5秒,蜂鸣器就会发出滴滴的响声,提示答题时间即将结束,5秒倒数完,数码管的显示变为“----”,蜂鸣器长鸣,说明本轮答题结束。选手抢答成功仿真图如图5.3所示。

图5.3选手4答题倒计时

黄河科技学院毕业设计说明书 第 15 页

选手可以抢答时倒计时显示仿真图如图5.4所示。

图5.3抢答30秒倒计时仿真图

在主持人还没有按主控制键已经有选手抢答,此为违规抢答。下图为5号选手犯规抢答时仿真图。

图5.5选手违规抢答

黄河科技学院毕业设计说明书 第 16 页

6 电路板的制作与调试

6.1 制作

1.先画出原理图。

2.由Protell99软件生成PCB图。 3.用实验室的油纸把PCB图打印出来。

4.裁剪成一个150mm80mm和两个60mm30mm铜制电路板。

5.把铜制电路板边和油纸对折好,然后放入制版机上进行打印。把打印过的电路板放入三氯化铁溶液中,把电路板上的铜在溶液中腐蚀掉。腐蚀完毕后把电路板用清水清洗一下,晾干。

6.将处理好的板子用细砂纸把布线上的铜擦掉,之后用直径1.0mm钻头钻孔、定位口。

7.按电路板上元器件的位置把元器件插上并且用烙铁进行焊接。 8.焊接完成后进行调试。 焊接注意事项:

1. 三极管的正负极要接正确 2. 电源正负极要接正确 3. 焊点不易过大,容易出现短路 6.2 调试

1. 先观察电路板,看板子上是否出现元器件插反,焊接不牢固,元器件出现裂痕的情况。第一次调试,发现三极管的管脚插反,导致调试不出来。所以就把三极管的正负极调了一下。

2. 第二次调试,还是调试不出来。我用万用表测量发现显示电路部分出现短路现象,通过测量发现焊点太大,导致两个焊点连在一起以至于出现短路现象,通过修改确定没有短路现象。

黄河科技学院毕业设计说明书 第 17 页

3. 第三次调试,还是无法调试出来,我又仔细检查一下电路图,认真分析了电路图的元器件,发现所用的电源电压太小导致无法供应整个电路,之后调整了一下电源电压。

4. 第四次调试,基本没有什么问题,完成了任务。调试结果如下图6.1所示。

图6.1选手违规抢答

黄河科技学院毕业设计说明书 第 18 页

结论

在本毕业设计中,关于这个课题我查阅了好多的相关资料与书籍,指导老师也帮我指导了系统的整体框架以及电路的基本工作原理,使我对电路的整个工作过程有了清晰的了解,使我少走了不少弯路,节约了时间。通过查阅相关的文献资料,也让我更进一步掌握了模电和数电等方面的相关知识,加深对其的理解。

通过这次毕业设计,使我进一步的巩固了以往所学的知识,更加认识到电子技术是一门实践性很强的课程,它与我们的日常生活有着密不可分的关系。并且这次的毕业设计也让我将电子设计方面的知识加以综合,而且很好的巩固了原来模糊不清的知识结构,特别是了解和掌握了单片机的定时器、计数器定时和计数的原理。

在这次设计中使我深刻认识到,理论和实际是有很大差距的,所以有些时候不但要深入地理解,更要积极地去实践,把实践应用到理论中,这样才更有意义。电路设计考验人的灵活性,它传达了你解决问题的自主与逻辑思维能力,是一个设计的核心部分。在整个设计过程中需要花大部分时间在单元电路的掌握、理解和设计上。需要单元电路都可以来自书本,关键就在怎样衔接好各个单元的电路。

经过这次毕业设计我也从中发现自己的很多缺点。在做毕业设计过程中发现自己考虑问题太过简单,自己的专业知识比较薄弱,操作电路应用软件还不是很熟练,希望自己在今后的学习与工作中能把这些不足之处得到改正。

黄河科技学院毕业设计说明书 第 19 页

致谢

在这本课题的设计设计中,我最感谢的就是我的指导老师郭彬。从选题到开题报告、再到写作提纲,整个过程中老师多次询问我的进度,严格把关,一次一次地指出每稿中的具体错误问题,积极引导我如何解决问题,帮我开拓思路。且在设计的过程中,老师给我提供了很多课题资料和提出专业知识的指导,在此我表示衷心感谢。

除此之外,在设计进行当中,我还要感谢我们班的同学,在我没有思路的时候,他们帮助我分析电路功能和电路结构,让我找到了切入点,在此深表感谢。

黄河科技学院毕业设计说明书 第 20 页

参考文献

[1] 康华光.电子技术基础.数字部分(第四版)[M].高等教育出版社.2003. [2] 苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006.

[3] 纪宗南.单片机外围器件使用手册[M].北京:北京航空航天大学出版社. 2002. [4] 余永权.单片机在控制系统中的应用[M].北京:电子工业出版社.2003. [5] 唐俊翟.单片机原理与应用[M].北京:冶金工业出版社.252-267.

[6] 周润景.张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M]航空航天大学出版社.2010.

[7] 许海峰,叶钢.C51单片机项目式教程[M].北京:清华大学出版社,2011. [8] 刘坤.protel 99 SE操作指导与电路设计实例[M].北京:清华大学出版社.2008. [9] 张兰红、邹华.单片机原理及应用.机械工业出版社,2012. [10] 王文峰.数码显示六路抢答器的设计.井冈山师范学院学报,2000. [11] Analog Device.Inc.Loop-Powered4—20mv DAC.Data Sheet.1996.

[12]Hans Peter Limbah.IEEE 1394-das Tor zu Multimedia.Radior-Fernsee-Elektronik, 1997(9).

黄河科技学院毕业设计说明书 第 21 页

附 录

附录A

基于单片机的八路抢答器原理图

附录B

#include

黄河科技学院毕业设计说明书 第 22 页

#include

#define uchar unsigned char #define uint unsigned int

sfr ISP_DATA = 0xe2; // 从Flash读出和要向Flash写入的的数据都放在这个寄存器中 sfr ISP_ADDRH = 0xe3; // 地址寄存器高八位 sfr ISP_ADDRL = 0xe4; // 地址寄存器低八位 sfr ISP_CMD = 0xe5; // 命令寄存器 sfr ISP_TRIG = 0xe6; // 命令触发寄存器 sfr ISP_CONTR = 0xe7; // 命令寄存器 sbit w1 = P2^3; sbit w2 = P2^2; sbit w3 = P2^1; sbit w4 = P2^0; sbit k1 = P1^0; sbit k2 = P1^1; sbit k3 = P1^2; sbit k4 = P1^3; sbit k5 = P1^4; sbit k6 = P1^5; sbit k7 = P1^6; sbit k8 = P1^7; sbit k9 = P3^7; sbit bp = P2^6;

// 定义了数码管第1位的控制脚 // 定义了数码管第2位的控制脚 // 定义了数码管第3位的控制脚 // 定义了数码管第4位的控制脚

// 定义了选手1的抢答按键(可用于进入设置抢答时间) // 定义了选手2的抢答按键(可用于进入设置答题时间) // 定义了选手3的抢答按键 // 定义了选手4的抢答按键 // 定义了选手5的抢答按键 // 定义了选手6的抢答按键

// 定义了选手7的抢答按键(设置时间时,是“减”的功能) // 定义了选手8的抢答按键(设置时间时,是“加”的功能) // 定义了开始抢答的按键 // 定义蜂鸣器的控制引脚

uchar code ShowDig[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff}; uchar dig[4];

// dig[0]、dig[1]、dig[2]、dig[3]分别代表了四位数码管显示的内容

char gWaitTime,gAnswerTime; char gCount,gSecond; void ISP_Disable() {

ISP_CONTR = 0; ISP_ADDRH = 0; ISP_ADDRL = 0; }

unsigned char Byte_Read(unsigned int add)

黄河科技学院毕业设计说明书 第 23 页

{

ISP_DATA = 0x00; ISP_CONTR = 0x83; ISP_CMD = 0x01;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff);

ISP_TRIG = 0x46; // 对STC89C51系列来说,每次要写入0x46, ISP_TRIG = 0xB9; // 再写入0xB9,ISP/IAP才会生效 _nop_();

ISP_Disable();

return (ISP_DATA); // 将读出的数据作为函数的返回值

}

void Byte_Program(unsigned int add,unsigned char ch) {

ISP_CONTR = 0x83; ISP_CMD = 0x02;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff); ISP_DATA = ch; ISP_TRIG = 0x46; ISP_TRIG = 0xB9; _nop_();

ISP_Disable(); }

void Sector_Erase(unsigned int add) {

ISP_CONTR = 0x83; ISP_CMD = 0x03;

ISP_ADDRH = (unsigned char)(add>>8); ISP_ADDRL = (unsigned char)(add&0xff); ISP_TRIG = 0x46; ISP_TRIG = 0xB9; _nop_();

ISP_Disable(); }

void DelayMs(uint n) {

黄河科技学院毕业设计说明书 第 24 页

uint x,y;

for(x=n;x>0;x--) for(y=110;y>0;y--); }

void TimerInit() {

TMOD = 0x11;// 定时器0用于数码管的动态扫描,定时器1用于秒数的计时 TH0 = (65536-1000)/256; TL0 = (65536-1000)%256; TH1 = (65536-50000)/256; TL1 = (65536-50000)%256; TR0 = 1; ET0 = 1; ET1 = 1; EA = 1;

// 给定时器0的TH0装初值 // 给定时器0的TL0装初值 // 给定时器1的TH1装初值 // 给定时器1的TL1装初值

// 启动定时器0(开始动态扫描数码管) // 定时器0中断使能 // 定时器1中断使能 // 打开总中断

}

void WaitTimeSet(void) {

if(k1==0)// 判断按键1是否有按下,等于0代表按键按下了,则进入抢答时间设置{

// 数码管显示“EEEE” dig[0]=ShowDig[14]; dig[1]=ShowDig[14]; dig[2]=ShowDig[14]; dig[3]=ShowDig[14]; while(!k1);

// 等待按键释放 // 利用延时去抖 // 数码管显示“E EE” // 数码管显示“E 30”

DelayMs(500);

模式

dig[1]=ShowDig[17];

dig[2]=ShowDig[gWaitTime/10];

dig[3]=ShowDig[gWaitTime%10];

while(k1)// 当再次按下按键1时,退出抢答时间设置模式,否则一直扫描“加”、{

if(k8==0)// 判断“加”按键是否被按下 {

“减”按键

黄河科技学院毕业设计说明书 第 25 页

DelayMs(250);// 利用延时去抖

gWaitTime++;// 当前要设置的秒数自加1 if(gWaitTime==100) // 当自加到100时,自动清零

gWaitTime=0;

// 擦除内部EEPROM(写入之前必须先擦除)

// 将新设置的等待时间写入到

Sector_Erase(0x2000); }

Byte_Program(0x2000,gWaitTime);

内部EEPROM的0x2000这个地址

Byte_Program(0x2001,gAnswerTime); // 将答题时间写入到内部dig[2]=ShowDig[gWaitTime/10]; dig[3]=ShowDig[gWaitTime%10];

// 更新数码管的秒数显式(十位) // 更新数码管的秒数显式(个位)

EEPROM的0x2001这个地址

if(k7==0)// 判断“减”按键是否被按下 {

DelayMs(250);// 利用延时去抖

gWaitTime--;// 当前要设置的秒数自减1 if(gWaitTime==-1) // 自减到-1时,自动变成99

gWaitTime=99;

Sector_Erase(0x2000);// 擦除内部EEPROM(写入之前必须先擦除)

Byte_Program(0x2000,gWaitTime);// 将新设置的等待时间写入到内部Byte_Program(0x2001,gAnswerTime); // 将答题时间写入到内部dig[2]=ShowDig[gWaitTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gWaitTime%10];// 更新数码管的秒数显式(个位)

EEPROM的0x2000这个地址 EEPROM的0x2001这个地址

}

} while(!k1); DelayMs(500); } }

void AnswerTimeSet(void) {

if(k2==0)// 判断按键2是否有按下,等于0代表按键按下了,则进入答题时间设置

黄河科技学院毕业设计说明书 第 26 页

模式

{// 数码管显示“FFFF”

dig[0]=ShowDig[15]; dig[1]=ShowDig[15]; dig[2]=ShowDig[15]; dig[3]=ShowDig[15]; while(!k2);// 等待按键释放 DelayMs(500);// 利用延时去抖

dig[1]=ShowDig[17]; // 数码管显示“F FF”

dig[2]=ShowDig[gAnswerTime/10];// 数码管显示“F 15” (15就是要设置答题时dig[3]=ShowDig[gAnswerTime%10];

while(k2)// 当再次按下按键2时,退出抢答时间设置模式,否则一直扫描“加”、{

间,15只是个例子,具体数字视具体情况而定)

“减”按键

if(k8==0) { }

if(k7==0)// 判断“减”按键是否被按下 {

DelayMs(250);// 利用延时去抖

gAnswerTime--;// 当前要设置的秒数自减1

if(gAnswerTime==-1) // 当自减到-1时,自动变成99

gAnswerTime=99; DelayMs(250);// 利用延时去抖

gAnswerTime++;// 当前要设置的秒数自加1

if(gAnswerTime==100) // 当自加到100时,自动清零

gAnswerTime=0;

// 擦除内部EEPROM(写入之前必须先擦除)

Sector_Erase(0x2000);

Byte_Program(0x2000,gWaitTime);// 将等待时间写入到内部EEPROMByte_Program(0x2001,gAnswerTime); // 将新设置的答题时间写入到dig[2]=ShowDig[gAnswerTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gAnswerTime%10];// 更新数码管的秒数显式(个位)

的0x2000这个地址

内部EEPROM的0x2001这个地址

黄河科技学院毕业设计说明书 第 27 页

}

Sector_Erase(0x2000);// 擦除内部EEPROM(写入之前必须先擦除) }

Byte_Program(0x2000,gWaitTime);// 将等待时间写入到内部EEPROMByte_Program(0x2001,gAnswerTime); // 将新设置的答题时间写入到内dig[2]=ShowDig[gAnswerTime/10];// 更新数码管的秒数显式(十位) dig[3]=ShowDig[gAnswerTime%10];// 更新数码管的秒数显式(个位)

的0x2000这个地址

部EEPROM的0x2001这个地址

while(!k2);// 等待按键释放 DelayMs(500);// 利用延时去抖

}

}

uchar KeyScanf(void) {

if(k1==0)// 选手1按下,返回1

return 1; return 2; return 3; return 4; return 5; return 6; return 7; return 8;

if(k2==0)// 选手2按下,返回2 if(k3==0)// 选手3按下,返回3 if(k4==0)// 选手4按下,返回4 if(k5==0)// 选手5按下,返回5 if(k6==0)// 选手6按下,返回6 if(k7==0)// 选手7按下,返回7 if(k8==0)// 选手8按下,返回8 if(k9==0)// 开始抢答按键按下,返回9 return 9; return 0;

黄河科技学院毕业设计说明书 第 28 页

}

void main(void) {

uchar ret;// ret用于保存按键扫描程序的返回值 TimerInit();

// 新单片机下载程序请打开,因为EEPROM的内部数据读取出来是乱码,下载完第一次之后就可以注释掉这3行代码 // Sector_Erase(0x2000); // Byte_Program(0x2000,30); // Byte_Program(0x2001,15);

gWaitTime = Byte_Read(0x2000);// 读取EEPROM中设置温度上限的报警值,并gAnswerTime = Byte_Read(0x2001);// 读取EEPROM中设置温度下限的报警值,并WaitTimeSet();// 判断是否要进入等待时间设置模式 AnswerTimeSet();// 判断是否要进入答题时间设置模式 dig[0]=ShowDig[0];// 数码管显示“0000” dig[1]=ShowDig[0]; dig[2]=ShowDig[0]; dig[3]=ShowDig[0]; while(1) {

if(KeyScanf()!=0)// 当按键扫描程序的返回值不是0时,代表有按键被按下 {

ret=KeyScanf()

// 保存按键扫描程序的返回值

while(KeyScanf());// 等待按键释放 DelayMs(500);// 利用延时去抖 if(ret==9)// 如果是开始抢答按键被按下 {

TR1=1;// 启动定时器,即开始秒数的倒计时 dig[0]=ShowDig[17]; // 数码管显示“ 00” dig[1]=ShowDig[17];

gSecond=gWaitTime;// 此时,gSecond代表了具体有多少秒需要倒计时 while(!KeyScanf())// 如果一直没有人按键,则一直判断秒数是不是计到 {

赋给全局变量 赋给全局变量

0了

黄河科技学院毕业设计说明书 第 29 页

}

}

if(gSecond==0)// 如果计数到0了,数码管显示“----”,表示此轮抢{ } { }

答结束

dig[2]=ShowDig[16]; dig[3]=ShowDig[16];

else // 如果没有计到0,则数码管一直显示当前倒数的秒数

dig[2]=ShowDig[gSecond/10]; dig[3]=ShowDig[gSecond%10];

ret=KeyScanf();// 保存按键扫描程序的返回值

dig[0]=ShowDig[ret];// 数码管第一位显示抢到答题权限的选手的编号 dig[1]=ShowDig[16]; // 数码管第二位显示“-”

gSecond=gAnswerTime; // gSecond代表了答题的时间(之前是代表抢答while(1) // 一直判断秒数是不是计到0了 { }

if(gSecond==0)// 如果计数到0了,数码管显示“----”,表示此轮抢{ } { }

时间)

答结束

dig[2]=ShowDig[16]; dig[3]=ShowDig[16];

else// 如果没有计到0,则数码管一直显示当前倒数的秒数

dig[2]=ShowDig[gSecond/10]; dig[3]=ShowDig[gSecond%10];

else// 如果不是开始抢答按键被按下,说明是选手按键被按下,此时是违规{

dig[0]=ShowDig[ret];// 数码管第一位显示违规选手的编号

的提前抢答

黄河科技学院毕业设计说明书 第 30 页

dig[1]=ShowDig[16]; // 数码管第二位显示“-” dig[2]=ShowDig[12]; // 数码管第三位显示“C” dig[3]=ShowDig[12]; // 数码管第四位显示“C” bp=0; // 蜂鸣器报警

while(1);

} } } }

void TimerInt0(void) interrupt 1 {

TH0 = (65536-2000)/256;// 给定时器0的TH0装初值 TL0 = (65536-2000)%256;// 给定时器0的TL0装初值 P0=0xff;

if(w4==1)// 数码管第一位显示 { } { } { } {

w4=0; w1=1; P0=dig[0];

else if(w1==1)// 数码管第二位显示

w1=0; w2=1; P0=dig[1];

else if(w2==1)// 数码管第三位显示

w2=0; w3=1; P0=dig[2];

else// 数码管第四位显示

w3=0; w4=1;

黄河科技学院毕业设计说明书 第 31 页

P0=dig[3]; } }

void TimerInt1(void) interrupt 3 { }

TH1 = (65536-50000)/256;// 给定时器1的TL1装初值 TL1 = (65536-50000)%256;// 给定时器1的TH1装初值 gCount++;// gCount每自加1,说明时间经过了50毫米 if(gCount==5)// 5代表250毫米 { } { }

gCount=0;// 将gCount清零,进入下一秒的计时 gSecond--;// 秒数自减1

if((gSecond0))// 当剩最后5秒时,进入这个if语句的代码 { } { }

TR1=0;// 停止定时器 bp=0;// 蜂鸣器响

dig[0]=ShowDig[16]; // 数码管显示“----” dig[1]=ShowDig[16]; dig[2]=ShowDig[16]; dig[3]=ShowDig[16]; bp=0; bp=1;

if(gCount==20)// 20代表计数了1秒

if(gSecond==0)// 当计数到0时


相关文章

  • 八路抢答器课程设计说明书
  • 2010级EDA技术 八路智力竞赛抢答器 学生姓名 李文海 学 号 [1**********]9 所属学院 理学院 专 业 电子信息工程 班 级 二班 日 期 2012/11/29 一.设计题目 八路智力竞赛抢答器 二.课程设计目的 1.培 ...查看


  • _八路智力抢答器
  • 题目 八路智力抢答器的设计 班级 机电09-2班 学号__ ______ 姓名______________ 指导__ _____ 时间 2010年12月 电工电子技术课程设计任务书 目录 1. 总体方案与原理说明. . . . . . . ...查看


  • 八路集成电路智力竞赛抢答器
  • 长 沙 学 院 数电课程设计说明书 题系 ( 部 目 ) 数字电子技术课程设计 电子与通信工程系 光电信息工程 *** ***** *** 2012.6.11 专业(班级) 姓学指起 名 号 导止 教日 师 期 2010级光电信息工程专业课 ...查看


  • 八路数显抢答器研究与设计
  • 实验八 八路数显抢答器研究和设计 综合性实验 1.掌握可定时的八路数显抢答器的工作原理及其设计方法: 2.进一步熟悉74系列常用中规模集成芯片的应用,提高对硬件电路的分析能力: 3.进一步熟悉Qartus软件的使用: 4.学习较复杂的数字系 ...查看


  • 2013八路抢答器课程设计
  • 课程设计报告 课程名称: 微机原理课程设计 题 目: 八路抢答器 学 院: 环境与化学工程 系:过程装备与测控工程 专 业: 测控技术与仪器 班 级: 测仪111 学 号: 学生姓名: 起讫日期:指导教师: 杨俊清.杨大勇 .熊剑 摘要 目 ...查看


  • 八路抢答器 1
  • 2016届课程论文 <单片机原理及应用> 课程设计 <八路抢答器> 学生姓名 王佳 学 号 所属学院 信息工程学院 专 业 计算机科学与技术 班 级 16-4班 指导教师 孟洪兵 塔里木大学教务处 目录 摘要 ... ...查看


  • 八路抢答器说明书
  • 烟台大学 单片机 课程设计说明书 课题: 八路抢答器 学生姓名 学号:[1**********]8 院系:机电汽车工程学院 专业 指导老师 同组成员 组长 2012 年 06 月 07 日 目录 1 概述.................. ...查看


  • 8路抢答器设计八路智力竞赛抢答器
  • 1 前言 1.1主要功能介绍 (1)抢答器最多可供8名选手参赛,编号为1~8号,各队分别用一个按钮(分别为S1~S8)控制,并设置一个系统清零和抢答控制开关S,该开关由主持人控制. (2)抢答器具有数据锁存功能,并将锁存数据用LED数码管显 ...查看


  • 八路抢答器实训报告
  • 八路抢答器实训报告 姓 名:靳冬雪 专 业:电子信息工程 班 级:电子1101本 学 号:[1**********]8 指导教师:刘芹 时间:2013.6.29 前 言 八路抢答器是一种优先选择的数码器,它采用的是CD4511集成芯片来实现 ...查看


热门内容