基于单片机的多路智能抢答器的设计毕业论文.doc
目 录第一部分 设计任务与调研41设计任务42.设计目标43.调研53.1单片机概述53.2数字抢答器概述5第二部分 设计说明61系统软件设计61.1系统原理图61.2程序流程图62元件检测与焊接92.1检测各元件92.2对PCB板进行排版及连线112.3焊接的问题及解决112.4焊接的技巧和注意事项123设计思路123.1时钟频率电路的设计123.2复位电路的设计133.3显示电路的设计133.4键盘扫描电路的设计143.5发声电路的设计153.6系统复位164调试与问题分析164.1系统的调试164.2具体调试174.3问题与分析 18第三部分 设计成果19第四部分 结束语23第五部分 致谢25第六部分 参考文献26第一部分 设计任务与调研1.设计任务 设计一个以51单片机为核心控制器的八路智能抢答器,要求该智能抢答器通过串行通信,将主机与8路从机连接,能实现有效抢答信号的识别显示,犯规选手号码识别显示,不同时长的抢答倒计时,不同时长的答题倒计时,提示报警等功能。2.设计目标(1)设计一个可供8人进行的抢答器。(2)系统设置复位按钮,按下后,重新开始抢答。(3)抢答开始时数码管显示序号0,选手抢答实行优先显示,优先抢答选手的编号一直保持到主持人将系统清除为止。抢答后显示优先抢答者序号,同时发出音响,并且不出现其他抢答者的序号。(4)抢答器具有定时抢答功能,且一次抢答的时间有主持人设定,本抢答器的时间设定为60秒,当主持人启动“开始”开关后,定时器开始减计时,同时蜂鸣器有短暂的声响。(5)在设定的抢答时间内,选手可以抢答,这时定时器停止工作,显示器上显示选手的号码和抢答时间,并保持到主持人按复位键。(6)当设定的时间到而无人抢答时,本次抢答无效,扬声器报警发出声音,并禁止抢答。定时器上显示00。3.调研3.1单片机概述 随着计算机技术的发展,单片机技术已经成为计算机技术中的一个独特的分支,单片机的应用领域也越来越广泛,特别是在工业控制和仪表仪器智能化中扮演着举足轻重的角色。这次我们选取的AT89C51芯片在我国非常流行,它的最大特点是内部有可以多次重复编程的ROM,并且ROM可以直接用编程器来擦写,使用起来比较方便。3.2数字抢答器概述 随着单片机技术的进步,单片机与串口通信的结合更多地应用到各个电子系统中已成一种趋势。本设计就是基于单片机设计抢答系统,通过串口通信动态传输数据,使抢答系统有了更多更完善的功能。单片机系统的硬件结构给予了抢答系统“身躯”,而单片机的应用程序赋予了其新的“生命”,使其在传统的抢答器面前具有电路简单、成本低、运行可靠等特点。对于抢答器我们大家都知道那是用于选手做抢答题时用的,选手进行抢答,抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。第二部分 设计说明1.系统软件设计1.1系统原理图1.2程序流程图在本设计中包括了以下八个主要的程序:主程序;非法抢答程序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。主流程图如下图所示:2.元件检测与焊接2.1检测各元件用万用表检查、了解元件;(1)一般电阻电阻的阻值是可以根据电阻上的色环判断:1)、四环电阻阻值等于前两位对应的数值乘上第三位对应的倍率,第四位为误差范围;2)、五环电阻阻值等于前三位对应的数值乘上第四位对应的倍率,第五位为误差范围。 电阻R0为五环型色环颜色:棕 黑 黑 棕 棕阻值=100×10² =1000 电阻R0 误差为±1% 实测阻值为992本实验R1用两个R0的电阻并联成; 电阻R2为四环型 电阻R2色环颜色 :绿 棕 红 金阻值=51×10² =5100=5.1k误差为±5%实测阻值为5.02k 光敏电阻A、在光照情况下,测量光敏电阻的阻值,即为光敏电阻的亮阻;B、在遮光情况下,测量光敏电阻的阻值,即为光敏电阻的暗阻;(2)发光二极管发光二极管有两个接线柱,一个长的一个短的,长端为正极,短端为负极。可以利用万用表测量两种接法时的电阻值,可知道当正极接到长端,负极接到短端的时候,发光二极管的阻值比较小,此即是二极管的单向导通特性。(3) 可变电阻可变电阻有三个引脚,它的接法和滑动变阻器的接法一样,有三端接入式和两端接入式,本实验采用两端接入式比较简单。采用两端接入时,其中一端必须接在中间的那个引脚上,另外一个在剩余的两个引脚中,可以任选一个(两者的区别是,滑动头的转动方向不一样)。选择好引脚后,可以将其接在万用表上,测其阻值的大小,转动滑动头,看顺时针转动时阻值是增加还是减小,这样做对调试电路时有好处,可以知道自己旋转的方向是增加电阻还是减小电阻。(4) 蜂鸣器本实验所用的蜂鸣器和平时看到的扬声器、耳机等发声器件有微小的差别,它里边多了一个振荡器,输入电流时振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。可以尝试的将其正负极接上电源,可看到只有正负极接入正确时,蜂鸣器才会发声。也可根据蜂鸣器上的引线长度按来判断正负极(长正短负)。所以在实验室中要把蜂鸣器的正负极接正确。(5) 三极管三极管有两种,一种是PNP管,一种是NPN管,本实验用的是PNP管。三极管有三个引脚,分别是基极(b),发射极(e),集电极(c)。本实验所用的三极管判断极点的方法是,面对有型号标记的一面,然后看着三个引脚,从左到右依次是,发射极(e),基极(b),集电极(c)。接线时三个极端不能接错,否则三极管就没有起到作用。 图3三极管符号、管脚排列集电极和基极之间形成集电结,发射极和基极之间形成发射结,三极管起放大作用的条件,发射结正向偏置,集电结反向偏置。正向偏置时必须达到正向偏置电压,即为导通,否则,为截止状态。2.2对PCB板进行排版及连线本实验所用的面包板的内部链接在破坏背面的绝缘胶带的情况下,可以揭开胶带看其内部线路的构造,以防不知道内部线路差错电路。当然最好的办法是:用测试电路在插孔上来回实验,猜想验证其内部构造。 1)、首先了解面包板在连线和焊接的注意事项。2)、了解实验原件及器材后,按照原理图在面包板上连接电路;3)、焊接要注意,电子电路在焊接时,应遵循的规则。 2.3焊接的问题及解决 一般来说,造成硬件问题的首要问题就是焊接了,也就是说焊接的好与坏直接响产品的正常运行。造成焊接质量不高的常见原因是:焊锡用量过多,形成焊点的锡堆积;焊锡过少,不足以包裹焊点。冷焊。焊接时烙铁温度过低或加热时间不足,焊锡未完全熔化、浸润、焊锡表面不光亮(不光滑),有细小裂纹(如同豆腐渣一样!)。夹松香焊接,焊锡与元器件或印刷板之间夹杂着一层松香,造成电连接不良。若夹杂加热不足的松香,则焊点下有一层黄褐色松香膜;若加热温度太高,则焊点下有一层碳化松香的黑色膜。对于有加热不足的松香膜的情况,可以用烙铁进行补焊。对于已形成黑膜的,则要"吃"净焊锡,清洁被焊元器件或印刷板表面,重新进行焊接才行。焊锡连桥。指焊锡量过多,造成元器件的焊点之间短路。这在对超小元器件及细小印刷电路板进行焊接时要尤为注意。焊剂过量,焊点明围松香残渣很多。当少量松香残留时,可以用电烙铁再轻轻加热一下,让松香挥发掉,也可以用蘸有无水酒精的棉球,擦去多余的松香或焊剂。焊点表面的焊锡形成尖锐的突尖。这多是由于加热温度不足或焊剂过少,以及烙铁离开焊点时角度不当浩成的内。最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压要正常为5V左右。2.4焊接的技巧和注意事项1、焊锡之前应该先插上电烙铁的插头,给电烙铁加热。 2、焊接时,焊锡与电路板、电烙铁与电路板的夹角最好成45度,这样焊锡与电烙铁夹角成90度。 3、焊接时,焊锡与电烙铁接触时间不要太长,以免焊锡过多或是造成漏锡;也不要过短,以免造成虚焊。 4、元件的腿尽量要直,而且不要伸出太长,以1毫米为好,多余的可以剪掉。 5、焊完时,焊锡最好呈圆滑的圆锥状,而且还要有金属光泽。设计思路3.1时钟频率电路的设计单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。 外部振荡源电路一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用fosc表示。如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/123.2复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图所示: 复位电路 值得注意的是,在设计当中使用到了硬件复位和软件复位两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。3.3显示电路的设计显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。 显示电路3.4键盘扫描电路的设计键盘是人与微机系统打交道的主要设备。关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。 独立键盘它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺” 现象。这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。3.5发声电路的设计 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制高低电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。3.6系统复位使CPU进入初始状态,从0000H地址开始执行程序的过程叫系统复位。从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。硬件复位必须通过CPU外部的硬件电路给CPU的RESET端加上足够时间的高电位才能实现。上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从0000H地址开始执行。对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。有的编程人员用020000(LJMP 0000H)作为软件陷阱,认为直接转向0000H地址就完成了软件复位,就是这类错误的典型代表。软件复位是使用软件陷阱和软件看门狗后必须进行的工作,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。4调试与问题分析4.1系统的调试 系统调试包括硬件调试和软件调试,而且两者是密不可分的。我们设计好的硬件电路和软件程序,只有经过联合调试,才能验证其正确性;软硬件的配合情况以及是否达到设计任务的要求,也只有经过调试,才能发现问题并加以解决、完善,最终开发成实用产品。硬件调试分单元电路调试和联机调试,单元电路试验在硬件电路设计时已经进行,这里的调试只是将其制成印刷电路板后试验电路是否正确,并排除一些加工工艺性错误(如错线、开路、短路等)。这种调试可单独模拟进行,也可通过开发装置由软件配合进行,硬件联机调试则必须在系统软件的配合下进行。软件调试一般包括分块调试和联机调试两个阶段。程序的分块调试一般在单片机开发装置上进行,可根据所调程序功能块的入口参量初值编制一个特殊的程序段,并连同被调程序功能块一起在开发装置上运行;也可配合对应硬件电路单独运行某程序功能块,然后检查是否正确,如果执行结果与预想的不一致,可以通过单步运行或设置断点的方法,查出原因并加以改正,直到运行结果正确为止。这时该程序功能块已调试完毕,可去掉附加程序段。其它程序功能块可按此法进行调试。程序联机调试就是将已调试好的各程序功能块按总体结构联成一个完整程序,在所研制的硬件电路上运行。从而试验程序整体运行的完整性、正确性和与硬件电路的配合情况。在联调中可能会有某些支路上的程序、功能块因受条件制约而得不到相应的输入参数,这时,调试人员应创造条件进行模拟调试。在联调中如发现硬件问题也应及时修正,直到单片机系统的软件、硬件全部调试成功为止。系统调试完成后,还要进行一段时间的试运行,从而检验系统的稳定性和抗干扰能力,验证系统功能是否达到设计要求,是否达到预期的效果。4.2具体调试 1、具有清零装置和抢答控制,可由主持人操纵,避免有人在主持人说“开始”前提前抢答违反规则。2、具有定时功能,在60秒内无人抢答表示所有参赛选手或参赛队对本题弃权。3、60秒时仍无人抢答,其报警电路工作,表示抢答时间耗尽并禁止抢答。4、 显示抢答时间, 按一下减一秒,按一下"-1s"键,时间LED上会显示改变后的时间,调整范围为0s60s。 5、主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设60s抢答时间),如有选手抢答,会有提示音,并会显示其号数,只有第一个按抢答的选手有效。 6、如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。4.3问题与分析 我遇到的问题:有时候在自己创建的元器件的管脚上无法实现连线。 分析回答:应该是管脚的间距太小了。因为在ISIS中,每个元器件的管脚都要占据一块区域(就像自己的保护区一样,不容别人随意侵犯),该区域会排斥外部的走线。解决问题的方法是在走线的同时按住 “CTRL”键,直到走线绕过狭窄的保护区。当然最根本的办法是重新编辑元器件,把其管脚间距调大一些。主持人按键来控制总开关,主持人按下开关,选手开始抢答,此时数码管开始从0-60计数,并且选手们必须在规定的时间内进行抢答,若过了60秒还没抢答那么抢答失效,选手们若有一个在规定的时间内抢答成功则其余的选手不可以再抢答,即该选手抢答成功。第三部分 设计成果总体原理图程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit rst=P37;sbit speaker=P36;/报警sbit start=P34;uchar count=0;/用于产生1秒的时间uchar dsy_time=0x3c; /用于显示抢答时间uchar dsy_buffer=0,0,0;/显示缓冲uchar code leddata= /共阴数码管的段码 0x3F, /"0" 0x06, /"1" 0x5B, /"2" 0x4F, /"3" 0x66, /"4" 0x6D, /"5" 0x7D, /"6" 0x07, /"7" 0x7F, /"8" 0x6F, /"9" ;uchar code state=/抢答时的8种按键情况0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/延时/void DelayMS(uint ms)uchar t;while(ms-)for(t=0;t<120;t+);/报警/void speak(void)uchar i=10;while(i-)speaker=speaker;DelayMS(2); /主程序/void main()/初始化uchar i,m=0x04;P0=0xff;P1=0x00;P2=0x00;P3=0xb7;TMOD=0x01;/选择工作方式TH0=0x3c;/定时器T0初始值的高八位TL0=0xaf;/定时器T0初始值的低八位IE=0x83;/开总中断,定时器中断,外部中断0while(1) if(rst=0)/系统复位dsy_buffer0=0;TR0=0;dsy_time=0x3c;if(dsy_time=0x00)/在设定的时间到,而无人抢答时关闭定时器中断 TR0=0;/关闭定时器中断 P1=0x00;/禁止抢答 for(i=0;i<3;i+)/用数码管显示抢答序号和抢答时间P2=m;m=_cror_(m,1);/循环移位实现数码管的动态显示dsy_buffer2=dsy_time%10;/抢答时间的个位 dsy_buffer1=dsy_time/10;/抢答时间的十位P0=leddatadsy_bufferi;/数码管显示抢答者的序号和抢答时间DelayMS(5); m=0x04;/实现下轮的循环显示for(i=0;i<8;i+)if(P1=statei)/判断有按键按下DelayMS(10); /延时防止按键抖动引起的误操作if(P1<=statei) /再次判断有按键按下dsy_buffer0=i+1;P1=0x00;/通过硬件实现优先抢答TR0=0;/关闭定时器0speak();/实现定时时间1S/void key_inter() interrupt 1TH0=0x3c;/50MS初始值TL0=0xaf;/50MS初始值if(+count=20)count=0;dsy_time-;/实现计数器的减法计数/抢答开始/void start_inter() interrupt 0P1=0xff;TR0=1;/定时器0开始计数 speak();开始计时选手抢答第四部分 结束语 经过近几个星期的努力,在老师和同学的讨论和帮助下,我成功地完成了八路抢答器的设计,通过此次课程设计,我重新认识到了对书本上的知识要独立运用的道理。在抢答器设计过程中,发现了很多细节性的问题,也出现了很多错误,经过和同学们研究、商讨最后都解决,感觉团队协作能力是非常有必要的!通过此次的抢答器的设计,让我重新拾起了以前所学习的电子知识和程序语言的编程,也使我加深了对单片机及接口技术的理解和应用,由于知识水平的局限,设计中可能会存在着一些不足,我真诚的接受老师和同学的批评和指正。第五部分 致谢这次毕业设计得到了很多老师、同学和朋友的帮助,其中我的指导老师对我的关心和支持尤为重要,每次遇到难题,我最先做的就是向老师寻求帮助,而老师总是在百忙之中和我们商量解决方法。另外,感谢校方给予我这样一次机会,能够独立地完成一个设计,并在这个过程当中,给予我们各种方便,使我们在即将离校的最后一段时间里,能够更多学习一些实践应用知识,增强了我们实践操作和动手应用能力,提高了独立思考的能力。感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在大学生活即将结束的最后的日子里,我们再一次演绎了团结合作的童话,把一个庞大的,从来没有上手的课题,圆满地完成了。正是因为有了你们的帮助,才让我不仅学到了本次课题所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。最后,感谢所有在这次毕业设计中给予过我帮助的人。对上述朋友,再一次真诚地表示感谢!第六部分 参考文献【1】 C程序设计 ,谭浩强,清华大学出版社,2005【2】 单片机原理及接口技术(第3版),李朝青,北京航空航天大学出版社,2002【3】 单片机系统设计与实例指导,冯育长,西安电子科技大学出版社,2007【4】 单片机课程设计实例指导,李光飞,北京航天航空大学出版社,200424