《于基51单片机的八路抢答器设计单片机原理课程设计--大学毕设论文.doc》由会员分享,可在线阅读,更多相关《于基51单片机的八路抢答器设计单片机原理课程设计--大学毕设论文.doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机原理及接口技术课程设计报告设计题目:基于51单片机的八路抢答器设计学 号: 姓 名: 指导教师: 信息与电气工程学院二零一六年七月1哈尔滨工业大学(威海)课程设计报告八路抢答器系统设计随着科学技术的发展和普及,各种各样的竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想。因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若利用单片机来设计抢答器,便使以上问题得以解决.针对以上情况,本文设计出以STC89C52RC单片机为核心的八路抢答器。我们采用了数字显示器直接指示,
2、自动锁存显示结果,并自动复位的设计思想,它能根据不同的抢答输入信号,经过单片机的控制处理并产生不同的与输入信号相对应的输出信号,最后通过LED数码管显示相应的路数,即使两组的抢答时间相差几微秒,也可分辨出是哪组优先按下的按键,它充分利用了单片机系统的优点,具有结构简单、功能强大、可靠性好、实用性强的特点。1. 设计任务结合实际情况,基于AT89C51单片机设计一个八路抢答器系统。该系统应满足的功能要求为:(1) 同时供8名选手比赛,分别用8个按钮K1 K8表示,设置一个系统抢答控制开关K0,该开关由主持人控制;(2) 用数码管显示抢答选手、答题时间倒计时、抢答时间倒计时、违规选手;(3) 利用
3、蜂鸣器提示抢答、误操作、答题;(4) 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动开始键后,定时器进行减计时。主要硬件设备:AT89C51单片机、蜂鸣器、按键、共阴数码管。2. 整体方案设计八路抢答器系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个抢答器的硬件系统。其中P0、P2与数码管连接,用于显示时间和抢答选手;P1与按键连接,用于选手抢答;P3用于主持人控制和蜂鸣器调节。当主持人选择开始抢答后,蜂鸣器提示抢答开始,数码管显示抢答剩余时间,选手可以开始抢答。若选手抢答,显示抢答者编号以及剩余答题时间,同时蜂鸣器提示答题开始。
4、硬件电路分为复位电路、晶振电路模块、AT89C51、数码管显示电路、按键输入电路和蜂鸣器报警电路这六个模块。各模块的主要功能如下:(1) 复位电路模块功能为复位按键按下,提供两个机器周期以上的高电平输入RST来使单片机复位;(2) 晶振电路模块提供给单片机固定频率的震荡脉冲,这个脉冲经分频后为单片机的时钟信号;(3) AT89C51为控制器,根据外界信号和内部程序来控制模块的输入输出;(4) 数码管显示电路功能为根据单片机信号显示抢答、答题时间及选手等;(5) 按键输入电路提供主持人控制和选手抢答的按键,并将电平信号输入给单片机;(6) 蜂鸣器报警电路根据单片机信号提示答题、抢答、误操作等。系
5、统的整体设计方案设计图如图2-1所示。图2-1 系统的整体方案设计图3. 系统硬件电路设计3.1 晶振电路本设计采用的晶振电路为12Mhz晶振以及30pF电容构成。电路图如图3-1所示。图3-1 晶振电路图3.2 复位电路本设计采用的复位电路采用20uF的极性电容和100欧姆的电阻构成,当按键按下时提供2ms的高电平脉冲,足够用于单片机的复位。复位电路图如图3-2所示。图3-2 复位电路图3.3 按键输入电路按键输入电路由8个选手抢答按键和4个主持人控制按键组成,并配备有上拉电阻以维持高电平。当按键按下时会在I/O口输入低电平,以供单片机采集并根据程序控制其余模块。其中K1、K2、K3、K4供
6、主持人使用,1、2、3、4、5、6、7、8供选手使用。其与单片机的接口电路如图3-3所示。图3-3 按键输入电路与单片机的接口电路3.4 数码管显示电路数码管显示电路采用四位一体数码管来显示,LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。本设计采用八路共阴数码管,共有有4根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。其中位选线低有效,段选线高有效,位选线与P0连接,段选线与P2低四位连接,分别控制P0、P2接口电平即可显示。段选线驱动电平如表3-1所示,数码管显示
7、电路图如图3-4所示。显示数值H,G,F,E,D,C,B,AP0口0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FH表3-1 段选驱动代码图3-4 数码管显示电路3.5 蜂鸣器报警与提示电路本设计采用蜂鸣器和Led灯设计报警和提示电路。蜂鸣器在定时器1的控制下,当抢答开始、答题开始、误操作等情况下会提示,同时Led也会闪亮。Led灯由P31控制,蜂鸣器由P31控制。电路图如图3-5所示。图3-5 蜂鸣器报警
8、与提示电路3.6 总电路图总电路图如图3-6所示图3-6 总电路图4. 系统程序设计4.1 主程序流程图系统在开始时初始化,使抢答时间和答题时间设定为默认值,同时数码管显示FFF。然后检测开始按键,若开始键按下,则无法调整时间,同时开始检测选手按键,显示抢答剩余时间。若选手按键按下,则可以由主持人控制开始答题,然后数码管显示抢答选手和答题剩余时间。若开始键没有按下,且有选手按键,则显示误操作选手编号,同时进行提示;若没有选手按键,则可以进行答题和抢答时间调整。系统主程序流程图如图4-1所示。4.2 开始键与选手按键扫描子程序流程开始键扫描程序,它扫描开始键是否按下,若开始键按下,则控制数码管显
9、示、定时器计时、蜂鸣器提示,打开开始键标志位,关闭时间调整标志位,以响应选手的按键处理程序。选手按键扫描程序,它扫描选手按键是否按下,若按下,则控制数码管显示、蜂鸣器提示,关闭开始键标志位以禁止其他选手抢答,同时响应开始答题按键。图4-1 主程序流程图4.3 显示子程序流程图显示子程序控制数码管显示,蜂鸣器的提示,led灯的亮灭。功能如下:(1) 当没有任何操作时,数码管显示FFF,蜂鸣器和led灯无反应;(2) 当按下开始抢答键后,数码管显示抢答倒计时,蜂鸣器响一次,led灯闪烁一次;(3) 当有人抢答后,数码管显示抢答选手编号,蜂鸣器响一次;(4) 当开始答题后,数码管显示答题选手编号、剩
10、余答题时间,蜂鸣器响一次,在时间少于3s时,led灯闪烁,蜂鸣器持续响;(5) 当存在误操作时,数码管显示误操作选手编号,蜂鸣器响一次,led闪烁一次;(6) 当进行时间调整时,数码管显示所调整的时间和调整后的答题时间或抢答时间。显示子程序流程图如图4-2所示。图 4-2 显示子程序流程图5. 系统调试5.1 Proteus软件仿真调试(1) Proteus简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:1)现了单片机仿真和SPICE电路仿真相结合。具有模
11、拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVis
12、ion2等软件。4)具有强大的原理图绘制功能。可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。 PROTEUS 是单片机课堂教学的先进助手。 PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实
13、验难以达到的效果。 它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。(2) Proteus仿真过程选取合适的纸张大小,绘制原理图,导入程序文件,点击运行仿真。则在原理图中可以看到节点的电平状态,数码管、led灯、蜂鸣器的响应状态,从而可以检验是否达到所期望的功能要求。1) 调试时要注意的问题:在ISIS中,每个元器件的管脚都要占据一块区域,该区域会排斥外部的走线;在仿真时要设置单片机的时钟频率;元件之间距离要足够以供修改与添加;P0口需要配备上拉电阻以维持高电平。2) 调
14、试时遇到的问题及解决办法:在仿真时遇到单片机引脚不存在的现象,如图5-1所示。在更换了另一块单片机后问题解决。图5-1 仿真问题3) 仿真运行结果: 初始化后数码管显示FFF如图5-2所示。图5-2 按下开始抢答键,数码管显示抢答剩余时间倒计时同时蜂鸣器提示,如图5-3所示。当剩余时间少于3s时蜂鸣器和led灯同时提示,如图5-4所示。图 5-3图5-4 抢答成功后蜂鸣器提示,数码管显示抢答选手编号,如图5-5所示。图 5-5 按下开始答题键后,蜂鸣器提示,数码管显示答题选手编号及答题时间倒计时,如图5-6所示。 进行时间调整时,蜂鸣器提示,数码管显示调整后答题时间或者抢答时间,如图5-7所示
15、。图5-6图5-75.2 硬件调试硬件调试结果符合Proteus仿真调试结果,不再赘述。6. 程序清单#include#define uchar unsigned char#define uint unsigned intsbit K0=P30;/开始抢答按键sbit beep=P37;/蜂鸣器sbit D0=P31;/指示灯sbit K1=P10;/1号选手抢答按键sbit K2=P11;/2号选手抢答按键sbit K3=P12;/3号选手抢答按键sbit K4=P13;/4号选手抢答按键sbit K5=P14;/5号选手抢答按键sbit K6=P15;/6号选手抢答按键sbit K7=P1
16、6;/7号选手抢答按键sbit K8=P17;/8号选手抢答按键sbit S1=P32;/答题计时键sbit S2=P33;/开始抢答时间调整键sbit S3=P34;/答题计时时间调整键char s;uchar num=0;/显示抢答选手char time1;/抢答时间char time2;/答题限时时间uint m,n;/T0,T1定时器定一秒时bit flag1,flag2,flag3,flag4;/标志位bit aa,bb;/时间调整标志位/延时子函数void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=120;y0;y-);uchar code
17、 table1=/共阴数码管段码值0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar code table2=/共阴数码管位码值0xfe,0xfd,0xfb,0xf7;/初始化子函数void init()TMOD=0x11;TH0=(65536-2000)/256;TL0=(65536-2000)%256;TH1=(65536-2000)/256;TL1=(65536-2000)%256;ET0=1;ET1=1;EA=1;P0=0x00;time1=10;time2=10;f
18、lag2=1;/开始键扫描子函数void key1()uchar i=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;/选手抢答按键扫描子函数void key() uchar i=100;if(K1=0)delay(10);if(K1=0)while(K1=0&i)i-;delay(10);num=1;/数码管显示1号1TR0=0;/关闭定时器0,时间停止TR1
19、=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(K
20、5=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;
21、flag2=0;/数码管显示子函数void display()if(flag1=1)/开始键按下,开始计时抢答if(num!=0)/如果有人抢答,则显示相应的几号P0=table1num;/显示几号抢到了P2=table20;delay(2);P0=0;P2=0xff;else/否则没人抢答,则前面不显示几号P0=0x00;P2=0xff;P0=table1s/10;/下面为显示抢答倒计时P2=table22;delay(2);P0=0;P2=0xff;P0=table1s%10;P2=table23;delay(2);P2=0xff;P0=0x00;else/如果开始键没有按下,则显示F F
22、F(若有违规者,则显示违规号码及 FF)或时间调整if(flag4=1)/违规显示if(num!=0)P0=table1num;/显示几号违规了P2=table20;delay(2);P0=0x00;P2=0xff;P0=table115;/下面显示 FF,表示违规了P2=table22;delay(2);P0=0x00;/消隐P2=0xff;P0=table115;P2=table23;delay(2);P0=0x00;P2=0xff;elseP0=0x00;P2=0xff;else/没有人违规才显示调整时间if(aa=1)P0=0x76;/第一位数码管显示5(S)(表示抢答时间调整)P2=
23、table20;delay(2);P0=0x00;P2=0xff;P0=table1time1/10;/下面显示调整的抢答时间P2=table22;delay(2);P0=0x00;P2=0xff;P0=table1time1%10;P2=table23;delay(2);P0=0x00;P2=0xff;else if(bb=1)P0=0x38;/第一位与第二位数码管合起来显示T,表示答题时间调整P2=table20;delay(2);P0=0x00;P2=0xff;P0=table1time2/10;P2=table22;delay(2);P0=0x00;P2=0xff;P0=table1t
24、ime2%10;P2=table23;delay(2);P0=0x00;P2=0xff;else/否则显示F FFP0=table115;P2=table20;delay(2);P0=0x00;P0=table115;P2=table22;delay(2);P0=0x00;/消隐P2=0xff;P0=table115;P2=table23;delay(2);P0=0x00;P2=0xff;/调整时间键扫描子函数void key2()uchar i=100;if(S2=0)/抢答时间调整delay(10);if(S2=0)while(S2=0&i)i-;delay(10);time1+;if(t
25、ime1=61)time1=10;aa=1;/将抢答时间标志位置1bb=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;/主函数void main()uchar i=100;init();/调用初始化子函数while(1)key1();/调用开始键扫描子函数if(flag1=0)&(flag2=1)/当开始键没按下及没有人违规时才可进行时间调整key2();if(flag1=1)&(flag2=0)/当开始键按下及有人抢答
26、才进行开始回答计时倒计时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;D0=0;if(flag1=1)&(flag2=1)/如果开始键按下且抢答键没有人按下,则进行八路抢答键扫描key();display();/显示到数码管上/定时器0中断子函数void t0() interrupt 1TH0=(65536-2000)/256;/2msTL0=
27、(65536-2000)%256;if(flag3)/开始(START)键按下,嘟一声(长1秒),表示开始抢答beep=beep;elsebeep=1;if(s5)/抢答时间快到报警,隔1秒响一声且红灯闪烁,响三声if(s%2=0)flag3=1;D0=0;elseflag3=0;D0=1;m+;if(m=500)/1秒m=0;s-;flag3=0;/关闭开始键按下响一秒的嘟声if(s=-1)s=20;TR0=0;flag1=0;/显示F FFflag2=1;num=0;D0=1;/定时器1中断子函数void t1() interrupt 3/定时器1处理有人按下抢答器嘟一声(长1秒)TH1=
28、(65536-2000)/256;TL1=(65536-2000)%256;beep=beep;n+;if(n=500)n=0;TR1=0;7. 小结经过近一个星期的努力,终于顺利完成了课程设计。刚开始,我头绪不是很清楚,不知道从哪里入手,但通过认真研究设计课题,跑图书馆查资料、确定基本设计方案、对所用芯片功能进行查找、调试、仿真等,经历了一次次的困难,却积累了很多宝贵的经验。在整个设计的过程中遇到的问题主要有以下三点,第一:基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。第二:对一些常用的应用软件缺少应用,体现在画电路图和系统的仿真的时候,对这些
29、软件的操作不熟练,浪费了很多时间。第三:相关知识掌握的不够全面,缺少系统设计的经验。这次设计进一步端正了我的学习态度,学会了实事求是,严谨的作风,对自己要严格要求,不能够一知半解,要力求明明白白。急于求成是不好的,我有所感受。如果省略了那些必要的步骤,急于求成,不仅会浪费时间,还会适得其反。我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。就目前来说,我的动手能力虽然差一点,但我想,通过我的不懈努力,在这方面,我总会得到提高。这一点,我坚信。因为别人能做到的,我也一定能做到。在此次的课程设计中我最大的体会就是进一步认识到了理论联系实践的重要性。一份耕耘,一份收获。通过这段时间的设计,让我明白科学的思维方法和学习方法是多么重要,只有这样才能够有很高的效率,才能够让自己的工作更完美。总而言之,此次课程设计让我学到了好多平时在课堂上学不到的东西,增加了我的知识运用能力,增强我的实际操作能力。谢谢老师给我们提供这么好的机会,为我们之后走向社会奠定了一个好的基础。本次课程设计让我学到了很多,也学会到了要怎么样去面对困难,不要对知识一知半解,要有求实的能力,通过老师的帮助我学到了很多在平时没有注意到的知识,更深入的去理解课堂上的理论,通过这次我要更加注重自己在各方面的能力锻炼,把握机会。这次的设计非常的感谢老师们的帮助与指导。31
限制150内