毕业设计(论文)八路抢答器设计说明书

上传人:1777****777 文档编号:36020330 上传时间:2021-10-29 格式:DOC 页数:37 大小:965.50KB
收藏 版权申诉 举报 下载
毕业设计(论文)八路抢答器设计说明书_第1页
第1页 / 共37页
毕业设计(论文)八路抢答器设计说明书_第2页
第2页 / 共37页
毕业设计(论文)八路抢答器设计说明书_第3页
第3页 / 共37页
资源描述:

《毕业设计(论文)八路抢答器设计说明书》由会员分享,可在线阅读,更多相关《毕业设计(论文)八路抢答器设计说明书(37页珍藏版)》请在装配图网上搜索。

1、 黄河科技学院毕业设计说明书 第 32 页单位代码 01 学 号 1101020024 分 类 号 TN7 密 级 毕业设计说明书抢答器设计 院(系)名称信息工程学院 专业名称电子信息工程 学生姓名 指导教师 2015年05月11日抢答器设计摘 要当今社会上的竞争愈来愈多,也越来越激烈,评优评先,智力竞赛之类等活动也愈见频繁,因此抢答器的应用与需求也就越来越普遍。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用集成电路制成,价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中无法精确保证比赛的公平、公正、直观。考

2、虑到需设定限时回答和锁定按钮等功能,本系统采用STC89C52单片机为控制核心。本文根据系统功能划分成五个模块,分别为:单片机最小系统模块、电源模块、按键输入模块、显示模块、报警模块。软件设计则采用C语言进行编程。该智能抢答器,通过软件编程控制能显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时,降低了成本、简化了硬件结构,并且抢答公平、误差较小。该智能电路简单、反应快、实用性强等优点,具有较高的推广价值,目前,国内外开始普遍使用。关键词:单片机STC89C52,抢答器,C语言The Design of the ResponderAuthor: liu shi feiTu

3、tor: Guo Bin AbstractCompetition in todays 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 onl

4、y 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, canno

5、t 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, respec

6、tively 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 vie

7、s 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

8、 value. At present, began to widely used at home and abroad. Key words: Microcontroller STC89C52, responder, c language 目 录1 绪论11.1 课题背景11.2 课题研究现状11.3 目的与意义21.4 基本的要求22 总体设计方案论证33 系统硬件设计43.1 系统概述43.2 设计总体框图43.3 最小系统模块43.3.1 单片机最小系统43.3.2 STC89C52简介53.4 键盘扫描电路73.5 蜂鸣器报警电路83.6 数码管显示94系统软件设计104.1 总体程序

9、设计104.2 抢答/答题时间设置114.3 数码管动态扫描程序125 仿真与测试分析135.1 用Keil进行程序编译结果135.2 Proteus仿真结果136 电路板的制作与调试166.1 制作166.2 调试16结论18致谢19参考文献20附录21附录A21附录B211 绪论1.1 课题背景随着我国抢答器市场的日新月异的发展,与此相关的核心生产技术的应用和开发研究也愈来愈受业内企业的关注。技术工艺,是衡量一个企业进步的重要标准,是衡量一个企业是否具备市场竞争力的重要依据,更是衡量一个企业是否能不断处于主导地位的重要指标。目前市场上抢答器的不仅种类让人眼花缭乱,功能各种各样,而且价格参差

10、不齐。那么选择一款真正适合的抢答器是至关重要的。抢答器是一种在现代竞技社会中十分常见的的设备,它能很快地判断出第一个发言的组号。目前抢答器大部分使用数字集成电路与单片机,而且还附加了很多新特点,比如显示抢答组号、显示组号得分等功能。1.2 课题研究现状抢答器作为一种电子产品,随着各种智力和知识竞赛的越来越多,已普遍应用。如今市场上抢答器种类多样,功能也各有不同。而现在市场上的一些抢答器不仅成本高、线路多、体型大,而且安装和使用起来都很复杂。比如普通抢答器,是由通用的集成电路制成,有些专用集成价格高、功能单一、性价比较差,往往很容易受人为因素的影响,因此在知识竞赛活动中,无法精确保证比赛的公平、

11、公正、直观。目前国内外研究人员都加大对智能抢答器的研究和设计,完善抢答器的各项功能。而由于单片机体积小、价格低廉、功能强、使用灵活等优点,在工业控制、智能仪表、航天航空设备、机器人、家电产品等领域得到了广泛应用,尤其在新产品研制、设备的更新改造中具有广泛的应用前景。现在,智能抢答器的在国内外已经开始普遍应用。随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。由于现在小规模的知识竞赛愈见频繁,所以那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。随着科技的进步,现在的抢答器也在不断向数字化,智能化的方向发展,所以抢答器的成本必然被大大地提高。

12、由于现在小规模的知识竞赛愈见频繁,所以那些使用起来方便,物惠价廉的小型抢答器必然越来越受欢迎。因此针对各类赛事活动而设计的无线抢答器也应时出现,一个公认的抢答器不仅可以快速、准确的显示出第一名抢答者编号而且还可以排除人为操作及判断带来的误差,它是由电子逻辑代替人的主观,可以在一定的程度上保证了比赛的公正。1.3 目的与意义在设计过程中通过查阅大量资料,掌握了单片机的原理和功能,深刻体会了单片机应用系统硬件和软件的设计方法,锻炼开发单片机应用系统的能力;同时也了解了抢答器结构组成和工作原理,各单元电路的作用及相互影响。所以本研究是在实际应用中比较实用,具有创新性。通过在电路设计过程、结果验证表明

13、用单片机比其他技术的抢答器有许多优点。大多数功能单元都可以通过软件的程序编程在单片机内部实现,得电路简单连接方便,且工作性能可靠,抗干扰能力强。而我所设计的四路抢答器使用的元件普通 ,不仅具有易于购买等优点,而且功能也比较多,使用方便,采用单片机,大大减少布线带来的种种麻烦,所以在国内外已经开始了普遍的应用。1.4 基本的要求1)可同时提供最多包括8个人(组)的参加比赛,用8个按钮来表示。2)在主持人按下“开始”按扭后,开始30秒钟倒计时,选手可以正式开始抢答。如果到没有人按下按钮,最后蜂鸣器就会响。3)若主持人还没按下“开始”按扭,就有选手(组)按下,是违反规定抢答,蜂鸣器就会响,同时显示该

14、选手的编号。4)要求具有抢答锁定功能,即某一选手抢到后,其它选手的抢答功能被锁定,无法进行抢答,直至下一轮抢答开始。5)该抢答器有显示和锁存的功能。也就是说当选手按下按钮,锁存器会锁存对应的组号,并且组号显示在左边LED数码管上,右边开始15秒钟倒计时6)选手可以正式开始抢答的时间、选手回答问题的时间都是可以设置的。2 总体设计方案论证方案一: 八路抢答器系统的各部分都用中小规模数字集成电路,通过硬件电子元器件搭建电路实现,把机械开关按钮作为控制开关完成抢答输入信号的触发。如我用74LS138编码器等电气器件来实现抢答功能,这个方案不用软件编程,功能实现齐全,可靠性强,但实际搭建起来麻烦,因为

15、需要的元件多,电路复杂,焊板子时也很容易出现错误。方案二:设计基于可编程的PLC,依据控制系统的工作原理和技术性能系统2可分为硬件和软件。在硬件方面,选择特定的元器件来画原理图;在对电路测试,已达到我们要实现的要求,就软件来说,用特定的语言来编程设计。方案三:系统主要基于单片机作为控制核心的设计。单片机技术比较成熟,体积小价格低,稳定可靠;在外围焊接上了复位电路、上拉电阻、数码管,硬件电路简单,容易调试。单片机算术运算功能强3,软件编程灵活、自由度大,许多功能都可以通过软件编程来实现,例如选手是否抢答,强大的时间是否正确;可以实现倒计时、选手等显示。方案分析:方案一由抢答电路模块、定时电路模块

16、、时序控制模块、译码电路模块,显示电路模块、报警电路模块等部分组成,它的功能很齐全,设计的电路也很稳定,但特定的集成成本高。方案三我用单片机为核心控制器件,其可靠性好,结构简单,完善功能很容易,也可以进行扩展,更深的研究。总体来说在许多方面都比方案一和方案二好,例如性能、效率。其功能的实现也比较方案简洁,经济也实用。综上看来我选用基于单片机的方案,即方案三。3 系统硬件设计3.1 系统概述整个系统以STC89C52单片机为核心器件,其它个模块围绕着单片机展开。输入部分包括选手的抢答输入和主持人的控制输入2个内容,由于这两个内容都是通过按键控制的,所以这里统一使用普通的轻触开关作为本设计的输入模

17、块包4,一共包括8个选手输入按键和2个主持人输入按键。输出部分则采用蜂鸣器和一个四位共阳数码管进行声光的输出,这里主要有几个需蜂鸣器发出报警的地方,如最后5秒仍无人抢答、答题剩余最后5秒、抢答时间结束以及答题时间结束等。而数码管则主要用于信息的输出,如可以用来显示抢到题目的选手编号、违规抢答的选手编号、抢答时间以及答题时间的倒计时等。3.2 设计总体框图设计总体框图如图所示。蜂鸣器报警模块数码管显示模块选手抢答输入STC89C52最小系统主持人控制输入图3.1 总体设计方框图3.3 最小系统模块STC89C52的最小系统由4个部分组成,晶振电路部分、复位电路部分、P0口上拉电路部分以及程序下载

18、口5部分。3.3.1 单片机最小系统STC89C52的最小系统如图3.2所示。图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 STC89C

19、52简介宏晶科技公司了许多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.0P1.7开始信号输入端;P3.7是主位信号输入端;P2.0P

20、2.3用于驱动三极管,控制一边数码管的位选;P0.0P0.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口(Pin39Pin32):8位双向

21、I/O口线,名称是P0.0P0.7 P1口(Pin1Pin8):8位准双向I/O口线,名称是P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称是P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称是P3.0P3.7STC89C52引脚图如图3.3所示。图3.3 STC89C523.4 键盘扫描电路在单片机应用中键盘可分为独立键盘和矩阵键盘两种。矩阵键盘的硬件电路设计复杂,程序算法烦琐,但它占用端口资源少,因此一般用于多按键电路。独立键盘硬件电路简单,程序设计上简单,各键的工作状态互不影响,适用于对硬件电路要求不高的简单电路。键在闭合和断开的瞬间

22、均会产生抖动,若不妥善处理容易引起误动作,必须去抖动。去抖动有用硬件的方法和软件的方法两种,例如,硬件采用滤波电路防抖。在这里采用软件延时的方法来避开抖动。本设计中采用了独立键盘的方式。独立式键盘电路简单,程序容易。设计中有10个按键,其中8个抢答按键,一个复位按键,另一个是主持人使用的主控按键。同时为了简化电路设计,节约单片机的IO口资源8,将设置抢答时间和答题时间等这些功能按键复合到了8个选手的抢答按键中。按键的连接图如图3.4所示。图3.4 按键电路 3.5 蜂鸣器报警电路本设计选用的蜂鸣器是有源蜂鸣器,即蜂鸣器内部已经内置了震荡电路,单片机不需要连续发出高低电平来驱动它9,而只要输出高

23、(或低)电平即可,这大大简化了单片机程序的设计,由于蜂鸣器工作时,需要的电流比较大,单片机的IO口输出的电流又比较小,所以这里利用三极管的开关管功能来控制蜂鸣器发音,本设计选用的三极管型号是PNP三极管S8550,由于选用的是PNP型而单片机上电IO口默认是高电平的,所以上电时蜂鸣器是不会发出鸣叫的。蜂鸣器电路如图3.5所示。图3.5 蜂鸣器电路3.6 数码管显示数码管是单片机应用系统中常用的输出设备,具有结构简单、价格便宜等特点。在这里我们使用的数码管是7段数码管,它是由7个LED组成的。左边1位数码管用来显示组号,右边2位数码管主要用来显示倒计时。一般情况下,我们用的是静态显示、动态显示两

24、种,根据实际情况本设计采用的是动态显示方法。数码管还可以分共阳型和共阴型,本设计我采用的是4位共阳数码管;其中A、B、C、D、E、F、G、DP10段分别接到单片机的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 数码管显示电路4系统软件设计4.1 总体程序设计八路抢答器的整体程序从定时器的初始化开始,这里用到了

25、单片机的2个定时器,一个是用于数码管的动态扫描,另一个是用于答题时间的计时。接着程序开始判断是否进行抢答时间设置,判断“是”则进入抢答时间设置模式,没有则继续下一步判断是否进入答题时间设置,判断“是”则进入答题时间设置模式,没有则跳进入大循环。进入大循环,该流程是先判断是否有人按键;如果有人按键则判断是谁按下了按键,若是选手则蜂鸣器就会报警,这个选手在还没开始时就抢答了,属于违规行为;若是主持人按下了开始键说明抢答开始,选手可以正式抢答了。如果检测按键没按下,则一直在大循环里面扫描按键。选手可以抢答了模式时,选手可以正式抢答时,先判断是否有人在抢答的正确时间内按下抢答键了,如果有人在30S内按

26、下了,那么就会通过外部中断系统来禁止其他选手进行抢答,使数码管只显示第一个抢答到组号和这组回答问题时间15S倒计时;若是没有人抢答,则在最后5秒发出滴滴上的报警,并且5秒结束后,蜂鸣器报警,并且数码管显示“-”,表示此轮抢答结束,直至主持人按下复位键K9进行复位,再次进入初始化,进行下一轮的抢答。八路抢答器的整体程序流程图如图4.1所示。4.2 抢答/答题时间设置为了简化八路抢答器的硬件电路,通过软件编程将抢答时间和答题时间的设置按键和抢答键合并在一起。设置抢答时间时,先断开抢答器的电源,然后按下选手一的抢答键,然后上电,系统上电检测到按键一被按下了,那么就进入到抢答时间的设置,通过按键七减时

27、间及按键八加时间来设置答题时间的大小。答题时间的设置也基本类似,只是在上电前按下按键二。图4.1 八路抢答器程序流程图4.3 数码管动态扫描程序为了简化程序的编译,合理利用单片机的内部资源,因此将数码管的动态扫描程序通过定时器来实现。本设计设置的定时器发生中断的时间为2毫秒,每次显示四位中的一位,因此,完成四位数码管的扫描需要8毫秒的时间,即发生四次定时器中断。5 仿真与测试分析5.1 用Keil进行程序编译结果本设计软件部分采用Keil进行程序编译,Keil编译C语言程序运行如图5.1所示。图 5.1 Keil编译C语言程序5.2 Proteus仿真结果由于实物制作时用的CPU是STC89C

28、52,而仿真用的是AT89C52,STC89C52内部是带有EEPROM的,EEPROM可以实现数据的断电保存,而后者是没有的,本设计需要保存的数据是等待时间和答题时间这两个。所以导致了仿真的程序和实物的程序不同,不同之处就是实物的多了写数据到单片机内部的EEPROM和从单片机内部的EEPROM读数据的部分,其它程序一模一样。由于仿真的CPU内部不带EEPROM,所以默认的等待抢答时间是30秒,答题时间是15秒。电源开关按下,板子启动,数码管显示“0000”Proteus仿真图如图5.2所示。图5.2板子启动仿真图如果在抢答倒数时间的过程中,有选手进行抢答,数码管的显示抢答选手编号和15秒答题

29、时间。数码管后两位开始15秒倒数,倒数到最后5秒,蜂鸣器就会发出滴滴的响声,提示答题时间即将结束,5秒倒数完,数码管的显示变为“-”,蜂鸣器长鸣,说明本轮答题结束。选手抢答成功仿真图如图5.3所示。图5.3选手4答题倒计时选手可以抢答时倒计时显示仿真图如图5.4所示。图5.3抢答30秒倒计时仿真图在主持人还没有按主控制键已经有选手抢答,此为违规抢答。下图为5号选手犯规抢答时仿真图。图5.5选手违规抢答6 电路板的制作与调试6.1 制作1 先画出原理图。2 由Protell99软件生成PCB图。3 用实验室的油纸把PCB图打印出来。4 裁剪成一个150mm80mm和两个60mm30mm铜制电路板

30、。5 把铜制电路板边和油纸对折好,然后放入制版机上进行打印。把打印过的电路板放入三氯化铁溶液中,把电路板上的铜在溶液中腐蚀掉。腐蚀完毕后把电路板用清水清洗一下,晾干。6 将处理好的板子用细砂纸把布线上的铜擦掉,之后用直径1.0mm钻头钻孔、定位口。7 按电路板上元器件的位置把元器件插上并且用烙铁进行焊接。8 焊接完成后进行调试。焊接注意事项:1. 三极管的正负极要接正确2. 电源正负极要接正确3. 焊点不易过大,容易出现短路6.2 调试1. 先观察电路板,看板子上是否出现元器件插反,焊接不牢固,元器件出现裂痕的情况。第一次调试,发现三极管的管脚插反,导致调试不出来。所以就把三极管的正负极调了一

31、下。2. 第二次调试,还是调试不出来。我用万用表测量发现显示电路部分出现短路现象,通过测量发现焊点太大,导致两个焊点连在一起以至于出现短路现象,通过修改确定没有短路现象。3. 第三次调试,还是无法调试出来,我又仔细检查一下电路图,认真分析了电路图的元器件,发现所用的电源电压太小导致无法供应整个电路,之后调整了一下电源电压。 4. 第四次调试,基本没有什么问题,完成了任务。调试结果如下图6.1所示。图6.1选手违规抢答结论在本毕业设计中,关于这个课题我查阅了好多的相关资料与书籍,指导老师也帮我指导了系统的整体框架以及电路的基本工作原理,使我对电路的整个工作过程有了清晰的了解,使我少走了不少弯路,

32、节约了时间。通过查阅相关的文献资料,也让我更进一步掌握了模电和数电等方面的相关知识,加深对其的理解。通过这次毕业设计,使我进一步的巩固了以往所学的知识,更加认识到电子技术是一门实践性很强的课程,它与我们的日常生活有着密不可分的关系。并且这次的毕业设计也让我将电子设计方面的知识加以综合,而且很好的巩固了原来模糊不清的知识结构,特别是了解和掌握了单片机的定时器、计数器定时和计数的原理。在这次设计中使我深刻认识到,理论和实际是有很大差距的,所以有些时候不但要深入地理解,更要积极地去实践,把实践应用到理论中,这样才更有意义。电路设计考验人的灵活性,它传达了你解决问题的自主与逻辑思维能力,是一个设计的核

33、心部分。在整个设计过程中需要花大部分时间在单元电路的掌握、理解和设计上。需要单元电路都可以来自书本,关键就在怎样衔接好各个单元的电路。经过这次毕业设计我也从中发现自己的很多缺点。在做毕业设计过程中发现自己考虑问题太过简单,自己的专业知识比较薄弱,操作电路应用软件还不是很熟练,希望自己在今后的学习与工作中能把这些不足之处得到改正。致谢在这本课题的设计设计中,我最感谢的就是我的指导老师郭彬。从选题到开题报告、再到写作提纲,整个过程中老师多次询问我的进度,严格把关,一次一次地指出每稿中的具体错误问题,积极引导我如何解决问题,帮我开拓思路。且在设计的过程中,老师给我提供了很多课题资料和提出专业知识的指

34、导,在此我表示衷心感谢。除此之外,在设计进行当中,我还要感谢我们班的同学,在我没有思路的时候,他们帮助我分析电路功能和电路结构,让我找到了切入点,在此深表感谢。参考文献1 康华光.电子技术基础.数字部分(第四版)M.高等教育出版社.2003. 2 苏平.单片机的原理与接口技术M.北京:电子工业出版社,2006.3 纪宗南.单片机外围器件使用手册M.北京:北京航空航天大学出版社. 2002. 4 余永权.单片机在控制系统中的应用M.北京:电子工业出版社.2003.5 唐俊翟.单片机原理与应用M.北京:冶金工业出版社.252-267.6 周润景.张丽娜基于PROTEUS的电路及单片机系统设计与仿真

35、M航空航天大学出版社.2010.7 许海峰,叶钢.C51单片机项目式教程M.北京:清华大学出版社,2011. 8 刘坤.protel 99 SE操作指导与电路设计实例M.北京:清华大学出版社.2008.9 张兰红、邹华.单片机原理及应用.机械工业出版社,2012. 10 王文峰.数码显示六路抢答器的设计.井冈山师范学院学报,2000.11 Analog Device.Inc.Loop-Powered420mv DAC.Data Sheet.1996.12Hans Peter Limbah.IEEE 1394-das Tor zu Multimedia.Radior-Fernsee-Elektr

36、onik,1997(9).附 录附录A基于单片机的八路抢答器原理图附录B#include #include #define uchar unsigned char#define uint unsigned intsfr 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;/ 命

37、令寄存器sbit w1 = P23;/ 定义了数码管第1位的控制脚sbit w2 = P22;/ 定义了数码管第2位的控制脚sbit w3 = P21;/ 定义了数码管第3位的控制脚sbit w4 = P20;/ 定义了数码管第4位的控制脚sbit k1 = P10;/ 定义了选手1的抢答按键(可用于进入设置抢答时间)sbit k2 = P11;/ 定义了选手2的抢答按键(可用于进入设置答题时间)sbit k3 = P12;/ 定义了选手3的抢答按键sbit k4 = P13;/ 定义了选手4的抢答按键sbit k5 = P14;/ 定义了选手5的抢答按键sbit k6 = P15;/ 定义了

38、选手6的抢答按键sbit k7 = P16;/ 定义了选手7的抢答按键(设置时间时,是“减”的功能)sbit k8 = P17;/ 定义了选手8的抢答按键(设置时间时,是“加”的功能)sbit k9 = P37;/ 定义了开始抢答的按键sbit bp = P26;/ 定义蜂鸣器的控制引脚uchar code ShowDig= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0xff;uchar dig4;/ dig0、dig1、dig2、dig3分别代表了四位数码管显示的内

39、容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)ISP_DATA = 0x00;ISP_CONTR = 0x83;ISP_CMD = 0x01;ISP_ADDRH = (unsigned char)(add8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_TRIG = 0x46; / 对STC89C51系列

40、来说,每次要写入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)(add8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_DATA = ch;ISP_TRIG = 0x46;ISP_TR

41、IG = 0xB9;_nop_();ISP_Disable();void Sector_Erase(unsigned int add) ISP_CONTR = 0x83;ISP_CMD = 0x03;ISP_ADDRH = (unsigned char)(add8);ISP_ADDRL = (unsigned char)(add&0xff);ISP_TRIG = 0x46;ISP_TRIG = 0xB9;_nop_();ISP_Disable();void DelayMs(uint n)uint x,y; for(x=n;x0;x-) for(y=110;y0;y-); void TimerI

42、nit()TMOD = 0x11;/ 定时器0用于数码管的动态扫描,定时器1用于秒数的计时TH0 = (65536-1000)/256;/ 给定时器0的TH0装初值TL0 = (65536-1000)%256;/ 给定时器0的TL0装初值TH1 = (65536-50000)/256;/ 给定时器1的TH1装初值TL1 = (65536-50000)%256;/ 给定时器1的TL1装初值TR0 = 1;/ 启动定时器0(开始动态扫描数码管) ET0 = 1;/ 定时器0中断使能ET1 = 1;/ 定时器1中断使能EA = 1;/ 打开总中断void WaitTimeSet(void)if(k1

43、=0)/ 判断按键1是否有按下,等于0代表按键按下了,则进入抢答时间设置模式/ 数码管显示“EEEE”dig0=ShowDig14;dig1=ShowDig14;dig2=ShowDig14;dig3=ShowDig14;while(!k1);/ 等待按键释放DelayMs(500);/ 利用延时去抖dig1=ShowDig17;/ 数码管显示“E EE”dig2=ShowDiggWaitTime/10;/ 数码管显示“E 30” dig3=ShowDiggWaitTime%10;while(k1)/ 当再次按下按键1时,退出抢答时间设置模式,否则一直扫描“加”、“减”按键if(k8=0)/

44、判断“加”按键是否被按下DelayMs(250);/ 利用延时去抖gWaitTime+;/ 当前要设置的秒数自加1if(gWaitTime=100) / 当自加到100时,自动清零gWaitTime=0; Sector_Erase(0x2000);/ 擦除内部EEPROM(写入之前必须先擦除) Byte_Program(0x2000,gWaitTime);/ 将新设置的等待时间写入到内部EEPROM的0x2000这个地址Byte_Program(0x2001,gAnswerTime);/ 将答题时间写入到内部EEPROM的0x2001这个地址dig2=ShowDiggWaitTime/10;/

45、 更新数码管的秒数显式(十位)dig3=ShowDiggWaitTime%10;/ 更新数码管的秒数显式(个位)if(k7=0)/ 判断“减”按键是否被按下DelayMs(250);/ 利用延时去抖gWaitTime-;/ 当前要设置的秒数自减1if(gWaitTime=-1) / 自减到-1时,自动变成99gWaitTime=99; Sector_Erase(0x2000);/ 擦除内部EEPROM(写入之前必须先擦除)Byte_Program(0x2000,gWaitTime);/ 将新设置的等待时间写入到内部EEPROM的0x2000这个地址Byte_Program(0x2001,gAn

46、swerTime);/ 将答题时间写入到内部EEPROM的0x2001这个地址dig2=ShowDiggWaitTime/10;/ 更新数码管的秒数显式(十位)dig3=ShowDiggWaitTime%10;/ 更新数码管的秒数显式(个位)while(!k1);DelayMs(500);void AnswerTimeSet(void)if(k2=0)/ 判断按键2是否有按下,等于0代表按键按下了,则进入答题时间设置模式/ 数码管显示“FFFF”dig0=ShowDig15;dig1=ShowDig15;dig2=ShowDig15;dig3=ShowDig15;while(!k2);/ 等待

47、按键释放DelayMs(500);/ 利用延时去抖dig1=ShowDig17;/ 数码管显示“F FF”dig2=ShowDiggAnswerTime/10;/ 数码管显示“F 15” (15就是要设置答题时间,15只是个例子,具体数字视具体情况而定)dig3=ShowDiggAnswerTime%10;while(k2)/ 当再次按下按键2时,退出抢答时间设置模式,否则一直扫描“加”、“减”按键if(k8=0)DelayMs(250);/ 利用延时去抖gAnswerTime+;/ 当前要设置的秒数自加1if(gAnswerTime=100) / 当自加到100时,自动清零gAnswerTi

48、me=0; Sector_Erase(0x2000); / 擦除内部EEPROM(写入之前必须先擦除)Byte_Program(0x2000,gWaitTime);/ 将等待时间写入到内部EEPROM的0x2000这个地址Byte_Program(0x2001,gAnswerTime); / 将新设置的答题时间写入到内部EEPROM的0x2001这个地址dig2=ShowDiggAnswerTime/10;/ 更新数码管的秒数显式(十位)dig3=ShowDiggAnswerTime%10;/ 更新数码管的秒数显式(个位)if(k7=0)/ 判断“减”按键是否被按下DelayMs(250);/

49、 利用延时去抖gAnswerTime-;/ 当前要设置的秒数自减1if(gAnswerTime=-1) / 当自减到-1时,自动变成99gAnswerTime=99; Sector_Erase(0x2000);/ 擦除内部EEPROM(写入之前必须先擦除) Byte_Program(0x2000,gWaitTime);/ 将等待时间写入到内部EEPROM的0x2000这个地址Byte_Program(0x2001,gAnswerTime);/ 将新设置的答题时间写入到内部EEPROM的0x2001这个地址dig2=ShowDiggAnswerTime/10;/ 更新数码管的秒数显式(十位)di

50、g3=ShowDiggAnswerTime%10;/ 更新数码管的秒数显式(个位)while(!k2);/ 等待按键释放DelayMs(500);/ 利用延时去抖uchar KeyScanf(void)if(k1=0)/ 选手1按下,返回1return 1;if(k2=0)/ 选手2按下,返回2return 2;if(k3=0)/ 选手3按下,返回3return 3;if(k4=0)/ 选手4按下,返回4return 4;if(k5=0)/ 选手5按下,返回5return 5;if(k6=0)/ 选手6按下,返回6return 6;if(k7=0)/ 选手7按下,返回7return 7;if(

51、k8=0)/ 选手8按下,返回8return 8;if(k9=0)/ 开始抢答按键按下,返回9return 9;return 0;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中设置温度上限的报警值,并

52、赋给全局变量gAnswerTime = Byte_Read(0x2001);/ 读取EEPROM中设置温度下限的报警值,并赋给全局变量WaitTimeSet();/ 判断是否要进入等待时间设置模式AnswerTimeSet();/ 判断是否要进入答题时间设置模式dig0=ShowDig0;/ 数码管显示“0000”dig1=ShowDig0;dig2=ShowDig0;dig3=ShowDig0;while(1)if(KeyScanf()!=0)/ 当按键扫描程序的返回值不是0时,代表有按键被按下ret=KeyScanf()/ 保存按键扫描程序的返回值while(KeyScanf();/ 等待

53、按键释放DelayMs(500);/ 利用延时去抖if(ret=9)/ 如果是开始抢答按键被按下TR1=1;/ 启动定时器,即开始秒数的倒计时dig0=ShowDig17;/ 数码管显示“ 00”dig1=ShowDig17;gSecond=gWaitTime;/ 此时,gSecond代表了具体有多少秒需要倒计时while(!KeyScanf()/ 如果一直没有人按键,则一直判断秒数是不是计到0了if(gSecond=0)/ 如果计数到0了,数码管显示“-”,表示此轮抢答结束dig2=ShowDig16;dig3=ShowDig16;else/ 如果没有计到0,则数码管一直显示当前倒数的秒数d

54、ig2=ShowDiggSecond/10;dig3=ShowDiggSecond%10;ret=KeyScanf();/ 保存按键扫描程序的返回值dig0=ShowDigret;/ 数码管第一位显示抢到答题权限的选手的编号dig1=ShowDig16;/ 数码管第二位显示“-”gSecond=gAnswerTime; / gSecond代表了答题的时间(之前是代表抢答时间)while(1)/ 一直判断秒数是不是计到0了if(gSecond=0)/ 如果计数到0了,数码管显示“-”,表示此轮抢答结束dig2=ShowDig16;dig3=ShowDig16;else/ 如果没有计到0,则数码管

55、一直显示当前倒数的秒数dig2=ShowDiggSecond/10;dig3=ShowDiggSecond%10;else/ 如果不是开始抢答按键被按下,说明是选手按键被按下,此时是违规的提前抢答dig0=ShowDigret;/ 数码管第一位显示违规选手的编号dig1=ShowDig16;/ 数码管第二位显示“-”dig2=ShowDig12;/ 数码管第三位显示“C”dig3=ShowDig12;/ 数码管第四位显示“C”bp=0; / 蜂鸣器报警while(1);void TimerInt0(void) interrupt 1TH0 = (65536-2000)/256;/ 给定时器0的

56、TH0装初值TL0 = (65536-2000)%256;/ 给定时器0的TL0装初值P0=0xff;if(w4=1)/ 数码管第一位显示w4=0;w1=1;P0=dig0;else if(w1=1)/ 数码管第二位显示w1=0;w2=1;P0=dig1;else if(w2=1)/ 数码管第三位显示w2=0;w3=1;P0=dig2;else/ 数码管第四位显示w3=0;w4=1;P0=dig3;void TimerInt1(void) interrupt 3TH1 = (65536-50000)/256;/ 给定时器1的TL1装初值TL1 = (65536-50000)%256;/ 给定时器1的TH1装初值gCount+;/ gCount每自加1,说明时间经过了50毫米if(gCount=5)/ 5代表250毫米bp=1;if(gCount=20)/ 20代表计数了1秒gCount=0;/ 将gCount清零,进入下一秒的计时gSecond-;/ 秒数自减1if(gSecond0)/ 当剩最后5秒时,进入这个if语句的代码bp=0;if(gSecond=0)/ 当计数到0时TR1=0;/ 停止定时器bp=0;/ 蜂鸣器响dig0=ShowDig16;/ 数码管显示“-”dig1=ShowDig16;dig2=ShowDig16;dig3=ShowDig16;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!