抢答器课程设计.doc
单片机技术课程设计说明书 抢答器 院 、 部: 电气与信息工程学院 学生姓名: 指导教师: 职称 专 业: 电子信息工程 班 级: 完成时间: 摘 要抢答器经常在团队竞赛或大型娱乐活动中使用,具有很大的实用价值和效应。该项目的主要是基于MCS51单片机控制系统来完成的课程研究,其中主要应用单片机系统中的按键、数码显示、指示灯等模块,而在该项目中研究的重点就是怎样使用按键来实现任务所需要的的结果,而在本项目程序设计中使用了键盘扫描的方式来简化程序的长度。通过使用Proteus的仿真,实现了一个4人的抢答器。关键词:抢答器;AT89S52;按钮;数码显示管ABSTRACTResponder team competition or often used in large-scale entertainment events , has great practical value and effect . The project 's main research programs MCS51 microcontroller -based control system to complete , the main application of the SCM system keys , digital display , lights and other modules, while the focus of the project is to study how to use the keys to achieve the required tasks the results, and program design in this project are used to simplify the way the keyboard scan the length of the program. By using Proteus simulation , achieving a 7 ResponderKey words :responder;AT89S52; keys;digital display目 录1 课题任务、功能要求及设计方案·····································11.1课题任务····················································11.2 功能要求说明···············································11.3 设计方案及工作原理·········································12 课题硬件系统的设计···············································32.1 单片机硬件结构及硬件电路···································32.2 硬件系统各功能模块的简介···································42.3 电路原理图、PCB图、元器件布局图···························42.4 元器件清单·················································43 课题软件系统的设计···············································53.1 课题中单片机资源使用情况···································53.2 软件系统中各模块功能的介绍·································53.3 软件系统流程框图···········································7 3.4 软件系统程序清单···········································74 结论和误差分析···················································84.1 项目的设计结论和使用说明···································84.2 仿真结果···················································84.3 误差分析··················································104.4 设计体会···················································10结束语·····························································11参考文献···························································12致 谢·····························································13附录一:原理图·····················································14附录二:PCB图····················································16附录三:元件布局图·················································17附录四:元件清单···················································18附录五:程序清单···················································191 课题任务、功能要求及设计方案1.1 课题任务设计一个具有特定功能的四人抢答器。1.2 功能要求说明该抢答器上电或按键复位后能自动显示系统提示符“P.”, 进入准备工作状态。主持人按下开始按钮后,抢答开始并限定时间30S;10S内无人抢答,蜂鸣器发出音响;主持人按下开始按钮之前有人按下抢答器,抢答违规,显示器显示违规台号,违规指示灯亮,其它按钮不起作用;正常抢答,显示器显示台号,蜂鸣器发出音响,其它抢答按钮无效;正常抢答下,从按下抢答按钮开始30S内,答完按钮没按下,则作超时处理,超时处理时,违规指示灯亮,显示器显示违规台号。蜂鸣器发出音响;各台数字显示的消除,蜂鸣器音响及违规指示灯的关断,都要通过主持人按复位按钮。1.3 设计方案及工作原理(1)基本功能:设计一个四人智能抢答器,可同时供四名选手使用,他们所对应的编号分别是1、2、3、4个用一个抢答按钮,其对应的按键分别对应实物板的S3、S4、S5、S6;同时给节目主持人设置了三个控制按钮S1、S2、S7分别用来启动答题时间、时间的暂停和复位。在显示P.时主持人按下S1开始键、报警、数码管进入10秒倒计时开始指示等LED0亮10秒内无人抢答LED2亮,只有S7复位键有效,复位键按下进入P.显示状态,10秒内有人抢答、报警、抢打者对应的LED亮 数码管重新30秒倒计时 数码管显示 抢答者台号,此时只有S2结束键有效 S2按下停止倒计时 ,数码管静止这时只有S7复位键按下有效 进入P.显示状态,当抢打者回答超时LED2亮、报警、数码管显示台号这时只有S7复位键按下有效 进入P.显示状态 。(2)抢答器的设计硬件电路框图如图1所示,当启动键S1按下时,数码管显示计时30S,同时也报警表明已启动,当计时到10S时若没有选手按键按下,则蜂鸣器报警,指示灯LED2发光。在系统倒计时抢答器要完成以下四项操作:优先编码电路立即将键盘扫描值进行编号,并由锁存器进行锁存,然后译码成二进制数数然数码管发光,显示十进制数编号;扬声器发出短暂声响,以示所按键有效;当有选手按键按下时,控制电路要进行封锁,避免其它选手按键有效,进行再次抢答;S2暂停按键是使定时器停止工作,并将剩余时间在显示器上显示,由主持人复位键清零。 图1 硬件电路框图 (3)工作原理:该项目中主要是用到AT89S52单片机的四个I/O口线,在P1口线上串接八个按钮,进行控制和信息的传递。当主持人将S7按下时将单片机系统复位,数码管显示字符P ,主持人将S1按下时单片机最小系统准备进入开始状态,此时接在P1口上的S3-S6按钮则作为抢答成员抢答按钮使用。当有成员按下按钮时单片机系统检测到其中一个按钮被按下时,则在P0口上接的八位LED的数码管显示相对应的台号,同时要求接在P3口上的7个发光二极管在相应台号上发光显示。同时还要用到单片机的计时,当选手按下按钮抢答时,如果没有在规定时间内完成回答,此时接在P3.1口线上的蜂鸣器报警。其所有工作过程就是在单片机各串行接口之间进行数据传递和控制,当单片机系统检测到P1口上高电平有用信号时,单片机执行其相应的功能。为了实现相应的功能软件控制程序采用C语言进行来编辑,通过调用一系列52单片机库函数和编辑,使用单片机的内部中断定时器0进行计时。2 课题硬件系统设计 2.1 硬件系统各功能模块的简介(1) 电源模块:电源模块为单片机提供+5V电压,保证单片机系统能够正常运行,同时为单片外部硬件电路工作提供电压。(2) 键盘:键盘是为单片提供信号,其一端公共接地提供低电平。当没有键盘按下时,键盘端口给单片机一个高电平信号;当有键盘按下时,它给单片机一个低电平信号。当单片机检测到外部有低电平时,单片机执行相应的功能模块。(3) 指示灯:红色的发光二极管,在二极管的正上通高电平时,通过一个电阻排接到发光二极管上,二极管发光显示,为低电平时发光二极管熄灭。发光二极管的高低电平由单片机P3口控制,所以二极管显示还是熄灭由单片机控制。(4) 数码管:由八个LED发光二极管组成的共阳极数码管,其引出管脚分别为a、b、c、d、e、f、g、dp来控制数码管的段位显示,a、b、c、d、e、f、g 、dp分别接到单片机的P0口,位控端结单片机P2口 。表1 数码管显示段码代码表显示字符字型共 阳 极共 阴 极dpgfedcba字型码dpGfedcba字型码0011000000C0H001111113FH1111111001F9H0000011006H2210100100A4H010110115BH3310110000B0H010011114FH441001100199H0110011066H551001001092H011011016DH661000001082H011111017DH7711111000F8H0000011107H881000000080H011111117FH991001000090H011011116FHAA1000100088H0111011177HBB1000001183H011111007CHCC11000110C6H0011100139H(5) 蜂鸣器:蜂鸣器为有源蜂鸣器,蜂鸣器的一端直接接到三极管上而接到电源,三极管的基极接到单片机的P3.1口上,通过P3.1口给三极管提供导通电压而使三极管导通,蜂鸣器鸣响。(6) 晶振:晶振电路是由晶体振荡器并接在两个电容上,其公共一端接地,其重要作用就是为单片机工作、执行每条指令提供使能信息,为定时器计时提供振荡周期1us,其定时计算公式如下1: T =(213-计数初值)×晶振周期×12 或T =(213-计数初值)×机器周期 (1) (7) 复位电路:单片机复位分为上电复位和按键低电平复位,在该项目课题设计中使用的是单片机按键低电平复位方式。复位按键主要是当在抢答过程中逢鸣报警,系统初始化而用的。(8) 下载电路:下载电路主要是将编译好的程序经过调试,下载到单片内部储存单元中,以便单片机能按指定的操作正常工作。2.2 电路原理图、PCB图、电路元器件布局(1) 电路原理,图如附录一:(2) PCB图,如附录二:(3) 电路元器件布局,如附录三:2.4 元器件清单项目课题中使用的元件,其元件清单,见附录四:3 课题软件系统的设计3.1 课题中单片机资源使用情况在该项目中主要应用到到单片机4个并行I/O口,进行信息的传递和接收,P0口接数码管段控制端,P1口接7个键盘,P2口接74HC573控制数码管的位控制端,P3口接7个LED灯。为了计时用到了单片机内部的定时器T0和中断ET0 。定时器控制寄存器TCON的功能:用于保存外部中断请求以及定时器/计数器的计数溢出信号。位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT0TCON的字节地址:88H;位地址:8FH88H。TCON的内容及格式如表2下表:表2 TCON控制表3.2 软件系统中各模块功能的介绍(1)调用52系列的函数库,同时给发光二极管定义给各个端口,以及各个按键进行定义。(2)给数码管显示十进制数编写十六进制代码,并将0、1、2、3、4、5、6、7、8、9、P代码定义一个数组。(3)主函数模块,对程序各个子函数进行综合调用、判断。(4)中断定时,为抢答器定时10s、30s计数初值50ms(5)主函数部分,对该项目各个按键及相应功能进行编写,以及各个函数的判断,对项目软件部分进行综合编辑。(6)键扫描函数及键值进行赋值其功能,其工作流程如图2所示。(7)显示函数、蜂鸣函数、以及延时等一些子函数。图2 键盘扫描子程序流程框图3.3 软件系统流程框图系统软件程序设计总流程框图,如图3所示图3 流程框图3.4 软件系统程序清单课题设计项目程序清单,见附录五4 设计结论及误差分析4.1 课题设计结论及使用说明经过综合考虑和资源的有效利用,所设计的项目基本达到预定要求,能够实现四人抢答,并能完成计时、显示和报警。该抢答器的使用说明如下:(1) 上电在第2个数码管上显示P.(2) 在P.显示状态时只有主持人的开始键与各选手按键均有效,如果主持人开始键没有按下而有其他选手按键按下,则显示违规台号、LED2亮和报警。(3) 在P.显示时有选手按下键LED2亮以示警告、报警、 数码管显示选手台号 这时只有主持人S7复位键有效 S7按下,则进入P.显示状态系统还原。(4) 在显示P.时主持人按下S1开始键、报警、数码管进入10秒倒计时开始指示等LED0亮,若10秒内无人抢答LED2亮,只有S7复位键有效 复位键按下进入P.显示状态;若10秒内有人抢答、报警、抢打者对应的LED亮 数码管重新30秒倒计时 数码管显示抢答者台号,此时只有S2结束键有效 S2按下停止倒计时 ,数码管静止这时只有S7复位键按下有效 进入P.显示状态,当抢打者回答超时LED2亮、报警、数码管显示台号这时只有S7复位键按下有效 进入P.显示状态。 4.2 仿真结果当在仿真上电时数码管显示P. 如图4所示;时按下S1时,数码管显示如图5所示;当S1按下计时到10S时,蜂鸣器鸣叫LED2也亮,其结果如图6所示;当S1按下此时S5按下,数码管显示3号台,数码管重新计时,仿真结果图如图7所示;当计时超过30s时,数码管显示台号,蜂鸣器鸣叫,违规指示灯以及LED5亮,结果如图8所示。图4图5图6图7图84.3 误差分析由仿真实验结果可以看出,有时当在有按键按下时,并不一定会立即看到相应的效果,有时甚至还会挡在按下S2时,显示计时并不一定会暂停显示当前数值,而是显示其它字符P ,延时的精确度并没有达到实际的计时效果,其计时可能与实际计时要快一点。引起时间与实际不一致的,这纯属于属于系统误差,因为所用晶振频率不一样,时间的精准度就可能不一样,所以这些问题是不可避免,我们只有尽量缩减误差值;而对于有时按键单片机并不会立即做出反应,这可能属于电路硬件问题,可能按键本身就存在问题,当按下按键时接触不好,不能产生正常的高电平信号,以致单片机不能正确识别信号,而致使产生与实际并不相关的现象。再有就是所用电路板本身就有问题,在制作板子时电路设计时,就存在一些小问题,再加上在制作电路板时,元器件选用的并不是那么精准,有时在市面上可能买不到实际我们所需要的元器件,我们只能选择与该元件功能相近的元件代替,再就是在焊制电路板时,焊的技术并不达标,再加上氧化,这就使得有些电路接触不良或者阻值变得更大,所以综合所有这些环境因素都可能造成误差。误差是不可避免的,我们只有在软件电路设计时尽量减少不必要的误差,使它尽量与实际效果相近。4.4 设计体会经过此次项目的设计,让我受益匪浅。因为这是一个综合性较长的课题,需要考虑多方面的因素,同时这也是考察对知识学的扎不扎实的一种检验,因为对于同一个问题会有不同的实现方法,比如说:“要实现抢答器的功能,我们可以用C语言进行编辑,同时也可以用汇编语言进行编辑,而这两种语言就是两种完全不同的机器语言;功能设计也是千差万别。”所以在做这个课题时我查阅了很多相关的资料,以及向很多同学进行请教,从他们哪里得到一些新的思维,然后通过自己总结,创造属于自己独树一帜的设计方案。同时也加强了对单片机软件程序编写的大概思路,以及及流程,要想能够编译出简单而高效的程序出来,首先就得需要有明确的思路及流程,只有这样在编写时思路才不会混乱,不会感觉不知从何处下手。纸上得来终觉浅,实践操练印象深。10结束语经过把设计的硬件电路和软件部分的相结合,很好地完成了抢答器的功能。而在硬件电路中最重要的部分是AT89S52、按钮和数码管,而课题中的软件部分主要是主程序中的各个条件判断,这是能实现抢答器各个按键相应功能的关键,再就是中断定时,这是判断各个进程的依据,通过将这些相关的实物相结合实现了一个四人抢答器。通过课程设计的结果分析,还是存在许多不足的地方,功能还不够强大,比如在按下时间暂停键时,有时不能显示暂停时的时间值;还有就是选手时间的暂停还通过主持人所按暂停键再暂停,不能很好地反应选手真正答题的时间,可能会存在一定误差。所以在完成这个课题以后,启发了我新的思维设想:“将四人抢答器,增加到八人甚至更多选手的抢答器,时间的暂停完全由选手自己控制,同时在每次显示选手台号的同时,还能显示选手到此时在抢答中所得分数。” 23参考文献1李广弟,朱月秀,冷祖祁.单片机基础M.北京:北京航空航天大学出版社, 2007.6.134-150 Li Guangdi,Zhu Yuexiu,Leng Zuqi.Microcontroller -basedM.Beijing:Beijing University of Aeronautics and astronautics Press,2007.134-1502李全利.单片机原理及应用M.北京:高等教育出版社,2012.91-115 Li Quanli.Principles and ApplicationsM.Beijing:Higher Education Press,2012. 91-1153武爱平,卜耀华,孙东卫.C语言程序设计M.长春:吉林大学出版社,2010. 91-115 Wu Aiping,Bo Yaohua,Sun Dongwei.C Programming LanguageM.Changchun: Jilin University Press,2010.91-1154马忠梅,张凯,马岩.单片机的C语言应用程序设计M.北京:北京航空航天 大学出版社,2007.83-93 Ma Zhongmei,Zhang Kai,Ma Yan.SCM C language appliction designM.Beijing: Beijing University of Aeronautics and astronautics Press,2007.83-93致 谢本课程设计是在王韧老师的悉心教导下完成的,在本次课程设计中,虽然坎坷颇多费时间较长,但是要完成该项目课程设计,我们必须将所学到了许多在课本上学到的东西综合利用,同时也解决了一些平时在课本上不是很了解,甚至忽略了的问题而印象不是很深的问题。让我受益颇多,在此我由衷感谢王韧老师及其他帮助我完成课题的好友!最后再一次感谢所有在此次课程设计中曾帮助过我的老师,以及在设计中被我引用或参考的论著的作者及好友,没有你们的悉心指导,凭我一人成员之力是无法按时完成此次课程设计。附 录附录一:图9 原理图图10 CAD绘制原理图附录二:图11 底层PCB图图12 顶层PCB图附录三:图13 元件布局图附录四:表3 元件清单序号元器件名称规 格数量1瓷片电容33uF22电解电容22uF13发光二极管LED94小按键95电源插口16ISP下载口17蜂鸣器18 单片机AT89S5219三极管9012110 电阻1K311电阻200112数码管213六角开关114无源晶振12MHz115单片机锁紧座40P116排阻4702附录五:程序清单/* 项目名称 : 抢答器 */* 设 计 者 : 桂文杰 */* 设计时间 : 2013年12月22日 */硬件介绍:/1. 七个独立按键S1-S7接P1口 S9不使用,S1为开始键、S2计时暂停、S3-S6为选手按/ 键,S7为复位键。/2. 八个LED灯LED0-LED7接P3口上/3. 蜂鸣器通过跳线接P3.1与LED1并接在一个端口上 (原本蜂鸣器通过短路冒接P3.1口鸣叫是影响LED1/P2.7-P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)/使用方法: /1. 上电显示P./2. 在P.显示是只有主持人的开始键与各选手键有效/3. 在P.显示时有选手按下键LED2亮以示警告、报警、 数码管显示选手台号 / 这时只有主持人S7复位键有效 S7按下进入P.显示状态/4. 在显示P.时主持人按下S1开始键、报警、数码管进入10秒倒计时开始指示等LED0亮/10秒内无人抢答LED2亮,只有S7复位键有效 复位键按下进入P.显示状态/10秒内有人抢答、报警、抢打者对应的LED亮 数码管重新30秒倒计时 数码管显示 抢答者台号 /此时只有S2结束键有效 S2按下停止倒计时 ,数码管静止这时只有S7复位键按下有效 进入P.显示状态/当抢打者回答超时LED2亮、报警、数码管显示台号这时只有S7复位键按下有效 进入P.显示状态 /* 调用函数*/#include <reg52.h>#define uchar unsigned charsbit led0=P30;sbit led1=P31;sbit led2=P32;sbit led3=P33; sbit led4=P34;sbit led5=P35;sbit led6=P36;sbit led7=P37;/* 显示代码数组*/共阳代码表格,分别对应:0,1,2,3,4,5,6,7,8,9,P.,灭 /uchar code table=0xc0,0xf9,0xa4,0xb0,0x99 ,0x92,0x82,0xF8,0x80,0x90,0x0c,0xff;uchar led8=11,11,11,11,11,11,11,10 ;static unsigned long count=0;bit s1=0,s2=0,s7=0,bxs=0,c=1 ;uchar pb=0x80 ,temp;uchar a=30,xuans; / / a 为倒计时的起始时间,xuans为选手序号void dey ( ); /延时子函数void dfwei( ) ;void BELL ( ) ;void display( ); /显示子函数void anjiang( );/按键子函数 /*延时1ms子函数*/ void dey(void) /误差 0us unsigned char a,b,c; for(c=1;c>0;c-) for(b=142;b>0;b-) for(a=2;a>0;a-); /*中断定时部分*/ void time0( ) interrupt 1 using 1 count+; if(count=20) /count等于20表示1s时间到达 count=0;a-; /a为倒计时初值,每一秒减一一次 TH0=0x3c;TL0=0xb0; /50ms计数初值 /* 主函数*/void main() while(1) s1=0,s2=0,s7=0,bxs=0,pb=0x80,c=1,a=30;TMOD=0x01 ;EA=1 ;ET0=1 ;TR0= 1 ;TH0=0x3c;TL0=0xb0;P3=0xff ;/将所有指示灯熄灭 while(a) display( ) ; anjiang( ) ; if( bxs=1) led0=xuans ;/如果选手键按下,选手序号送缓冲单元 if(s1=1) led6=a/10 ;led7=a%10;/如果开始键按下倒计时初值送缓冲单元 display( ) ;anjiang( ) ; if(s7=1) /复位标志位为1,表示复位 TR0=0; a=0;s1=0;s2=0;s7=0;bxs=0;led0=11; led6=11;led7=10; BELL ( ); / 将定时器关闭,所有标志位清零再报警并显P. if(a=0&&bxs=1&&s1=1) /30s到,且是在按下开始,然后有人抢答的情况下; led2=0;led0=1;led6=11;led7=11; BELL ( );dfwei() ;/将定时器关闭,超时指示 灯亮,再报警 if(a=20&&s1=1&&bxs=0)/10s中无人回答,报警 pb=0xbc;led0=1;BELL();dey( ); if(a=0&&bxs=0&&s1=1) pb=0xbc;led2=0;BELL();dey();dfwei(); if(a=0&&s1=1)/如果 开始键按下,抢答时间到 TR0=0 ;led1=0 ;led0=1 ;pb=0xbc;BELL ( );dfwei( );/结束指示灯点亮,熄灭开始指 示灯再报警 if(s2=1)/结束标志位为1,表示结束 led1=0; led0=1; BELL ( );dfwei( ) ;/结束指示灯点亮,熄灭开始指示灯,再报警 if( s1=0&&bxs=1)/在没按下开始按键情况下按抢答,再报警 a=0 ;pb=0xbc;led0=xuans; led2=0;led6=11;led7=11; BELL ( );dfwei( ) ;/结束循环,违规指示灯点亮,再报警 /* 按键部分 */ void anjiang( ) P1=P1&0xff; dey() ; /去抖动 P1=P1&0xff; temp=P1 ; temp=temp|pb ; if( temp=0xfe) TR0=1; s1=1;a=30 ; led0=0;BELL ( );/开始按键,标置位s2置1,定时器开启,开始指示灯亮 ,并置初值 if( temp=0xfd) TR0=0; s2=1; led6=11;led7=10; pb=0xbf;led1=0;BELL ( ); /结束按键,置标志位 if( temp=0xfb) pb=0xbc; bxs=1; a=30;xuans=1;led3=0;BELL ( ); /选手1按下,给屏蔽pb送有效值并置标志位if( temp=0xf7) pb=0xbc; bxs=1; a=30;xuans=2;led4=0;BELL ( ); / 选手2按下,给屏蔽pb送有效值并置标志位 if( temp=0xef) pb=0xbc; bxs=1 ;a=30;xuans=3;led5=0;BELL ( ); /选手3按下,给 屏蔽pb送有效值并置标志位 if( temp=0xdf) pb=0xbc; bxs=1; a=30;xuans=4;led6=0; BELL ( ); /选手4按下, 给屏蔽pb送有效值并置标志位 if( temp=0xbf) TR0=0 ; pb=0xff; s7=1; BELL ( ); / 复位按键,置标志位/*