基于51单片机八路抢答器的设计_第1页
基于51单片机八路抢答器的设计_第2页
基于51单片机八路抢答器的设计_第3页
基于51单片机八路抢答器的设计_第4页
基于51单片机八路抢答器的设计_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z.---.可修编.课程设计说明书(专业工程设计)题目:基于51单片机八路抢答器的设计院(系):信息与通信学院专业:微电子科学与工程学生**:伦海威学号:1300240120指导教师:李琦2016年12月17日摘要随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC单片机为核心的八路抢答器。我们采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器及LED指示灯发出提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为犯规;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。【关键词】STC89C52RC;共阴数码管;按键;蜂鸣器-.z.--ABSTRACTWiththedevelopmentandpopularizationofscienceandtechnology,avarietyofpetitionsmoreandmore,inwhichtheroleoftheResponderwillbeobvious.Atpresent,alotofanswerbasicallyusingsmall-scaledigitalintegratedcircuitdesign,useitisnotideal.Sodesignamoreeasy-to-useandhigh-definitionoftheResponderhasbeeaveryurgenttask.NowMCUhasenteredvariousfields,withitspowerconsumptionissmall,intelligentandknown,soiftheuseofsingle-chipdesigntoanswer,sothattheaboveproblemscanberesolved.Inviewoftheabove,thisdesigntoSTC89C52RCsinglechipasthecoreoftheeight-.Weusethedirectdisplayofdigitaldisplay,automaticallylatchthedisplayresults,andautomaticallyresetthedesign,itcananswerinaccordancewiththedifferentinputsignals,throughthemicrocontrollercontrolandproducedifferentinputsignalcorrespondingtotheoutputsignal,andfinallythroughLEDdigitaltubeshowsthecorrespondingnumberofroad,evenifthetwogroupsoftheanswertimedifferenceofafewmicroseconds,whichcanbedistinguishedwhichgroupofprioritypressthebutton,whichmakesfulluseoftheadvantagesofSCMsystemwithasimple,powerful,reliableGood,practicalandstrongfeatures.

Thedesignisbasedoneight-wayanswerforthebasicidea.Takingintoaccounttheneedtosetthetimelimittoanswerthefunction,theuseof51MCUandperipheralinterfacetoachievetheanswerinthesystem,theuseofsingle-chiptimer/countertimingandcountingprinciple,thesoftwareandhardwareorganicallybine,makingthesystemcorrectlyTime,whileallowingthedigitaltubetodisplaythecorrecttime.Withtheswitchtodothekeyboardoutput,speakerandLEDindicator.Atthesametimethesystemcanbeachieved:intheanswer,onlyafterthebeginningoftheanswerisvalid,ifinthebeginningtoanswerbeforeansweringforfoul,fulltimeafterthesystemautomaticallyresetandmasterreset.【Keywords】STC89C52RC,moncathodedigitaltube,button,buzzer目录19174引言 16139第一章方案概述2153641.1设计目标272931.1.1基本功能225621.1.2主要技术参数230357第二章硬件设计与原理3111762.1总设计框图334482.2硬件设计分析3111762.2.1单片机主控模块434482.2.2STC89C52芯片简介4190122.2.3封装和引脚说明4238532.2.4数码管显示电路724212.2.5按键输入电路9266872.2.5报警与指示电路1123684第三章软件仿真11172853.1软件调试部分11283743.1.1PROTEUS简介1124535软件调试 123.214377PROTEUS仿真图 13第四章硬件调试154.1D*P软件简介 154.1.1原理图154.1.230883PCB图 154.2实物图192861522074结论16谢辞3088317参考文献192861822074附录一总源程序19附录二原理图3088332附录三PCB图192863222074附录四元件清单33附录五实物图3088333-.z.---.可修编.引言最近几年来,随着科技的飞速发展,单片机领域正在不断的走向社会各个角落,还带动传统控制检测日新月异更新。在实时运作和自动控制的单片机应用到系统中,单片机如今是作为一个核心部件来使用,仅掌握单片机方面知识是不够的,还应根据其具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。“单片机原理及应用课程设计”是电子类专业的学科基础科,它是继“汇编语言程序设计”,“接口技术”等课程之后开出的实践环节课程。第一章方案概述1.1设计目标1.1.1基本功能1、同时供8名选手或8个代表队参加比赛,分别用8个按钮K1~K8表示。2、设置一个系统抢答控制开关K0,该开关由主持人控制。3、抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在七段数码管上显示选手。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。4、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。5、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。在这段时间如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示FFF。1.1.2主要技术参数1、在抢答中,只有在主持人按“开始”按键后抢答才有效,如果在按“开始”抢答按键前抢答为犯规,系统发出警报,数码管显示违规及FF(如3FF)。2、抢答限定时间和回答问题的时间是在10~60s设定。3、数码管可以显示是哪位选手有效抢答和无效抢答,正确按键后有音提示并在数码管上正确显示。4、主持人按下“开始”按键后抢答时间和回答问题时间倒记时在数码管上显示,时间完后系统自动复位为FFF。5、在抢答时间和倒计时时间准备到达时,系统会发出警报提示。6、按键锁定,在有效状态下,按键无效非法。第二章硬件设计与原理以STC89C52RC单片机为核心,起着控制作用。系统包括数码管显示电路、复位电路、时钟电路、按键输入电路和蜂鸣器报警电路。设计思路分为六个模块:复位电路、晶振电路模块、STC89C52RC、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。2.1总设计框图设计总框图如下图2-1所示。图2-1设计总框图2.2硬件设计分析2.2.1单片机主控模块51单片机是对目前所有兼容intel8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。51系列单片机内包含以下几个部件:一个8位CPU;一个片内振荡器及时钟电路;4KB的ROM程序存储器;一个128B的RAM数据存储器;寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;32条可编程的I/O口线;两个16位定时/计数器;一个可编程全双工串行口;5个中断源、两个优先级嵌套中断结构。2.2.2STC89C52芯片简介单片机是微型机的一个主要分支,在结构上的最大特点是把CPU、存储器、定时器和多种输入/输出接口电路集成在一块超大规模集成电路芯片上。就其组成和功能而言,一块单片机芯片就是一台计算机。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。8KBFlashROM,可以擦除1000次以上,数据保存10年。STC89C52RC的主要特性如下表2-1所示。表2-1STC89C52RC的主要功能特性兼容MCS—51指令系统32个可编程I/O线4k字节可编程闪烁存储器可编程UARL通道三个16位可编程定时/计数器中断时钟频率0-24MHz2个外部中断源,共8个中断源256×8bit内部RAM2个读写中断口线可直接驱动LED软件设置睡眠和唤醒功能低功耗空闲和掉电模式2.2.3封装和引脚说明STC89C52单片机为双列直插式(DIP)芯片,是最常用的有总线扩展引脚的DIP40封装。如图2-2所示。(1).电源及时钟引脚Vcc:接入电源。Vss:接地。*TAL1:振荡器反相放大器的及内部时钟发生器的输入端。*TAL2:振荡器反相放大器的输出端。(2).控制线引脚RST:RST是复位信号输入端。ALE/PROG:地址锁存允许信号输入端。在存取外存储器时,用于锁存低8位地址信号。当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。此引脚的第2功能PROG是作为编程脉冲输入端。PSEN:程序存储器允许输出端。CPU从外部程序存储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号。EA/Vpp:程序存储器地址允许输入端。当EA为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令;当EA为低电平时,CPU只执行片外程序存储器指令。(3).并行I/O引脚P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,*个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2E*)。Flash编程和程序校验期间,P1接收低8位地址。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,*个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOV*DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOV*RI指令)时,P2口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。如表2-2所示。图2-2STC89C52单片机引脚封装表2-2P3特殊功能口口管脚备选功能P3.0R*D串行输入口P3.1T*D串行输出口P3.2/INT0外部中断0P3.3/INT1外部中断1P3.4T0记时器0外部输入P3.5T1记时器1外部输入P3.6/WR外部数据存储器写选通P3.7/RD外部数据存储器读选通单片机最小系统原理图如图2-3所示。图2-3单片机最小系统单片机最小系统说明:时钟信号的产生:在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚*TAL1,其输出端为引脚*TAL2。而在芯片的外部,*TAL1和*TAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。一般地,电容C2和C3取30pF左右,晶体的振荡频率*围是1.2-12MHz。如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。单片机复位条件:必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。2.2.4数码管显示电路显示系统采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示sP,即点),每个发光二极管的阳极连在一起,如图2-4所示。这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。为方便起见,本文主要讨论共阴八段LED数码显示管,其他类形的显示管与其类似。图2-4LED数码管LED灯的显示原理:通过同名管脚上所加电平的高低来控制发光二极管是否点亮而显示不同的字形,如H,G,F,E,D,C,B,A全亮显示为8,采用共阴极连接驱动代码,代码表如下表2-3所示。表2-3LED驱动代码显示数值H,G,F,E,D,C,B,A驱动代码0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FH2.2.5按键输入电路按键是由一组按压式或触摸式开关构成的阵列,是一种常用的输入设备。键盘可分为编码式键盘和非编码式键盘两种。1.编码键盘通过硬件电路产生被按按键的键码,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。2.非编码键盘常用一些按键排列成行列矩阵,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。非编码键盘的硬件接口简单,但是要占用较多的CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。在接线时由于有四个引脚,连接时需要用万用表进行测量,然后接通两个引脚,原理图如图2-5(a),(b)所示。要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。图2-5(a)按键电路图2-5(b)按键电路2.2.6报警与指示电路在电路设计当中,设有报警与指示电路如图2-6所示,电路在整个电路中起到报警提示的作用。图2-6报警与指示电路第三章软件仿真一般调试都是在编写代码完之后用来验证电路的准确与否,通过反复修改程序代码来来使电路尽可能完善,但是单单依靠软件来仿真并不能保证电路能实现想要的功能,因为软件仿真并不像现实的一样。所以还要依靠硬件电路来实现,不断修改。3.1软件调试部分使用Proteus和KeiluVision4软件来仿真,Proteus软件是用来仿真电路图,而KeiluVision4软件用来编译代码和编写代码,总程序如附录一所示。3.1.1PROTEUS简介ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。(4)具有强大的原理图绘制功能。可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HE*,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。PROTEUS是单片机课堂教学的先进助手。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。3.1.2软件调试用软件来调试查找编程上的错误,可以比较好的修改电路和程序,使得电路能尽可能完善和正确。如图3-1为电路连接图在Proteus的接法。图3-1Proteus电路原理图而KeiluVision4用来检查语法和编译上的错误,用起来比较方便,它是和Proteus软件相结合的,只有编译没有问题、正确后才能导入Proteus中得到正确的结果。如图3-2是编译检查正确后的结果。图3-2KeilUvision4编写程序其次,用KeilUvision4编写程序,编译无误后生成HE*文件,通过在网上买的最小系统来烧录程序,最小系统烧录程序很简单,只需插到电脑的USB接口,在网上下载烧录STC系列的单片机的烧录软件,找到生成HE*文件,即可下载。3.2Proteus仿真图下图片为通过Proteus软件将已经用KeilUvision4编写的程序,编译无误后生成HE*文件装载入单片机中仿真出来后的结果。图3-3(a)为仿真的初始画面,图3-3(b)为6号犯规仿真结果图,图3-3(c)为4号成功抢答的仿真结果图,图3-3(d)为抢答时间调整仿真结果图,图3-3(e)为答题时间调整仿真结果图。图3-3(a)仿真初始画面图3-3(b)6号犯规图3-3(c)4号成功抢答图3-3(d)抢答时间调整图3-3(e)答题时间调整第四章硬件调试为了能够更好地完成电路的设计我使用D*P这款软件来制作电路板4.1D*P软件简介Altium公司作为EDA领域里的一个领先公司,在原来Protel99SE的基础上,应用最先进的软件设计方法,于2002年率先推出了一款基于Windows2000和Windows*P操作系统的EDA设计软件ProtelD*P。并于2004年推出了整合Protel完整PCB板级设计功能的一体化电子产品开发系统环境——AltiumDesigner2004版。ProtelD*P在前版本的基础上增加了许多新的功能。新的可定制设计环境功能包括双显示器支持,可固定、浮动以及弹出面板,强大的过滤和对象定位功能及增强的用户界面等。ProtelD*P是第一个将所有设计工具集于一身的板级设计系统,电子设计者从最初的项目模块规划到最终形成生产数据都可以按照自己的设计方式实现。ProtelD*P运行在优化的设计浏览器平台上,并且具备当今所有先进的设计特点,能够处理各种复杂的PCB设计过程。通过设计输入仿真、PCB绘制编辑、拓扑自动布线、信号完整性分析和设计输出等技术融合,ProtelD*P提供了全面的设计解决方案。4.1.1原理图因为使用PCB板来焊接电路,所以还会用D*P软件,这个软件里面必须先画原理图,如图附录二为所设计电路的原理图。4.1.2PCB图在原理图编译没有错误后就可以直接导入到PCB工程中,生成设计电路的PCB图,然后进行布线排版,调到合适的位置后可以进行自动布线,不过也可以自己布线,但是必须设计好规则。如图附录三是布好线的PCB图。由于太久没有使用D*P软件,对这款软件也不是很熟练使用,因此在布线上不是很美观有一些红色的跳线。4.2实物图将做好的PCB图打印出来后,制好电路板并且打好孔,将如附录四所示的元件清单按电路图焊接好,最后检查调试好电路,得到实物如附录五所示。结论经过近一个月的努力,终于顺利完成了课程设计。刚开始,头绪不是很清楚,不知道从哪里入手,但通过老师的耐心指导并和同学认真研究设计课题,跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,从中积累了很多宝贵的经验。在整个设计的过程中虽然遇到了很多的问题,比如对之前学习的单片机课程有些淡忘,学过的知识掌握的不牢靠;对常用的软件不是很熟练,在应用时经常通过查找资料来解决等。通过设计进一步认识到了自己的不足,让自己能够端正学习态度,对自己要严格要求,一切都要实事求是,不能够一知半解,要力求明明白白。不能急于求成,在动手之前,头脑里必须清楚该怎么做,要有总体思路,这一点是很重要的。就目前来说,我的动手能力虽然不是很好,但我想,只要通过我的不懈努力,总会得到提高,这一点,我坚信。因为别人能做到的,我相信我也一定能做到。在此次的课程设计中我最大的体会就是进一步认识到了理论与实践的重要性。一份耕耘,一份收获。总而言之,此次课程设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力,为下一个学期的毕业设计做好了基础。谢谢老师给我们提供这么好的机会,为我们之后走向工作,走向社会奠定了一个好的基础。谢辞随着2016年接近尾声,我的课程设计也顺利的完成了,通过此次的课程设计我从中又学到了很多课本上学不到的知识,这也为我下学期的毕业设计打下了良好的基础,在提高自己的能力的同时又能为自己将要步入工作、社会铺设了道路。在这次课程设计过程中获得了各方面的支持,在这里首先向我的指导老师表示最诚挚的感谢,对那些无私的帮助和支持过我的老师和同学,在此我深表谢意。最后再次向所有在课设设计的过程中给予我帮助的老师和同学最诚挚的谢意!参考文献[1]李群芳,*士军,黄建.单片微型计算机与接口技术.:电子工业,2008[2]*迎新.单片微型计算机原理、应用及接口技术.:国防工业,1999[3]高峰.单片微机应用系统设计及使用技术.:机械工业,2007[4]彭伟.单片机c语音程序设计实例基于protues仿真.:电子工业,2007[5]徐春河.浅谈AT89S51[J].制造业自动化,2010,(12):80-82.[6]吴汉清.常用的典型单片机资料[J].无线电,2007,(11):72-80.[7]陈汝全.实用微机与单片机控制技术[M].电子科技大学.1995.712.[8]李建民.单片机在温度控制系统中的应用[M].江汉大学学报,1996.6210-215.[9]薛玲,孙曼,*志会,夏莉丽,魏希文.基于单片机AT89S51的温湿度控制仪[J].2010,37,(7):66-69[10]*毅刚.单片机原理及接口技术[M].出版地:市丰台区成寿寺路,:人民邮电,出版年月:2011年8月第一版[11]郭天祥.51单片机C语言教程[M].出版地:**新华路口33号,:电子工业,出版年月:2009年1月[12]马杰.C语言程序设计基础[M].出版地:****市中华路22号,:广西师*大学,出版年月:2012年8月第一版附录一总源程序*include<reg51.h>typedefunsignedcharuchar;typedefunsignedintuint;sbitK0=P3^0;//开始抢答按键sbitbeep=P3^7;//蜂鸣器sbitD0=P3^1;//指示灯sbitK1=P1^0;//1号选手抢答按键 sbitK2=P1^1;//2号选手抢答按键sbitK3=P1^2;//3号选手抢答按键sbitK4=P1^3;//4号选手抢答按键sbitK5=P1^4;//5号选手抢答按键sbitK6=P1^5;//6号选手抢答按键sbitK7=P1^6;//7号选手抢答按键sbitK8=P1^7;//8号选手抢答按键sbitS1=P3^2;//答题计时键sbitS2=P3^3;//开始抢答时间调整键sbitS3=P3^4;//答题计时时间调整键chars;ucharnum=0;chartime1;//抢答时间chartime2;//答题限时时间uintm,n;//T0,T1定时器定一秒时bitflag1,flag2,flag3,flag4; //标志位bitaa,bb;//时间调整标志位//延时子函数voiddelay(uintz){ uint*,y; for(*=z;*>0;*--) for(y=120;y>0;y--);}ucharcodetable1[]={ //共阴数码管段码值 0*3f,0*06,0*5b,0*4f, 0*66,0*6d,0*7d,0*07, 0*7f,0*6f,0*77,0*7c, 0*39,0*5e,0*79,0*71 };ucharcodetable2[]={ //共阴数码管位码值 0*fe,0*fd, 0*fb,0*f7 };//初始化子函数voidinit(){ TMOD=0*11; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=(65536-2000)/256; TL1=(65536-2000)%256; ET0=1; ET1=1; EA=1; P0=0*00; time1=10; time2=10; flag2=1;}//开始键扫描子函数voidkey1() { uchari=100; if(K0==0) { delay(10); if(K0==0) { while(K0==0&&i) { i--; delay(10); } TR0=1; s=time1; m=0; flag1=1; flag2=1; flag3=1; num=0; beep=1; D0=1; flag4=0; //清除违规标志位 aa=0; bb=0; } }}//选手抢答按键扫描子函数voidkey() { uchari=100; if(K1==0) { delay(10); if(K1==0) { while(K1==0&&i) { i--; delay(10); } num=1; //数码管显示1号"1" TR0=0; //关闭定时器0,时间停止 TR1=1; //打开定时器1,使扬声器响一声 flag2=0; //关闭开始键标志位,使再按其他七个键不会响应 } } if(K2==0) //下面七个键的处理同上 { delay(10); if(K2==0) { while(K2==0&&i) { i--; delay(10); } num=2; TR0=0; TR1=1; flag2=0; //重要 } } if(K3==0) { delay(10); if(K3==0) { while(K3==0&&i) { i--; delay(10); } num=3; TR0=0; TR1=1; flag2=0; } } if(K4==0) { delay(10); if(K4==0) { while(K4==0&&i) { i--; delay(10); } num=4; TR0=0; TR1=1; flag2=0; } } if(K5==0) { delay(10); if(K5==0) { while(K5==0&&i) { i--; delay(10); } num=5; TR0=0; TR1=1; flag2=0; } } if(K6==0) { delay(10); if(K6==0) { while(K6==0&&i) { i--; delay(10); } num=6; TR0=0; TR1=1; flag2=0; } } if(K7==0) { delay(10); if(K7==0) { while(K7==0&&i) { i--; delay(10); } num=7; TR0=0; TR1=1; flag2=0; } } if(K8==0) { delay(10); if(K8==0) { while(K8==0&&i) { i--; delay(10); } num=8; TR0=0; TR1=1; flag2=0; } }}//数码管显示子函数voiddisplay(){ if(flag1==1) //开始键按下,开始计时抢答 { if(num!=0) //如果有人抢答,则显示相应的几号 { P0=table1[num]; //显示几号抢到了 P2=table2[0]; delay(2); P0=0; P2=0*ff; } else //否则没人抢答,则前面不显示几号 { P0=0*00; P2=0*ff; } P0=table1[s/10]; //下面为显示抢答倒计时 P2=table2[2]; delay(2); P0=0; P2=0*ff; P0=table1[s%10]; P2=table2[3]; delay(2); P2=0*ff; P0=0*00; } else //如果开始键没有按下,则显示FFF(若有违规者,则显示违规及FF)或时间调整 { if(flag4==1) //违规显示 { if(num!=0) { P0=table1[num]; //显示几号违规了 P2=table2[0]; delay(2); P0=0*00; P2=0*ff; P0=table1[15]; //下面显示FF,表示违规了 P2=table2[2]; delay(2); P0=0*00; //消隐 P2=0*ff; P0=table1[15]; P2=table2[3]; delay(2); P0=0*00; P2=0*ff; } else { P0=0*00; P2=0*ff; } } else //没有人违规才显示调整时间 { if(aa==1) { P0=0*76; //第一位数码管显示"5(S)"(表示抢答时间调整) P2=table2[0]; delay(2); P0=0*00; P2=0*ff; P0=table1[time1/10]; //下面显示调整的抢答时间 P2=table2[2]; delay(2); P0=0*00; P2=0*ff; P0=table1[time1%10]; P2=table2[3]; delay(2); P0=0*00; P2=0*ff; } elseif(bb==1) { P0=0*38; //第一位与第二位数码管合起来显示"T",表示答题时间调整 P2=table2[0]; delay(2); P0=0*00; P2=0*ff; P0=table1[time2/10]; P2=table2[2]; delay(2); P0=0*00; P2=0*ff; P0=table1[time2%10]; P2=table2[3]; delay(2); P0=0*00; P2=0*ff;

温馨提示

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

评论

0/150

提交评论