抢答器设计报告_第1页
抢答器设计报告_第2页
抢答器设计报告_第3页
抢答器设计报告_第4页
抢答器设计报告_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

目录摘要 1第1章绪论 2第2章总体方案 32.1方案比拟 32.2方案论证 4第3章单元电路设计 63.1主控模块设计 63.1.1AT89C52单片机简介 63.1.2控制模块设计 73.2键盘模块设计 73.2.1选手按键电路 83.2.2控制按键电路 83.3数码管译码显示模块设计 93.3.1数码管及其字形编码 93.3.2数码管译码显示电路 103.4报警电路 11第4章软件设计 12第5章整机原理 13第6章仿真与调试 146.1软件的仿真 146.2实物的制作与调试 15总结 17参考文献 18附录1抢答器原理图 19附录2程序设计 20摘要本设计是采用单片机设计的多人比赛智力抢答器系统。它具有电路简单、功能齐全、制作本钱低、性价比高等特点,是一种经济、实用的比赛用抢答器。硬件局部主要由单片机系统电路、矩阵键盘电路、LED显示电路、LED驱动电路、报警提示灯电路、主持人操作键盘和其它根本外围电路组成。软件局部采用51系列单片机通用的C语言设计编写。该抢答器可同时最多供64个选手或团对使用,不仅能实现显示各位抢答选手号,而且具有抢答30秒倒计时〔可调〕、抢答报警提示等功能。并且功能增减方便,只需对软件做相应修改即可。关键词单片机;矩阵键盘;C语言第1章绪论智力竞赛是一种生动活泼的教育方式,而抢答就是智力竞赛中非常常见的一种答题方式。抢答能引起参赛者和观众的极大兴趣,并且能在极短的时间内,使人们迅速增加一些科学知识和生活常识。但是,在这类比赛中,对于谁先谁后抢答,在何时抢答,如何计算答题时间等等问题,假设是仅凭主持人的主观判断,就很容易出现误判。所以,我们就需要一种具备自动锁存,置位,清零等功能的智能抢答器来解决这些问题。本次设计利用AT89C52单片机的定时器/计数器定时和计数的原理及外围接口,将软、硬件有机地结合起来实现抢答系统,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码。在本次设计中,主要是设计一个供64人使用的定时抢答器。它主要实现以下功能:〔1〕为64位参赛选手各提供一个抢答按钮,分别编号选手1、选手2、……选手64;〔2〕主持人可以控制系统的清零与抢答开始;〔3〕抢答器要有数据锁存与显示的功能;〔4〕抢答器要有自动定时功能,并且每次抢答时间由主持人任意设定;〔5〕参赛选手只有在设定时间内抢答方为有效抢答。假设抢答有效,显示抢答开始时间直到系统被清零;〔6〕假设设定时间内无选手进行抢答〔按对应按钮〕,那么系统短暂报警,并且禁止选手超时抢答,抢答时间数码管上显示00。利用本次设计电路制造成的定时抢答器,即可轻松实现在64人或64个代表队之间进行的抢答比赛中进行控制,使得这一活动更加趣味、公平。通过这次课程设计,掌握51单片机的原理,了解简单多功能抢答器组成原理,初步掌握多功能抢答器的调整及测试方法,提高动手能力和排除故障的能力。同时通过本课题设计与装配、调试,稳固了所学的理论知识,了解了多功能抢答器各单元电路之间的关系及相互影响,从而能够正确设计、计算定时计数的各个单元电路。第2章总体方案2.1方案比拟方案一:采用数字电路实现定时抢答器的总体框图如图2-1所示,它由主体电路和扩展电路两局部组成。主体电路完成根本的抢答功能,即开始抢答后,中选手按动抢答按钮时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成定时抢答功能。主要是对秒脉冲产生电路计算从而到达定时功能。抢答抢答按钮主持人控制开关秒脉冲产生电路优先编码电路控制电路定时电路锁存器译码电路译码电路报警电路显示电路显示电路图2-1数字抢答器组成框图方案二:采用单片机实现采用单片机对矩阵键盘进行不间断的扫描,通过判断I/O口的不同状态确认抢答者的号数,再将其送入显示电路显示出抢答者的号数。相比方案一而言,此方案采用单片机为控制核心大大简化了系统电路结构,把各种处理的功能整合在了单片机内部。此方案把软件的设计作为设计重点,在原始的单一功能上添加了倒计时抢答、答题倒计时、显示选手号等新颖的附属功能,并保存了传统的报警局部,电路还较简单,这样既节约了资源,而且到达了设计的要求。具体方框图如2-2所示。这是一种单片机控制的智能化抢答器,该抢答器可以克服普通抢答器存在的各种缺陷。本系统的功能是通过按下抢答键的按钮使单片机相应的端口线读入信号,经过处理后输出显示所按下的键号。本系统还具备筛选第一有效抢答信号、显示超前违规抢答信号、以及可变的抢答倒计时信号和答题倒计时信号等功能。图2-2方案二框图对上面两种方案进行比拟,可以看出,第一种方案的电路实现起来电路原理很简单但在电路方面显得很复杂,要设计到的电路太多,且本钱上面也是不少的开支。第二种方案同第一种方案比拟,最大的优点是电路非常简单,降低电路复杂程度,因此,从实现的难易程度以及所能到达自身要求性能指标方面考虑,我们选择方案二来实现智能抢答器。显示电路可以采用两种方案:一种是直接运用LCD液晶显示,即直接通过单片对其进行显示以及数据处理,但占用单片机的I/O口比拟多;另外一种是通过单片机控制译码器将译码器输出的数据送给数码管进行显示,此电路的优点在于节约了单片机的I/O口。因此,我们在此选择第二种方案,即通过单片机控制译码器将译码器输出的数据送给数码管进行显示。2.2方案论证无论是学校、工厂、军队还是益智性电视节目,都会举办各种各样的智力竞赛,都会用到抢答器。目前市场上已有各种各样的智力竞赛抢答器,但绝大多数以模拟电路、数字电路或者模拟电路与数字电路相结合的产品。这局部抢答器已相当成熟,但是可以看到功能越多的电路相对来说就越复杂,且本钱较高,故障高,显示方式简单,甚至没有显示电路。近年来随着科技的飞速开展,单片机的应用正不断走向深入。所以我们选用单片机作为核心部件进行逻辑控制及信号的产生,用单片机本身的优势使竞赛真正到达公正、公平、公开。根据题目的要求,本次设计的智能抢搭器可分解为三大局部:第一局部为88矩阵键盘与4个独立键盘,为了设计出尽可能多的抢搭人员按键,因此我们采用88矩阵扫描;第二局部为显示抢答者的号数与倒计时的时间;第三局部为单片机控制单元,负矩阵键盘的扫描和报警电路的控制,以及人机交互与各方面数据的处理。如图2-3所示。MCU主控单元MCU主控单元倒计时显示抢答者显示88矩阵扫描电路人机交换〔主持人〕报警电路图2-3系统结构图88矩阵键盘是通过单片机I/O口不间断的对矩阵键盘提供扫描脉冲,通过单片机读回I/O的数据进行抢答者的位置判定,最后将数据送入显示译码单元。显示时,译码电路是将单片机输出的BCD码送入译码器,通过其译码后送入数码显示电路。倒计时电路与抢答者显示电路中都是运用这种方式进行显示的。人际交换系统主要是由主持人设定倒计时时间以及复位等功能。第3章单元电路设计3.1主控模块设计AT89C52单片机简介AT89C52单片机是一种低功耗、高性能CMOS8位微控制器,具有8K字节在线系统可编程Flash存储器,80C51产品指令和引脚完全兼容。在单芯片上拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C52单片机能为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。另外,AT89C52单片机可降至0Hz静态逻辑操作,支持两种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89C52芯片的引脚结构如图3-1所示。图3-1AT89C52单片机的引脚排列图AT89C52单片机有40个引脚,采用40引脚的双列直插封装方式。图3-1中的引脚可以分为四类:2个时钟引脚〔XTAL1、XTAL2〕、32个外部双向输入/输出〔I/O〕端口〔P0、P1、P2、P3〕、4个控制类引脚〔RST/VPD、ALE/、、/〕。AT89C52单片机内部主要包括以下功能部件:〔1〕8位的CPU。〔2〕4K字节的掩膜ROM。〔3〕128字节的SRAM。〔4〕4个8位的并行口。〔5〕2个全双工的中行口。〔6〕2个16位的定时器/计数器。〔7〕5个中断源,两个中断优先级的中断系统。〔8〕内部振荡器。3.1.2控制模块设计电源、时钟信号以及复位电路是单片机工作的根本条件,缺一不可。单片机系统的根本工作电路包括电源电路、时钟电路、复位电路。电源模块为系统板上的其它模块提供+5V电源。系统板可从USB接口获取+5V电源,即用相应配套的USB线从电脑主机上获取+5V直流电源。单片机的时钟信号用来为单片机芯片内部的各种操作提供时间基准。由于AT89C52单片机芯片内有时钟振荡电路,因此设计采用内部时钟方式,只要在单片机的XTAL1和XTAL2引脚外接石英晶体和微调电容,就构成了自激振荡器并在单片机内部产生时钟脉冲信号,具体电路设计如图3-4所示。图中电容C1和C2的作用是稳定频率和快速起振,其值为5~30pF,在此选择22pF;晶振X1的振荡频率范围在1.2~12MHz之间选择,本设计选择12MHz。复位电路使单片机或系统中的其他部件处于某种确定的状态。当在AT89C52单片机的RST引脚处引入高电平并保持2个机器周期,单片机内部就执行复位操作。实际应用中,复位操作有两种根本形式:一种是上电复位。另一种是按键复位。按一下开关会在RST端出现一段时间的高电平,使单片机复位,平安可靠。所以,本次设计中采用按键复位方式,具体电路设计如图3-4所示。图3-4单片机主控模板设计3.2键盘模块设计键盘是单片机应用系统最常用的输入设备,操作人员可以通过键盘向单片机系统输入指令、地址和数据,实现简单的人机通信。3.2.1选手按键电路矩阵式键盘是一种常见的输入装置,在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,两个端口〔如P1、P2口〕就可以构成88=64个按键,而且线数越多,区别也就越明显。当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出低电平,一旦有键按下,那么输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键被按下了。所以,本设计采用矩阵式键盘,如图3-5所示,为64键矩阵式键盘。图3-564键矩阵式键盘3.2.2控制按键电路控制电路是抢答器所必要的局部,它由主持人控制,用于控制开始/停止抢答、抢答时间和答题时间的调整。采用功能按键实现,如图3-6所示。图3-6控制按键电路3.3数码管译码显示模块设计3.3.1数码管及其字形编码数码管由8个发光二极管〔以下简称字段〕构成,通过不同的组合可用来显示数字0~9、字符A~F、H、L、P、U、符号“-”及小数点“.”。数码管的外形结构如图3-7〔a〕所示,数码管又分为共阴极和共阳极两种结构,分别如图3-7〔b〕和图3-7〔c〕所示,此次设计中所用的是共阴极数码管。〔a〕〔b〕〔c〕图3-7数码管的内部结构图所谓共阴极,即是将所有LED的阴极连接到一起,而共阳极使将所有的阳极被连接到了一起。但不管哪种结构,其显示设计的原理根本相同,唯一不同的是驱动电路的设计有差异,一般共阴极采用推〔Push〕电流的方式来驱动,而共阳极结构那么采用拉〔Pull〕电流的方式来驱动。在共阴极数码管中,当某段驱动电路的输出端为低电平时,那么该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符,此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。对照图3-9所示,字形码各位定义为:数据线D0与a字段对应,D1与b字段对应……以此类推。要显示“0”,共阳极数码管的字形编码应为11000000B〔即C0H〕;共阴极数码管的字形编码应为00111111B〔即3FH〕……以此类推,可求得数码管字形编码见表3-1。表3-1数码管字形编码表3.3.2数码管译码显示电路将几只数码管的a-h分别连在一起,并与单片机段码控制端P0.0~P0.3口分别连在一起,作为数码管段码控制。P0口的P0.4~P0.7那么与数码管公共端连在一起作为位码选择控制,使每只数码管可以单独显示。由于单片机端口驱动能力缺乏,数码管的电流较大,所以在P0.0~P0.3口接上拉电阻增加驱动能力,P0.4~P0.7口作为位码控制端驱动共阴型数码管显示。同时,使用74HC4511作为单片机BCD码输出的译码器,将其BCD码转换成为能是数码管显示数字的二进制编码。P0.4~P0.7端口也是用来进行数码管动态扫描用的,能同时显示抢答者的位数与倒计时的时间。如图3-8所示。图3-8译码显示电路3.4报警电路如图3-9所示,当主持人按下开始键,倒计时到“抢答时间显示”数码管上显示5秒都无人抢答时,D1〔LED-RED〕开始闪烁,直到显示00时,D1〔LED-RED〕亮。主持人按下K3“开始/启用”键后,如果在倒计时27秒时45号选手成功抢答,那么“抢答时间显示”数码管上显示27,“抢答选手号显示”数码管上那么显示45,同时D2(LED-BLUE)亮。图3-9报警电路第4章软件设计软件的主要功能包括:人机交互,矩阵键盘的扫描及信号的处理。其中,最核心的功能是控制矩阵键盘的扫描及数据的处理,为实现方便,我们采用88矩阵扫描。系统接通电源,单片机进行内部扫描的同时,可以调节抢答时间,如果没有调节抢答时间,那么抢答器时间为设置的默认值〔抢答时间30s〕。在未按下K3“开始/启用”键时,选手将无法抢答;当按下K3“开始/启用”键时,单片机开始倒计时并送到数码管显示,此时选手才能抢答,同时在LED数码管上显示选手号,D2(LED-BLUE)亮。如果在按下K3“开始/启用”键,直到倒计时显示5秒时仍然无人抢答,那么D1〔LED-RED〕开始闪烁,直到显示00时,D1〔LED-RED〕亮。时间调节采用中断来实现,流程图如图4-1所示,如果想调节抢答时间,按K1或K2键进入调节状态,此时“抢答时间显示”数码管上会显示调节后的时间,调整范围为0s~99s,0s时再减1s会跳到99s,99s时再加1s会变到0s。系统主程序控制单片机系统按预定的操作方式运行,它是单片机系统程序的框架。系统上电后,对系统进行初始化。初始化程序主要完成对单片机内专用存放器的设定,单片机工作方式及各端口的工作状态的规定流程图如图4-2所示。调节允许抢答时间调节允许抢答时间显示抢答时间时间加时间减显示调节后时间确定图4-1中断流程图开始系统初始化等待主持人设定倒计时8开始系统初始化等待主持人设定倒计时88矩阵键盘扫描〔Y/N〕判断位号显示NY图4-2系统程序流程图第5章整机原理由整机原理图〔附录1〕可知,单片机AT89C52的P1口和P2口接矩阵按键开关;P0口作为输出端,分别接入相对应的74HC4511译码器和作为“抢答时间显示”、“抢答选手号显示”的数码管,以及作为驱动电阻的排阻;P3.5~P3.6口接的是报警电路,由发光二极管D1、D2组成;P3.0~P3.3口作为输入端,接的是主持人所用的按键K1~K4。系统接通电源后,抢答器处于禁止抢答状态,“抢答时间显示”数码管上显示系统设定的时间30s,“抢答选手号显示”数码管上显示00。将K3“开始/启用”键开关按下时,系统开始倒计时,选手如果在定时时间内抢答,抢答器将完成:优先判断、选手号锁存、选手号显示、抢答时间显示、发光二极管提示等,此时该选手抢答成功,而其他选手那么无法再抢答。例如,当按下K3“开始/启用”键后,如果在倒计时27秒时45号选手成功抢答,那么“抢答时间显示”数码管上显示27,“抢答选手号显示”数码管上那么显示45,同时D2(LED-BLUE)亮。系统接通电源后,单片机进行内部扫描的同时,还可以通过K1“+1s”键和K2“-1s”键调节抢答时间,在整个系统设定的时间当中如果没有调节抢答时间,那么抢答器工作为设置的默认值〔抢答时间30s〕,等待被按下K3“开始/启用”键进入抢答计时。当按下K3“开始/启用”键,倒计时到“抢答时间显示”数码管上显示5秒都无人抢答时,D1〔LED-RED〕开始闪烁,直到显示00时,D1〔LED-RED〕亮。如果需再次抢答,那么必须由主持人将K4“重新抢答”键开关按下。第6章仿真与调试6.1软件的仿真首先编写C程序,然后仿真直到0错误,0警告,最后生成hex文件以备后用,如图6-1所示。图6-1程序仿真完成在软件ProteusISIS中的原理图编辑区画好硬件电路图,设置好相应参数,导入hex文件。具体功能仿真如下:电路初始化,抢答时间显示30秒,抢答选手号显示00,等待主持人按下开始键,如图6-2所示。图6-2电路初始化抢答时间显示调至60秒时,如图6-3所示。主持人按下开始键,倒计时到5秒都无人抢答时,D1〔LED-RED〕开始闪烁,直到显示00时,D1〔LED-RED〕亮,如图6-4所示。主持人按下开始键,在倒计时27秒时45号选手成功抢答,抢答时间显示器显示27,抢答选手号显示45,同时D2(LED-BLUE)亮,如图6-5所示。图6-3抢答时间显示调至60秒图6-4无人抢答时显示图6-545号选手成功抢答6.2实物的制作与调试总结时至今日,几个礼拜的毕业设计终于可以画上一个句号,但是现在回想起毕业设计的整个过程,颇有心得!没有接受任务以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己以前的看法有点太片面、太偏激了。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对整个毕业设计的过程做一下简单的总结。首先,接到任务以后进行选题。选题是毕业设计的开端,选择恰当的、感兴趣的题目,对于整个毕业设计是否能够顺利进行关系极大。好比走路,第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。否那么,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。因此,选题时一定要考虑好。然后,就是找资料了。查找资料是做毕业设计的前期准备工作。除了上网查找资料外,到图书馆、书店、资料室去虽说是比拟原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,下一步就是在这样一个根底上,综合已有的资料来更透彻的分析题目。有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。编写源代码的时候最好是编写一个小模块就进行调试,这样可以防止设计的最后出现太多的错误而乱成一团糟。每做一会儿会发现一处错误就要即时修改,就这样不断的修改调试,再修改再调试。在整个毕业设计过程中使我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功的喜悦。虽然这个设计还不是很完善,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。参考文献[1]朱永金,成友才.《单片机应用技术》.北京中国劳动社会保障出版社,2007[2]何立民.《单片机高等教程》.北京航空航天大学出版社,2000[3]何立民.《单片机应用系统设计配置与接口技术》.北京航空航天大学出版社,2001[4]雄建云.《Protel99seEDA技术及应用》.北京机械工业出版社,2007[5]华永平,陈松编著.《电子线路课程设计》.东南大学出版社[6]林春方.《电子线路学习指导与实训》.北京电子工业出版社,2004[7]杨宝清,宋文贵主编.《实用电路手册》.机械工业出版社[8]张存礼,韩爱娟主编.《电子技术综合实训》.北京师范大学出版社[9]杨颂华,冯毛官等主编.《数字电子技术根底》.西安电子科技大学出版社附录1抢答器原理图附录2程序设计#include<reg52.h>unsignedcharcodetable1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}; //数码管段选表BCD码〔0-9〕unsignedcharcodetable0[]={ 0xe0,0xd0,0xb0,0x70}; //数码管位选表共四位unsignedcharcodetable2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //88编码行列扫unsignedchardisplay[]={0,0,0,0};//四位数码管地址intnum,num1; //定义变量num为动态的记录倒计时unsignedcharx,temp,k,a,num2,count,x2;//定义uchar变量,num2为暂存变量存储倒计时sbitk1=P3^0;//按键1定义sbitk2=P3^1;//按键2定义sbitk3=P3^2;//按键3定义sbitk4=P3^3;//按键4定义sbitsp=P3^4;//倒计时提示信号输出端voidsw1(); //函数申明voidsw2(); voidsw3(); voidsw4(); voidsw5(); voidsw6(); voidsw7(); voidsw8(); voidxianshi();//函数申明voidinit();//函数申明,假设在调用函数前此申明可以省略voiddelay(unsignedcharz) //带参数的延时函数延时为x*1ms{Unsignedcharx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit() //初始化函数{a=0; //全局变量a初值赋为零TMOD=0x01;//定时器工作为方式1EA=1; //开总中断ET0=1; //开总定时器0中断TH0=(65536-10000)/256;//定时器0高八位赋初值TL0=(65536-10000)%256;//定时器0低八位赋初值if(k1==0) //检测按键1有无按下{delay(5); //延时消抖if(k1==0) //再次确认按键1有无按下{num++; //有那么倒计时加1if(num>99) //检测倒计时设置是否大于99{num=0; //假设倒计时设置大于99那么自动回到0}num2=num; //将设定好了的倒计时赋给暂存变量num2while(k1==0); //等待按键释放,又叫松手检测}}if(k2==0) //检测按键2有无按下{delay(5);if(k2==0){num--; //有那么倒计时减1if(num<1) //检测倒计时设置是否小于1{num=99; //假设倒计时设置小于1那么自动回到99}num2=num;while(k2==0); }}if(k3==0) //检测按键3有无按下{delay(5); if(k3==0) {x++; //有那么变量X加1if(x>1) //检测倒计时设置是否大于1{x=0; //是那么自动回到0}}}}voidkeyboad() //按键编码函数{while(1) {if(P2==0xfe) //检测行扫描是否为0xfe{ sw1(); //是那么调用sw1()函数 }if(P2==0xfd){ sw2();}if(P2==0xfb){ sw3(); }if(P2==0xf7){ sw4(); }if(P2==0xef){ sw5(); }if(P2==0xdf){ sw6(); }if(P2==0xbf){ sw7(); }if(P2==0x7f){ sw8(); }}}voidsw1(void)//抢答者编码函数1—8号{switch(P1) //判断P1口的返回值{ case0xfe:{delay(5);num1=1;xianshi();}break;//抢答者1号编码,同时调用延时和显示函数 case0xfd:{delay(5);num1=2;xianshi();}break; case0xfb:{delay(5);num1=3;xianshi();}break; case0xf7:{delay(5);num1=4;xianshi();}break; case0xef:{delay(5);num1=5;xianshi();}break; case0xdf:{delay(5);num1=6;xianshi();}break; case0xbf:{delay(5);num1=7;xianshi();}break; case0x7f:{delay(5);num1=8;xianshi();}break;//抢答者8号编码,同时调用延时和显示函数 case0xfc:{delay(5);num1=1;xianshi();}break;//抢答者1号编码,此可以不要类似有限编码,同时调用延时和显示函数 case0xfa:{delay(5);num1=1;xianshi();}break; case0xf6:{delay(5);num1=1;xianshi();}break; case0xee:{delay(5);num1=1;xianshi();}break; case0xde:{delay(5);num1=1;xianshi();}break; case0xbe:{delay(5);num1=1;xianshi();}break; case0x7e:{delay(5);num1=1;xianshi();}break;//抢答者1号编码,此可以不要类似有限编码,同时调用延时和显示函数 default:break; //假设是其它值那么返回 } if(k4==0) //检测按键4有无按下,类似于复位按键 { num=num2; //假设按下那么将事先设置好的暂存变量赋给倒计时 num1=0; //抢答者号数清零 TR0=1; //翻开定时器0倒计时开始计时 return; //退出此函数 }}voidsw2(void) //抢答者编码函数9—16号{ switch(P1) { case0xfe:{delay(5);num1=9;xianshi();}break;//抢答者9号编码,同时调用延时和显示函数 case0xfd:{delay(5);num1=10;xianshi();}break; case0xfb:{delay(5);num1=11;xianshi();}break; case0xf7:{delay(5);num1=12;xianshi();}break; case0xef:{delay(5);num1=13;xianshi();}break; case0xdf:{delay(5);num1=14;xianshi();}break; case0xbf:{delay(5);num1=15;xianshi();}break; case0x7f:{delay(5);num1=16;xianshi();}break; default:break; } if(k4==0) { num=num2; num1=0; TR0=1; return; }}voidsw3(void) //抢答者编码函数17—24号{ switch(P1) { case0xfe:{delay(5);num1=17;xianshi();}break;//抢答者17号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=18;xianshi();}break;case0xfb:{delay(5);num1=19;xianshi();}break; case0xf7:{delay(5);num1=20;xianshi();}break; case0xef:{delay(5);num1=21;xianshi();}break; case0xdf:{delay(5);num1=22;xianshi();}break; case0xbf:{delay(5);num1=23;xianshi();}break; case0x7f:{delay(5);num1=24;xianshi();}break;default:break; } if(k4==0) { num=num2; num1=0;TR0=1; return; }}voidsw4(void) //抢答者编码函数25—32号{ switch(P1) { case0xfe:{delay(5);num1=25;xianshi();}break;//抢答者25号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=26;xianshi();}break; case0xfb:{delay(5);num1=27;xianshi();}break; case0xf7:{delay(5);num1=28;xianshi();}break; case0xef:{delay(5);num1=29;xianshi();}break; case0xdf:{delay(5);num1=30;xianshi();}break; case0xbf:{delay(5);num1=31;xianshi();}break; case0x7f:{delay(5);num1=32;xianshi();}break;default:break;} if(k4==0) { num=num2; num1=0;TR0=1; return; }}voidsw5(void) //抢答者编码函数33—40号{ switch(P1) { case0xfe:{delay(5);num1=33;xianshi();}break;//抢答者33号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=34;xianshi();}break; case0xfb:{delay(5);num1=35;xianshi();}break; case0xf7:{delay(5);num1=36;xianshi();}break; case0xef:{delay(5);num1=37;xianshi();}break; case0xdf:{delay(5);num1=38;xianshi();}break; case0xbf:{delay(5);num1=39;xianshi();}break; case0x7f:{delay(5);num1=40;xianshi();}break; default:break; } if(k4==0) { num=num2; num1=0; TR0=1; return; }}voidsw6(void) //抢答者编码函数41—48号{ switch(P1) { case0xfe:{delay(5);num1=41;xianshi();}break;//抢答者41号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=42;xianshi();}break; case0xfb:{delay(5);num1=43;xianshi();}break; case0xf7:{delay(5);num1=44;xianshi();}break; case0xef:{delay(5);num1=45;xianshi();}break; case0xdf:{delay(5);num1=46;xianshi();}break; case0xbf:{delay(5);num1=47;xianshi();}break; case0x7f:{delay(5);num1=48;xianshi();}break; default:break; } if(k4==0) { num=num2; num1=0;TR0=1; return; }}voidsw7(void) //抢答者编码函数49—56号{ switch(P1) { case0xfe:{delay(5);num1=49;xianshi();}break;//抢答者48号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=50;xianshi();}break; case0xfb:{delay(5);num1=51;xianshi();}break; case0xf7:{delay(5);num1=52;xianshi();}break; case0xef:{delay(5);num1=53;xianshi();}break; case0xdf:{delay(5);num1=54;xianshi();}break; case0xbf:{delay(5);num1=55;xianshi();}break; case0x7f:{delay(5);num1=56;xianshi();}break; default:break;} if(k4==0) { num=num2; num1=0;TR0=1; return; }}voidsw8(void) //抢答者编码函数57—64号{ switch(P1) { case0xfe:{delay(5);num1=57;xianshi();}break;//抢答者48号编码同时调用延时和显示函数 case0xfd:{delay(5);num1=58;xianshi();}break; case0xfb:{delay(5);num1=59;xianshi();}break; case0xf7:{delay(5);num1=60;xianshi();}break; case0xef:{delay(5);num1=61;xianshi();}break; case0xdf:{delay(5);num1=62;xianshi();}break; case0xbf:{delay(5);num1=63;xianshi();}break; case0x7f:{delay(5);num1=64;xianshi();}break;default:break; } if(k4==0) { num=num2; num1=0;TR0=1; return;}}voidxianshi() //显示函数{unsignedchartime;TR0=0; //关定时器num=0; //抢答者号数清零for(time=200;time>0;time--) { sp=~sp; //抢答者成功提示信号 } while(1) { for(a=0;a<4;a++)//数码管动态扫描4次 { delay(5);//延时5毫秒 P0=table1[display[a]]|table0[a];//送数码管段选与位选 } display[0]=num/10; //数码管位选相对应的数据抢答者号数的十位 display[1]=num%10; //数码管位选相对应的数据抢答者号数的个位 display[2]=num1/10; //数码管位选相对应的数据倒计时号数的十位 display[3]=num1%10; //数码管

温馨提示

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

评论

0/150

提交评论