基于AT89C51的八路抢答器_第1页
基于AT89C51的八路抢答器_第2页
基于AT89C51的八路抢答器_第3页
基于AT89C51的八路抢答器_第4页
基于AT89C51的八路抢答器_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、电子综合设计实验报告 电子综合设计实验报告题 目综合电子技术8路抢答器学生姓名学 号 系 部计算机与信息工程系专业班级指导教师职 称年月2电子综合设计实验报告评审表姓 名专业班级学号题 目: 8路抢答器评审意见成 绩签名:评审时间: 年 月 日内容摘要随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也越来越重要。本文设计出以AT89C51单片机为核心的八路抢答器,采用了数字显示器直接指示,自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微

2、秒,也可分辨出是哪组优先按下的按键,充分利用了单片机系统结构简单、功能强大、可靠性好、实用性强的特点。本设计是以抢答为出发点。考虑到依需设定限时回答的功能,利用89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法,定时功能,计分功能等。关键词抢答器;单片机;LED数码显示管;定时器/计数器;扬

3、声器。ABSTRACTWith the development and popularization of science and technology , more and more kinds of competitions , including Responder role has become increasingly important . This paper designed to AT89C51 microcontroller as the core of eight Responder , using a direct digital display indicator,

4、automatic latching display the results, and automatically resets design ideas that can answer depending on the input signal, after the MCU control processing and produce different with the input signal corresponding to the output signal , and finally through the LED digital tube display the correspo

5、nding ones , even if the difference in time between the two groups to answer in a few microseconds , which can distinguish the pressed key priority groups , taking advantage of SCM system structure is simple , powerful, good reliability, practical features .The design is based on Responder as a star

6、ting point . By taking into account the need to set the limit to answer function, using 89C51 microcontroller and peripheral interface Responder system, using single-chip timer / counter timing and counting principle, the software and hardware organically combined , making the system can correctly f

7、or a time, while enabling digital tube display time correctly . Keyboard to do with the switch output , speakers from tips. While the system can be achieved : In the answer , the only answer is only valid after the start , if before the start Responder Responder as invalid ; full, the system automat

8、ically resets and Master Chronograph forced reset ; keys locked in the active state , the button is not illegal , timing , scoring functions.KEY WORDSResponder ;chip ;LED digital display ;tube timer ;counter Speaker目 录1 设计任务要求11.1 设计任务11.2 设计要求12 方案论证与选择23 理论分析与计算34 单元电路设计54.1 主要电路设计54.1.1 输入模块设计54.

9、1.2 单片机模块64.1.3 显示模块74.1.4 声音模块84.2 软件设计84.2.1 主程序设计84.2.2 定时器设计105 仿真分析115.1 Proteus 软件115.2 调试过程116 设计总结166.1 心得体会166.2 实践总结16参考文献17附录188路抢答器1.设计任务与要求1.1 设计任务设计能独立显示得分和组别的8路抢答器;且在主持人显示屏上能显示答题时间、答题的分值、抢答和犯规组别。1.2 设计要求(1)第一抢答信号的鉴别和锁存该电子抢答器共设8个组别,每组控制一个抢答开关,分别为S1-S8,在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组桌前指示灯亮,

10、组别显示字符闪烁3秒。同时,电路处于自锁状态,以使其他组的抢答器按钮不起作用。(2)计时功能在初始状态时,主持人可以设置答题时间的初时值。在主持人对抢答组别进行确认,并给出倒计时计数开始信号以后,抢答者便可开始回答问题。此时,显示器从初始值开始倒计时,计至5秒时扬声器发出报警信号。若参赛者在规定的时间内回答完问题,主持人即可给出计时停止信号,以免扬声器鸣叫。(3)计分功能在初始状态时,主持人可以给每组设置初始分值,也可设置每题的分值。(4)犯规设置对提前抢答者和超时抢答者给予蜂鸣警示,并显示犯规组别。 2.方案论证与选择(1)具有8路抢答输入(由独立按键实现),时间分辨率小于100ms。(2)

11、显示抢答剩余时间,初始为10秒。(3)主持人还没按“开始”键,对提前抢答者和超时抢答者给予蜂鸣警示,并显示犯规组别。(4)主持人按“开始”键,抢答成功,蜂鸣器响,同时显示抢答成功的号码,该组桌前指示灯亮,组别显示字符闪烁3秒。(5)主持人按“TIME+”和“TIME-”键,加减抢答时间。(6)主持人按“ANSWER”键,显示回答剩余时间。(7)计至5秒时扬声器发出报警信号。(8)若参赛者在规定的时间内回答完问题,主持人按“PAUSE”键即可给出计时停止信号。(9)在初始状态时,主持人可以给每组设置初始分值,也可设置每题的分值。(10)主持人按“清除键”键,复位为初始10秒,进入准备状态。3.

12、理论分析与计算抢答输入和控制输入共同控制单片机输出显示和蜂鸣器响,输出锁存控制输入的优先性。各模块如下:(1)输入模块:由独立按键实现抢答输入和“开始”“清除”控制输入。(2)单片机控制模块:采用AT89S51芯片控制输出。(3)输出锁存模块:采用74HC573芯片锁存数据。(4)显示输出模块:由四位共阳数码管输出显示倒计时和抢答者号码。(5)声音输出模块:由蜂鸣器的工作来控制声音。原理方框图如图3.1所示。显示输出声音输出输出锁存抢答输入模块控制输入模块单片机模块图3.1 原理方框图整体电路图如图3.2所示。图3.2 基于单片机的抢答器系统整体电路图4 单元电路设计4.1 主要电路设计4.1

13、.1 输入模块设计(1)抢答键输入模块抢答键输入电路图如图4.1所示。图4.1 抢答键输入电路图由8个独立按键表示1号,2号,3号,4号,5号,6号,7号,8号抢答者,一端接地一端分别接接单片机的P1.0,P1.1,P1.2, P1.3,P1.4,P1.5, P1.6,P1.7,如果按下,则相应I/O口变为低电平,从而控制单片机P1口。(2)“开始”“清除”“暂停”“回答”“加时间”“减时间”控制键输入模块 “开始”“清除”控制键输入电路图如图4.2所示图4.2 “开始”“清除”控制键输入电路图由6个独立按键控制“开始”、“清除”、 “暂停”、 “回答”、 “加时间”、 “减时间”,一端接地一

14、端分别接接单片机的P3.6,P3.7, P3.5,P3.1, P3.2,P3.3,如果按下,则相应I/O口变为低电平,从而控制单片机P1口。4.1.2 单片机模块单片机主要由程序设计和输入模块信号控制,用于对显示、声音等模块进行控制。单片机控制输出电路图如图4.3所示。接蜂鸣器接排阻和74HC753接数码管位选端图4.3 单片机控制输出电路图P0口连接有一个排阻,用作P0口的上拉电阻,保证P0口没有数据输出时候处于高电平状态。还接在74HC753芯片的D端,作为它的输入,锁存输出到数码管。P2口低四位接数码管位选端,P3.4接蜂鸣器。4.1.3 显示模块显示模块主要是显示抢答倒计时的时间,抢答

15、者号码。数码管显示方法包括两种:一种是静态显示,一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是:显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中根据实际情况采用的是动态显示方法。4位七段数码管显示电路如图4.4所示。接74HC753即P0口接AT89S51的P2端口低四位图4.4 4位七段数码管显示电路图上图中数码管采用的是4位一体七段共阳数码管,其中AG段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1, COM2,COM3,COM4分别接到单片机的P2.0,P2.1,P2.2

16、,P2.3,由单片机来决定当前该显示的是哪一位。通过查表法,将其在数码管上显示出来,其中P0口为字型码输入端,P2口低4位为字选段输入段。在这里我们通过查表将字型码送给7段数码管显示的数字。4.1.4 声音模块声音模块主要是单片机控制蜂鸣器发声。选取压电式无源蜂鸣器,声音的频谱范围约在几十到几千赫兹,编写程序控制单片机P3.4口的“高”“低”电平转换频率,产生一定频率的巨型波,接上蜂鸣器就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使蜂鸣器发出不同的声音。单片机控制蜂鸣器电路图如图4.5所示。图4.5 单片机控制蜂鸣器电路图单片机通过内

17、部定时器的操作实现交替变换的波形输出驱动扬声器发声。4.2 软件设计4.2.1 主程序设计一上电数码管显示100,表示初始时间为10s,0表示没有抢答,先扫描“开始”“清除”键,判断“开始”键是否按下,若按下,则开始倒计时,并扫描抢答键,若有抢答键按下,则显示抢答者号码和抢答的时间,判断倒计时是否为0,若是则蜂鸣器响。程序流程图如图4.6所示。开始键按下?扫描开始键和清除键显示倒计时,扫描抢答键显示抢答者号码,其灯亮,蜂鸣器响有抢答键按下吗YY倒计时为0吗?N蜂鸣器响,复位Y清除键按下?复位开始NNY按下加、减时间键?YN相应加减回答时间回答键按下吗开始倒计时回答时间Y按下暂停键?YN暂停时间

18、Y按下加减时间键,即加减分键?Y相应加减分显示结束图4.6 程序流程图4.2.2 定时器设计采用定时器/计数器T0的方式1定时,定时时间为50ms,对应的十进制数的初始值为15536,因使用的时钟为12MHz,所以定时的时间为1us*(65536-15536)=1us*50000=50ms。要想定时1s,需要20次中断,因此程序中定义了中断次数单元count,来对中断次数进行计数。要使最小分辨率为50ms,在定时器计时一次即50ms时,对键盘进行一次扫描实现。因为采用74HC753芯片,因此程序变得简单,只需将秒单元进行“second / 10”运算,即可得到秒的十位的BCD码,秒的个位BCD

19、码只需取余数“second % 10”运算就可得到,并都送P0口经锁存器利用动态方式显示。5 仿真分析5.1 Proteus 软件Proteus软件是由英国Labcenter Electronics公司于1989年推出的EDA工具软件,Proteus软件不仅具有原理布图,PCB自动制版或人工布线及互动电路仿真的功能,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出, 还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器,逻辑分析仪等,为单片机系统的虚拟仿真提供了功能强大的软硬件调试手段。Proteus软件的特点:(1)除了既可以仿真

20、模拟电路又可仿真数字电路以及数字、模拟混合电路外,其独特是能够仿真各种单片机及嵌入式处理器。(2)具有各种仿真仪器仪表工具,如示波器、逻辑分析仪、各种信号发生器、计数器、电压源、电压表、电流表、虚拟终端等,同一种仪器仪表可在同一电路中随意调动。(3)可以进行软、硬件结合的仿真系统,且仿真是交互的、可视化的。5.2 调试过程利用Keil uVision4软件进行程序编写,编译,调试,生成.hex文件,利用Proteus进行电路原理图描绘,然后把.hex文件载入AT89S51芯片中,再仿真,通过功能对照,来检查修改程序,一步步使仿真与实现功能相近。一开始蜂鸣器怎么的都不响,通过查资料请教别人,最后

21、发现是因为蜂鸣器的一次高低电平变换的程序没有循环,所以没有维持一定时间让它工作,通过在蜂鸣器的子程序中加入一个100次的循环,并是高低电平之间延时1ms发现蜂鸣器的工作是最合理的。后来又发现按下抢答键,倒计时不停止,经过很多次试验之后,发现是应该在判断抢答键是否按下的肯定条件下是定时器的使能标示位置0。(1)当主持人还没按下开始键,5号抢答者在按下抢答键,显示组别,组前灯亮。Proteus仿真运行图如图5.1所示图5.1 Proteus仿真运行图(2)当主持人按下开始键,6号抢答者在倒计时为8秒时按下抢答键时,Proteus仿真运行图如图5.2所示图5.2 Proteus仿真运行图(3)当主持

22、人按下加时键TIME+到20秒,并按下回答键ANSWER开始回答倒计时到17秒。Proteus仿真运行图如图5.3所示图5.3 Proteus仿真运行图当主持人按下加时键TIME+加分到30分,给6号打分。Proteus仿真运行图如图5.4所示图5.4 Proteus仿真运行图6 课程设计总结6.1 心得体会此次课程设计,先从分析题目开始,从课本上找类似可能实现的功能块,明确整体思路,大概画出整体电路模块,由于第一次接触实际应用设计,思维比较混乱,很多功能觉得考虑的地方太多,很难。后来去图书馆查阅了两天资料,找到类似的应用系统,仔细研究了一番,多了个没接触过的芯片,通过几本书上的资料,拼凑修改

23、之后还是仿真不了,也请教了一些老师,后来通过比较另外一种方案,觉得性价比和简便程度更高,所以放弃了原有的方案,重新开始设计。经过修改程序和仿真调试,显示的部分是差不多按我所想实现了,但蜂鸣器要么不响,要么能听到一丁点声响,参考了别的同学蜂鸣器响的程序,还有在网上找了很多关于蜂鸣器的资料,又请教老师问题,最终终于把蜂鸣器的问题解决了。6.2 实践总结经过这段时间不断查阅资料和请教别人的过程中,发现自己是多么的不懂,此次课程设计让我更加细心,认真地去做每一个部分,一步步的根据功能来测试电路,锁定要修改的地方,学到的不仅是单片机的知识,还有很多对于我们这个专业来说必备的一些技能。参考文献1.唐颖、程

24、菊花等.单片机原理与应用及C51程序设计M.北京大学出版社,2008年2.张毅刚、杨志明等.基于Proteus的单片机课程的基础实验与课程设计M.人民邮电出版社,2012年3.宋戈、黄鹤松等.51单片机范例大全M.中国邮电出版社,2010年4.徐爱钧、彭秀华等.单片机高级语言编程与uVision2应用实践M.电子工业出版社,2008年附录 源程序清单#include #define uint unsigned int #define uchar unsigned char unsigned char code table=0x40,0x79,0x24,0x30,0x19, 0x12,0x02,

25、0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e; /共阴极数码管编码表 0 - f显示sbit start= P36; / 变量定义sbit reset = P37; sbit answer= P31;sbit show=P35;sbit t1=P32;sbit t2=P33;sbit key1 = P10; sbit key2 = P11; sbit key3 = P12;sbit key4 = P13;sbit key5 = P14;sbit key6 = P15;sbit key7 = P16;sbit key8 = P17;sbit buzze

26、r = P34; bit start_flag = 0; bit answer_flag=0;bit show_flag=0;bit t1_flag=0;bit t2_flag=0;bit key1_flag = 0; bit key2_flag = 0; bit key3_flag = 0;bit key4_flag = 0;bit key5_flag = 0;bit key6_flag = 0;bit key7_flag = 0;bit key8_flag = 0;bit reset_flag = 0; bit action = 0; uchar second = 10; uchar co

27、unt = 0; uchar number = 0; uchar number_display = 0;uchar point=0;void delay(uint z) /延时函数 uint x,y; for(x=z;x0;x-) for(y=100;y0;y-);void display(uchar number,uchar second) /数码管显示驱动函数 uchar second_first,second_second; second_first = second / 10; second_second = second % 10; P2 = 0xfd; P0 = tablenumb

28、er; delay(2); P2 = 0xf7; P0 = 0x3f; delay(2); P2 = 0xfb; P0 = tablesecond_first; delay(2); P2 = 0xfe; P0 = tablesecond_second; delay(2);void start_keyscan() /开始键扫描函数 if(start = 0) delay(8); if(start = 0)&(!start_flag) start_flag = 1; action = 1; TR0 = 1; else start_flag = 0;void answer_keyscan()if(a

29、nswer=0)delay(8);if(answer=0)&(!answer_flag)answer_flag=1;action=2;TR0=1;number_display=0;elseanswer_flag=0;uchar key_scan4() /扫描时间+,if(t1=0)delay(8);if(t1=0)&(!t1_flag)t1_flag=1;delay(1000); /延时1秒 +1秒second+;elset1_flag=0;return second;if(t2=0)delay(8);if(t2=0)&(!t2_flag)t2_flag=1;delay(1000);secon

30、d-;elset2_flag=0;return second;/*void show_point()if(show = 0) delay(8); if(show = 0)&(!show_flag) show_flag = 1; action = 3; else show_flag = 0; */uchar key_scan3() /8位抢答键扫描函数 if(key1 = 0) delay(8); if(key1 = 0)&(!key1_flag) key1_flag = 1; number = 1; number_display = number; else key1_flag = 0; nu

31、mber = 0; if(key2 = 0) delay(8); if(key2 = 0)&(!key2_flag) key2_flag = 1; number = 2; number_display = number; else key2_flag = 0; number = 0; if(key3 = 0) delay(8); if(key3 = 0)&(!key3_flag) key3_flag = 1; number = 3; number_display = number;elsekey3_flag = 0;number = 0;if(key4 = 0) delay(8); if(ke

32、y4 = 0)&(!key4_flag) key4_flag = 1; number = 4; number_display = number;elsekey4_flag = 0;number = 0;if(key5 = 0) delay(8); if(key5 = 0)&(!key5_flag) key5_flag = 1; number = 5; number_display = number;elsekey5_flag = 0;number = 0;if(key6 = 0) delay(8); if(key6 = 0)&(!key6_flag) key6_flag = 1; number

33、 = 6; number_display = number;elsekey4_flag = 0;number = 0;if(key7 = 0) delay(8); if(key7 = 0)&(!key7_flag) key7_flag = 1; number = 7; number_display = number;elsekey7_flag = 0;number = 0;if(key8 = 0) delay(8); if(key8 = 0)&(!key8_flag) key8_flag = 1; number = 8; number_display = number;elsekey8_flag = 0;number = 0; if(number_display != 0)return 1;elsereturn 0;void reset_keyscan() / 复位键扫描函数if(reset = 0)delay(8);if(reset = 0)&(!reset_flag)reset_flag = 1;number_display

温馨提示

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

评论

0/150

提交评论