八路抢答器毕业论文

摘 要

本设计是以八路抢答为基本理念。本设计先做拉仿真,然后开始具体电路制作。考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。

关键词: AT89C51;抢答器;计时器;毕业设计

- I

目 录

第一章 绪论 ....................................................... 1

第二章 总体方案设计与要求 ......................................... 2 2. 1 设计的任务及要求 ............................................. 2

2.2 设计方案论证 ................................................. 2

2.2.1 控制案芯片的方案选择 .................................... 2

2.2.2 显示部分的方案选择 ...................................... 3

第三章 系统硬件的设计 ............................................. 4

3.1时钟频率电路的设计 ........................................... 4

3.2复位电路的设计 ................................................ 4

3.3显示电路的设计 ................................................ 5

3.4键盘扫描电路的设计 ............................................ 6

3.5发声电路 ...................................................... 7

第四章 系统软件的设计 ............................................. 8

4.1软件电路设计 .................................................. 8

4.2程序功能流程图 ................................................ 9

第五章 软硬件综合调试 ............................................ 11

5.1软件仿真 ..................................................... 11

5.1.1 Keil uVsion2软件仿真 .................................... 11

5.1.2 Protues 7 professional软件仿真 .......................... 12

5.2 软件仿真过程说明 ............................................. 13

5.3心得体会与结果 ............................................... 13

总结 ............................................................. 15

致 谢 ........................................................... 16

参考文献 ......................................................... 17

附件 ............................................................. 18

(1)系统原理图 .................................................. 18

(2)程序清单 .................................................... 19

- II

第一章 绪论

抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。现在大多数抢答器均使用单片机(如MCS-51型)和数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或抢按后的计时、选手得分显示等功能。

本课题利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码。用开关做键盘输出,扬声器发生提示。系统达到要求:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间为1-99s设定;可以显示是哪位选手有效抢答和无效抢答;抢答时间和回答问题时间倒记时显示,时间完后系统自动复位;按键锁定,在有效状态下,按键无效非法。

本系统采用模块化设计智能抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。主持人有开始和结束、复位键。在后台主持人可以修改,抢答时间和选手回答问题的时间设置,原始状态下抢答时间为0s,回答问题时间为0s。新时间开始有效,主持人按键开始后,选手开始抢答为有效,数码显示屏显示抢答时间倒计时和选手号,在最后扬声器发生提示。如果主持人没有按下开始键而选手就抢答视为犯规。主持人可按键结束,新一轮抢答开始。

- 1

第二章 总体方案设计与要求

2. 1 设计的任务及要求

1、在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效。

2、抢答限定时间和回答问题的时间可以1-99s设定。

3、可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示。

4、抢答时间和回答问题时间倒记时显示,时间完后系统自动复位。

5、按键锁定,在有效状态下,按键无效非法。

2.2 设计方案论证

2.2.1 控制案芯片的方案选择

1. 用可编程逻辑器件设计。可采用ALTERA公司的FLEX10K系列PLD器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势。

2. 用凌阳16位单片机设计。凌阳16位单片机有丰富的中断源和时基,方便本实验的设计。它的准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高。

3. 主控芯片使用51系列AT89C51单片机,AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 芯片所以选用AT89C51。通用性强。

- 2

2.2.2 显示部分的方案选择

1. 液晶显示方式。液晶显示效果出众,可以运用菜单项来方便操作,但是在显示时,特别是使用秒表功能时扫描速度跟不上,屏幕会有明显的闪烁。而且由于61板的存储空间有限,液晶显示就不能与语音播抱程序同时实现。这些大大影响了电子万年历的性能。

2. 相比液晶显示,数码管虽然操作比液晶显示略显繁琐,但可视范围十分宽,而且经济实惠,也不需要复杂的驱动程序。所以最后选择LED数码管显示方案。

综上所述,按照系统设计功能的要求,确定硬件系统由主控制器、显示模块、键盘接口共3个模块组成,总体系统构成框图如下图所示。

八路抢答器毕业论文

图2.1 总体系统构成框图

- 3

第三章 系统硬件的设计

本设计分为硬件设计和软件设计,这两者相互结合,不可分离;从时间上看,硬件设计的绝大部分工作量是在最初阶段,到后期往往还要做一些修改。只要技术准备充分,硬件设计的大返工是比较少的,软件设计的任务贯彻始终,到中后期基本上都是软件设计任务,随着集成电路技术的飞速发展,各种功能很强的芯片不断出现,使硬件电路的集成度越来越高,硬件设计的工作量在整个项目中的所占的比重逐渐下降。

3.1时钟频率电路的设计

单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。时钟电路如图3.1所示。

选用石英晶体振荡器。此电路

在加电大约延迟10ms后振荡器起

振,在XTAL2引脚产生幅度为3V

左右的正弦波时钟信号,其振荡频

率主要由石英晶振的频率确定。电

路中两个电容 C1,C2的作用有两

个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF,有选择的晶振大小决定。

单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12?s。

3.2复位电路的设计

-

八路抢答器毕业论文

4

单片机的第9脚

RST为硬件复位端,只要

将该端持续4个机器周

期的高电平即可实现复

位,复位后单片机的各

状态都恢复到初始化状

态,其电路图如图3.2

所示。电解电容C3、电阻R9构成复位电路。由于单片机是高电平复位,所以单片机的9脚RESET管脚处于高电平,此时单片机处于复位状态。当上电后,由于电容的缓慢充电,单片机的9脚电压逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电复位完毕,系统程序从0000H开始执行。

值得注意的是,在设计当中使用到了软件复位功能,倒计时时间的记忆功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

3.3显示电路的设计

显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。在这里我们使用的是七段数码管显示,通常在显示上我们采用的方法一般包括两种:一种是静态显示,一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中根据实际情况采用的是动态显示方法。

通过查表法,将其在数码管上显示出来,其中P0口为字型码输入端,P2口低3位为字选段输入端。在这里我们通过查表将字型码送给7段数码管显示的数字,数码管显采用的是七段共阴数码管,其中A~H段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1、COM3、COM4分别接到单

-

八路抢答器毕业论文

5

片机的P2.0、P2.1、P2.2,由单片机来决定当前该显示的是哪一位。在图中还有八个1K的电阻,连接在P0口上,用作P0口的上拉电阻,保证P0口没有数据输出时候处于高电平状态。

3.4键盘扫描电路的设计

键盘是人与单片机打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。

它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

采用了独立键盘的方式,本设计中有8个抢答按键输入,一个开始按键、一个结束按键,此外还有抢答时间调整键、回答时间调整键,加一按键、减一按键各一个。如图3.3所示。

- 6

3.5发声电路

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。

设计如图3.4所示。图中单

片机的14脚输出具有复合功能,

此处用到了单片机17脚的IO端

口功能,单片机通过内部定时器

的操作实现交替变换的波形输出

驱动扬声器发声。

本章详细讲述了以AT89C51为核心元件的抢答器的硬件电路设计过程,分析了电路。在设计过程中,实现抢答功能的是通过编写程序的方法集成在AT89C51内部。接着将程序下载到硬件电路中,配合周边的时钟电路,复位电路等,制作出符合设计要求的抢答器。

-

八路抢答器毕业论文

八路抢答器毕业论文

7

第四章 系统软件的设计

4.1软件电路设计

软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计基本定型后,也就基本上决定下来了。

软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。

软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。

各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比较容易编程,而监控程序较易出问题。这如同当一名操作工人比较容易,而当一个厂长就比较难了。

软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序(背景程序)和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序(键盘解释程序),显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断(如掉电中断)。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态”,以利于系统节电和抗干扰,其结构图如下:

- 8

图4.1软件系统结构图

4.2程序功能流程图

在本设计中包括了以下主要的程序:主程序,查询程序,非法抢答程序,抢答时间调整程序,回答时间调整程序,倒计时程序,正常抢答处理程序,犯规处理程序,显示及发声程序。主流程图如4.2所示:

八路抢答器毕业论文

- 9

图4.2 程序设计流程图

- 10

八路抢答器毕业论文

第五章 软硬件综合调试

5.1软件仿真

为了更好地完成课程设计这一重要教学环节,我们采用Proteus软件与Keil软件整合构建单片机虚拟实验平台。首先在PC上利用Proteus软件自己搭建硬件电路,并利用系统提供的功能完成电路分析、系统调试和输出显示的硬件设计部分;同时在Keil软件中编制程序,进行相应的编译和仿真,完成系统的软件设计部分。当系统的设计工作完成后,我们可以在PC上看到最终的运行效果。最后再通过proteus设计PCB,再完成真正硬件的调试。

采用以上方案具有以下优势:有利于促进课程和教学改革,更有利于人才的培养;从经济性、可移植性、可推广性角度讲,建立这样的课程设计平台是非常有意义的;利用仿真系统,可以节约开发时间和开发成本;利用仿真系统,具有很大的灵活性和可扩展性。

5.1.1 Keil uVsion2软件仿真

Keil C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强, 使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。C51 V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。因此,C51 V7版本无疑是8051开发用户的最佳选择。

- 11

图5.1 Keil uVsion2仿真图

5.1.2 Protues 7 professional软件仿真

Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,Proteus 是目前最好的模拟单片机外围器件的工具,它可以仿真51 系列、AVR,PIC 等常用的MCU 及其外围电路(如LCD,RAM,ROM,键盘,马达,LED,AD/DA,部分SPI 器件,部分IIC 器件...) Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。该软件的特点是:

①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

-

八路抢答器毕业论文

12

②支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。

③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。

④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

5.2 软件仿真过程说明

在软件调试过程中,第一阶段,我根据程序流程图在草稿上写出主体程序,然后逐步细化,采用模块化程序设计方法,如初始子程序,延时子程序等等,这样简洁明了,很方便查找问题;第二阶段,我将所写的程序输入到电脑上,利用Keil软件调试:新建项目,保存,新建文件,编译,仿真。在软件仿真中,我在工程项目的 Source Group1母文件夹下添加了两个子文件(一个原文件,一个修改后的文件) ,然后点击Rebuild All Target Files编译图标,编译器马上给我提示,程序正确!这个软件使得程序很快得到验证,也为我的设计提高了效率!

5.3心得体会与结果

通过这次对作息时间电铃控制系统的设计制作,让我在电路设计的基本上更进一步,也让我了解了关于数字钟的原理与设计理念。要设计一个成功电路首先进行软件模拟仿真在进行实际的电路制作,但是最后的成品不一定会成功,因为,在实际接线中会有各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功,所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次自主学习,让我对各种电路都有了大概的了解,也学会了几个软件的用法。所以说,坐而言不如立而行,对于这些

- 13

电路还是应该自己动手实际操作才会有深刻的理解,仿真图如下

图5.2仿真图

八路抢答器毕业论文

- 14

总 结

本文研究与设计的八路多功能抢答器采用了通用的电子元器件,利用AT89C51单片机及外围接口实现抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来。理论联系实践,体现出大学生动手能力。通过查资料和搜集有关的文献,培养了自学能力和动手能力。并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过毕业论文,我们学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。把握重点、攻克难关,学到用到、活学活用。在设计过程中由于时间仓促有很多地方难免存在不足之处,硬件设计已经完成,在软件设计中有些功能还尚未开发出来。但在以后的工作中,我们会严格要求自己,追求完美。

整个设计通过了软件和硬件上的调试、仿真。我想这对于自己以后的学习和工作都会有很大的帮助的。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。

但是,通过这次设计我也发现自己的很多不足之处。在设计过程中我发现自己考虑问题很不全面,自己的专业知识掌握的很不牢固,所掌握的计算机应用软件还不够多,我希望自己的这些不足之处能在今后的工作和学习中得到改善。而且,通过这次设计,我懂得了学习的重要性,学会了坚持和努力,这将为以后的学习做出了最好的榜样。

- 15

致 谢

在大学三年的时间大多在学习理论基础知识,实践的不并是太多。经过这次毕业设计,我接触到了更多元器件以及相关的使用调试经验,发现了自己很多不足之处,体会到了所学理论知识的重要性。理论知识结合实践操作加深了对理论知识的理解,而且知识掌握得越多,设计的会更好,更全面。

在设计过程中,通过针对性地查找资料,了解了些电子方面的资料,既增长了自己见识,补充最新的专业知识,又提高了自己的应用能力。

通过校园作息时间控制钟的设计,让我体会到单片机使用的广泛性以及其重要性,单片机技术的出现给现代控制领域带来了一项新的改变。目前,单片机在控制系统诸多领域中得到了极为广泛的应用,特别是其中S51系列的单片机的出现,具有很好的稳定性,更快和更准确的运算精度,推动了工业生产,影响着人们的工作和学习。所以我们要不断学习加强这方面的知识以及相关的知识,比如PCB电路板设计、汇编语言编程、C语言等。

总之这次毕业设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。

最后,我要感谢我的指导老师,是他给了我许多的帮助。三年的大学生活即将结束,在离开学校之前能够作一次毕业设计我很开心,因为我觉得从中我学到了不少东西。

- 16

参考文献

[1] 程相波,卫安军.基于MCS-51单片机的八路抢答器设计方法研究[J].北京工业职业技术学院学报,2007,(2).

[2]林凌,,丁茹,李小霞.新型单片机接口器件与技术[M].西安:西安电子科技大学出版社,20xx年.

[3]李增生.对《抢答器》的改进[J].电子制作,2000,(12).

[4]马轲瀛.八路数字抢答器系统[J].华商,2007,(23).

[5]高伟.AT89单片机原理及应用[M].北京:国防工业出版社,20xx年.

[6]蔡朝阳.单片机控制实习与专题制作[M].北京:北京航空航天大学出版社,20xx年.

- 17

附件

(1)系统原理图

八路抢答器毕业论文

J3

- 18

(2)程序清单

#include<at89x51.h>

#define uchar unsigned char

#define uint unsigned int

sbit k1=P1^7;

unsigned char code

disp_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,0x40};

uchar biaozhi,xuanshou,s,z,z1,tiaoshi,bianliang1,bianliang2; signed char time[]={0,0};

void delay(uint x) //延时函数

{

uint i,j;

for(i=x;i>0;i--)

for(j=125;j>0;j--);

}

void xianshi() //显示函数

{

P3_6=1;

P3_0=0;

P3_7=1;

P0=disp_code[xuanshou];

delay(5);

if(xuanshou!=10)

{

P3_0=1;

P3_6=0;

P3_7=1;

P0=disp_code[time[0]/10];

delay(5);

P3_0=1;

P3_6=1;

P3_7=0;

P0=disp_code[time[0]%10];

delay(5);

}

if(tiaoshi==1)

{

- 19

P3_0=1;

P3_6=0;

P3_7=1;

P0=disp_code[time[1]/10];

delay(5);

P3_0=1;

P3_6=1;

P3_7=0;

P0=disp_code[time[1]%10];

delay(5);

}

P3_0=1;

P3_6=1;

P3_7=1;

}

void anjian() //按键的识别和代码的输出

{

if(biaozhi==1)

{

if(P2!=0xff)

{

if(P2_0==0)

{

xuanshou=1;

}

if(P2_1==0)

{

xuanshou=2;

}

if(P2_2==0)

{

xuanshou=3;

}

if(P2_3==0)

{

xuanshou=4;

}

if(P2_4==0)

{

xuanshou=5;

}

- 20

if(P2_5==0)

{

xuanshou=6;

}

if(P2_6==0)

{

xuanshou=7;

}

if(P2_7==0)

{

xuanshou=8;

}

s=0;

time[0]=bianliang2;

biaozhi=2;

}

}

if(biaozhi==0)

{

if(P2!=0xff)

{

TR1=1;

}

}

}

void int1(void) interrupt 3 {

k1=0;

TH0=(65536-50000)/256; TL0=(65536-50000)%256; z++;

if(z==5)

{

z=0;

z1++;

k1=~k1;

}

if(z1==3)

{

k1=1;

z1=0; //蜂鸣器驱动函数的设计

- 21

TR1=0;

biaozhi=0;

xuanshou=10;

}

}

void int4(void) interrupt 0 {

biaozhi=3;

tiaoshi=0;

xuanshou=12;

time[0]++;

bianliang1=time[0];

}

void int5(void) interrupt 2 {

tiaoshi=1;

biaozhi=3;

xuanshou=10;

time[1]++;

bianliang2=time[1];

}

void int0(void) interrupt 1 {

TH0=(65536-50000)/256; TL0=(65536-50000)%256; s++;

if(s==20)

{

s=0;

time[0]--;

}

if(time[0]==0)

{

time[0]=0;

TR0=0;

TR1=1;

}}

void main()//主函数

{ //调节抢答时间函数 //调节做题时间函数 //中断递增

- 22

IT0=1; //开启外部中断0和1,用来控制强大时间和做题时间 EX0=1;

IT1=1;

EX1=1;

TMOD=0x11; //定时中断的初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

TF1=0;

ET1=1;

TF0=0;

EA=1;

ET0=1;

xuanshou=10; //xuanshou=10 是让其显示“--”

P2=0xff;

P1_7=1;

while(1) //死循环

{

if(biaozhi!=3) //判断主持开始抢答键是否按下

{

if(P3_1==0)

{

delay(2);

if(P3_1==0)

{

time[0]=bianliang1; //把调节好的抢答时间代入显示time[0] TR0=1;

biaozhi=1;

xuanshou=11;

}}}

if(P1_2==0) //判断是否按下调节时间 的确定按钮

{

delay(2);

if(P1_2==0)

{

TR0=0;

TR1=0;

biaozhi=0;

tiaoshi=0;

xuanshou=10;

}}

- 23

if(P1_4==0)

{

delay(150);

if(P1_4==0)

{

biaozhi=3;

tiaoshi=0;

xuanshou=12;

time[0]--;

if(time[0]<=0)

{

time[0]=0;

}}}

if(P1_5==0)

{

delay(150);

if(P1_5==0)

{

tiaoshi=1;

biaozhi=3;

xuanshou=10;

time[1]--;

if(time[1]<=0)

{

time[1]=0;

}} }

anjian();

xianshi();

}}

- 24

相关推荐