基于51单片机的八路抢答器设计 电气工程技术专业毕业论文_第1页
基于51单片机的八路抢答器设计 电气工程技术专业毕业论文_第2页
基于51单片机的八路抢答器设计 电气工程技术专业毕业论文_第3页
基于51单片机的八路抢答器设计 电气工程技术专业毕业论文_第4页
基于51单片机的八路抢答器设计 电气工程技术专业毕业论文_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

目录TOC\o"1-1"\h\u28349第一部分设计任务与调研 110610第二部分设计说明 326950第三部分设计成果 1226082第四部分结束语 2922516致谢 3013695参考文献 31 第一部分设计任务与调研1.1主要任务设计一款操作容易、简单实用基于51单片机的抢答器,能够实现以下功能。(1)能够实现八名选手同时抢答,且数码管能直观的显示抢答路线。(2)在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效。(3)抢答限定时间和回答问题时间可以设定(1~99s)。(4)要求显示是哪位选手有效抢答和无效抢答,正确按键后有声音提醒。(5)抢答时间和回答问题时间的倒记时显示,倒计时完后系统能够复位。(6)在有效状态下,按键锁定,强制按键无效。1.2调研的过程与总结1.2.1调研过程在80年代初,科技水平还不发达当时组织知识抢答赛之抢答环节,很多活动是用敲锣的方式发开始指令,旁边站一个人监视着赛场谁先举手就是谁抢答成功。随着电子技术的进步,出现了以二极管编码方式作为主要电路的最基本电子抢答器和用继电器做转换的电子抢答器,哪组选手抢答到了他们面前的灯就会亮起,当然这种抢答器现在看来是很简单且低级,但当时做出一套这样的抢答器价格都很高的。这个阶段虽然有能完成这样功能的电子设备,但当时还没有将其定义成一种商业产品。且在这种方式停留了至少10年左右。后来随着改革开放不断深入,各方面要求需要更公平,这时基本型电子抢答器问世了。基本型电子抢答器基本功能:带优先抢答功能、自动发出开始指令、且抢答完成后可以显示对应台号及“叮咚”提示。计分方式采用手翻记分牌。再后来带语音提示的智能抢答器问世。语音抢答器基本功能:带抢答功能和电子计分功能,可以发出“321开始”指令,自动判断抢答成功及抢答犯规的台号。并能语音报出“XX号台抢答成功”或“XX号台犯规”。选手得分可以自动加减并电子屏显示。目前市面上的智能抢答器种类繁多,功能各异,价格差异也很大。以数据传输可分为无线抢答器和有线抢答器,但无线抢答器价格昂贵。按照硬件种类分电子抢答器和电脑抢答器。电子抢答器的中心构造一般都是由数字电子式集成电路组成,其搭配的配件不同,又分为语音和非语音、计分和非计分抢答器。电脑抢答器就更为之复杂,需要各种设备、以及电脑软件的配合才能组成。1.2.1调研总结在调研过程中,虽然如今的抢答器产品五花八门、具有的功能全面、能满足各种竞赛的需求,但是所需的元件较为复杂,设计困难。因此我选择51单片机作为抢答器的芯片,它有电路简单、元件普通、操作方便等优点。很好的解决了设计过程中所遇到的一些问题。1.3思路与方法利用AT89C51单片机及外围接口来实现抢答功能。利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间和选手号码。采用模块化来设计抢答器,更容易安装调试。利用Keil4软件编程并与Protues软件能够联调,使抢答器能够模拟仿真运转。

第二部分设计说明2.1总设计框图本系统主要由AT89C51单片机模块、复位电路模块、晶振电路模块、按键输入模块、数码管显示电路模块以及报警与指示电路模块构成。以下是本系统设计的总设计框图:图2.1总设计框图2.2系统硬件电路设计2.2.1单片机模块AT89C51单片机主要提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。图2.2单片机引脚图图2.3AT89C51实物图2.2.2按键输入电路按键输入电路要实现的功能有两个:一是能供选手抢答锁定;二是要使主持人控制。一般按键是由一组按压式或触摸式开关构成的阵列。但键盘可分为编码式键盘和非编码式键盘两种:1.编码键盘通过硬件电路产生被按按键的键码,这种键盘所需程序简单,但硬件电路复杂、价格昂贵通常不被单片机系统采用。2.非编码键盘常用一些按键排列成行列矩阵,其硬件逻辑与按键编码不存在严格的对应关系,而要由所用的程序来决定。非编码键盘的硬件接口简单,但是要占用较多的CPU时间,通常采用可编程键盘管理芯片来克服这个缺点。本设计使用两种按键,一种是按键式非编码键盘和轻触式非编码开关。要进行数据的计算就必须先进行数据的输入,也就必须确定按键输入的数值是什么,这就需要对键盘进行扫描,从而确定究竟是哪个键按下。原理图如下:图2.4按键原理图1图2.5按键原理图22.2.3晶振电路晶体振荡器,简称晶振。在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。图2.6晶振电路图2.2.4数码管显示电路目前市面上应用最广泛的是由发光二极管构成的七段数码显示器。七段数码显示器就是将七个发光二极管(加小数点为八个)按一定的方式排列起来,七段a、b、c、d、e、f、g(小数点DP)各对应一个发光二极管,利用不同发光段的组合,显示不同的阿拉伯数字。图2.7驱动代码图图2.8数码管内部电路图2.2.5复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图2.9所示。电解电容C3、电阻R1构成复位电路。由于单片机是高电平复位,所以单片机的9脚RESET管脚处于高电平,此时单片机处于复位状态。当上电后,由于电容的缓慢充电,单片机的9脚电压逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电复位完毕,系统程序从0000H开始执行。值得注意的是,在设计当中使用到了软件复位功能,倒计时时间的记忆功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。图2.9复位电路原理图2.2.6报警电路设计我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。设计如图2.10所示。图中单片机的14脚输出具有复合功能,此处用到了单片机17脚的IO端口功能,单片机通过内部定时器的操作实现交替变换的波形输出驱动扬声器发声。图2.10报警电路图2.3系统软件设计从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义(输入输出定义)。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。图2.11软件系统结构图流程图是显示系统软件设计极好的方法,不论采用何种程序设计方法,程序总体结构确定后,一般以程序流程图的形式对其进行描述。在系统软件设计中包括了以下程序:主程序,查询程序,非法抢答程序,抢答时间调整程序,回答时间调整程序,倒计时程序,正常抢答处理程序,犯规处理程序,显示及发声程序。图2.12程序设计流程图2.5设计特点本设计基于51单片的八路抢答器使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特色。采用AT89C51单片机作为芯片实现了八位选手同时抢答的功能。在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效,也能实现主持人的后台控制。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。

第三部分设计成果3.1设计成果图3.1抢答器原理图图3.2Protues仿真图图3.3模拟仿真抢答时间调整中图3.4模拟仿真2号选手抢答成功倒计时暂停3.2程序代码#include<regg51.h>typedefunsignedcharuchar;typedefunsignedintuint;sbitK0=ff^0;//开始抢答按键sbitbeep=gg^0;//蜂鸣器sbitK1=ee^0;//1号选手抢答按键 sbitK2=ee^1;//2号选手抢答按键sbitK3=ee^2;//3号选手抢答按键sbitK4=ee^3;//4号选手抢答按键sbitK5=ee^4;//5号选手抢答按键sbitK6=ee^5;//6号选手抢答按键sbitK7=ee^6;//7号选手抢答按键sbitK8=ee^7;//8号选手抢答按键sbitS1=ff^1;//答题计时键sbitS2=ff^2;//开始抢答时间调整键sbitS3=ff^3;//答题计时时间调整键chars;ucharnum=0;chartime1;//抢答时间chartime2;//答题限时时间uintm,n;//T0,T1定时器定一秒时bitflag1,flag2,flag3,flag4; //标志位bitaa,bb;//时间调整标志位//延时子函数voiddelay(uintz){ uintx,y; for(x=z;x>0;x--) for(y=120;y>0;y--);}ucharcodetable1[]={ //共阴数码管段码值 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 };ucharcodetable2[]={ //共阴数码管位码值 0x7f,0xbf, 0xdf,0xef };//初始化子函数voidinit(){ TMOD=0x11; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=(65536-2000)/256; TL1=(65536-2000)%256; ET0=1; ET1=1; EA=1; dd=0x00; time1=10; time2=10; flag2=1; beep=0;}//开始键扫描子函数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=0; 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) //如果有人抢答,则显示相应的几号 { dd=table1[num]; //显示几号抢到了 ff=table2[0]; delay(2); dd=0; ff=0xff; } else //否则没人抢答,则前面不显示几号 { dd=0x00; ff=0xff; } dd=table1[s/10]; //下面为显示抢答倒计时 ff=table2[1]; delay(2); dd=0; ff=0xff; dd=table1[s%10]; ff=table2[2]; delay(2); ff=0xff; dd=0x00; } else //如果开始键没有按下,则显示FFF(若有违规者,则显示违规号码及FF)或时间调整 { if(flag4==1) //违规显示 { if(num!=0) { dd=table1[num]; //显示几号违规了 ff=table2[0]; delay(2); dd=0x00; ff=0xff; dd=table1[15]; //下面显示FF,表示违规了 ff=table2[1]; delay(2); dd=0x00; //消隐 ff=0xff; dd=table1[15]; ff=table2[2]; delay(2); dd=0x00; ff=0xff; } else { dd=0x00; ff=0xff; } } else //没有人违规才显示调整时间 { if(aa==1) { dd=0x76; //第一位数码管显示"5(S)"(表示抢答时间调整) ff=table2[0]; delay(2); dd=0x00; ff=0xff; dd=table1[time1/10]; //下面显示调整的抢答时间 ff=table2[1]; delay(2); dd=0x00; ff=0xff; dd=table1[time1%10]; ff=table2[2]; delay(2); dd=0x00; ff=0xff; } elseif(bb==1) { dd=0x38; //第一位与第二位数码管合起来显示"T",表示答题时间调整 ff=table2[0]; delay(2); dd=0x00; ff=0xff; dd=table1[time2/10]; ff=table2[1]; delay(2); dd=0x00; ff=0xff; dd=table1[time2%10]; ff=table2[2]; delay(2); dd=0x00; ff=0xff; } else //否则显示FFF { dd=table1[15]; ff=table2[0]; delay(2); dd=0x00; dd=table1[15]; ff=table2[1]; delay(2); dd=0x00; //消隐 ff=0xff; dd=table1[15]; ff=table2[2]; delay(2); dd=0x00; ff=0xff; } } }}//调整时间键扫描子函数voidkey2() { uchari=100; if(S2==0) //抢答时间调整 { delay(10); if(S2==0) { while(S2==0&&i) { i--; delay(10); } time1++; if(time1==61) { time1=10; } aa=1; //将抢答时间标志位置1 bb=0; //同时关闭答题时间标志位 } } if(S3==0) //答题时间调整 { delay(10); if(S3==0) { while(S3==0&&i) { i--; delay(10); } time2++; if(time2==61) { time2=10; } bb=1; aa=0; } }}//主函数voidmain(){ uchari=100; init();//调用初始化子函数 while(1) { key1();//调用开始键扫描子函数 if((flag1==0)&(flag2==1)) //当开始键没按下及没有人违规时才可进行时间调整 { key2(); } if((flag1==1)&(flag2==0)) //当开始键按下及有人抢答才进行开始回答计时倒计时 { if(S1==0) { delay(10); if(S1==0) { while(S1==0&&i) { i--; delay(10); } s=time2; TR0=1; m=0; TR1=1; } } } if((flag1==0)&(flag2==1)) //违规 { key(); if(num!=0) //开始键没有按下时,有人按下了抢答器,则置违规标志位 { flag4=1; } } if((flag1==1)&(flag2==1)) //如果开始键按下且抢答键没有人按下,则进行八路抢答键扫描 { key(); } display();//显示到数码管上 }}//定时器0中断子函数voidt0()interrupt1{ TH0=(65536-2000)/256; //2ms TL0=(65536-2000)%256; if(flag3) //开始(START)键按下,嘟一声(长1秒),表示开始抢答 { beep=~beep; } else beep=0; if(s<5) //抢答时间快到报警,隔1秒响一声且红灯闪烁,响三声 { if(s%2==0) { flag3=1; } else { flag3=0; } } m++; if(m==500) //1秒 { m=0; s--; flag3=0; //关闭开始键按下响一秒的嘟声 if(s==-1) { s=20; TR0=0; flag1=0; //显示FFF flag2=1; num=0; } }}//定时器1中断子函数voidt1()interrupt3 //定时器1处理有人按下抢答器嘟一声(长1秒){ TH1=(65536-2000)/256; TL1=(65536-2000)%256; beep=~beep; n++; if(n==500) { n=0; TR1=0; }}图3.5keiluVision4源程序编译中

第四部分结束语对于本设计,其硬件电路是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎

温馨提示

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

评论

0/150

提交评论