《5单片机电子时钟课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《5单片机电子时钟课程设计实验报告.docx(19页珍藏版)》请在课桌文档上搜索。
1、单片机原理与应用课程设计总结报告题目I单片机电子时钟(带秒表)的设计设计人员,张保江江润洲学号:20121972132012118029班级:自动化1211指导老师:阮海容1 .题目与主要功能要求22 .整体设计框图及整机概述33 .各硬件单元电路的设计、参数分析及原理说明34 .软件流程图和流程说明45 .总结设计及调试的体会10附录1.图一:系统电路原理图112 .图二:系统电路PCB123 .表一:元器件清单134.时钟程序源码14题目:单片机电子时钟的设计与实现课程设计的目的和意义课程设计的Il的与意义在于让我将理论与实践相结合培育我们综合运用电子课程中的理论学问解决实际性向翘的实力。
2、让我们对电子电路、电子元器件、印制电路板等方面的学问进一步加深相识,同时在软件编程、排悟调试、焊接技术、相关仪渊设爵的运用技能等方向得到较全面的熟煤和提高,为今后能够独立完成某些单片机应用系统的开发和i殳计打下一个坚实的菸础。课程设计的基本任务利用89C51睢片机最小系统,综合应用单片机定时器、中断、数码显示、犍盘输入等学问,设计一款单片机和简活外设限制的电子时钟t主要功能要求最基本要求DisHIMCS-51单片机设计一个时钟.要求具有6位1.ED显示、3个按键输入.2)完成硬件实物制作或运用Pruteus仿典(留遨位弱动应能供应足够的电流).3)6位1.ED数码管从左到右分别显示时、分、秒(
3、各占用2位),采纳24小时标准计时制.起先计时时为OOOOOO.到235959后又变成000000,4)isHl3个键分别作为小时、分、秒的岗校键。每按一次键,时应的显示值便加1。分、秒加到59后再按健即变为00:小时加到23后再按械即变为00.在调校时均不向上一单位进位(例加分加到59后变为00,但小时不发生变更),5)软件设计必需运用KS-51片内定时器,采纳定时中断结构,不得运用软件延时法,也不得运用其他时钟芯片.6)设计八段数码管显示电路并潟写疆动程序输入并调试拆字程序和数码显示程序.7)驾驭硬件和软件联合调试的方法.8)完成系统硬件电路的设计和制作,9)完成系统程序的设计.10)完成
4、整个系统的设计、调试和制作.ll完成课程设计报告,基本要求1)实现最基本要求的110部分.2)键盘输入可以Rl制电子时钟的走时/网试.3)设计选做输入电路和程序并调试,4)与(键盘和显示仍作运用的方法和技巧。提高发挥部分D另设三个镀,分别作小时、分、杪的诚1调校。2)在以上设计的基础上,修改程序制作一个电子杪表,分、杪各占用2位显示,1/10杪、1/100秒各占用1位1示.设定二个键分别作启动/停止、消零(滴零应在秒止后有效31在做完(2)后,将时暂与秒决合二为一,并且在同时运用时互不影响,即可在时仲与秒表之间随意切换,而不影响走时、计杪。.整体设计框图及整机概述整体设计框图数码管整机概述1)
5、开机为定时模式,正常显示时间.在此模式卜,时钟UJ调,2)共设7个技,分别为模式、功倦、加一、减T1.鳗位、秒表自动健、秒表复位按动模式次,模式将在走时时/显示及秒发显示及谢整2个模式下切换.3)在时钟模式下,功能键选择是正常走时,还是进入调试(时、分、秒)模式。4)按动加一键可以将值(时、分、秒)加一。5)按动减一犍可以将值(时、分、秒)破一.6)按动秒表中起先/桶停按谖可以的时限制秒表的起先和停止.7)按动秒表中清等按键时,杪去计的数就会被消除(只有在杪表停止了以后兄8)按下次位键后,无论是任何状态都会从新起先。9)开机时钟与闹钟都为00:00:00.各硬件单元电路的设计、参数分析及原理说
6、明电源电路元件仃限没有制作电源电路部分.运用9V的电池羟过7805稳压后进行供电.按键参考书本P232的键盆接口电路原理图,P3口(除去P3.6)接的是键盘按键,当按键按下后,P3口被拉成低电平,给单片机一个信号,使单片机产生一个中断。单片机再指令相应的PO口.P2口产生变更.单片机最小系统参考试验指导书与课本及网络资料设计按杨电平复位.1.ED数码管首先PO口作为段码输出.由于PO口输出级无上拉电阻,故需添加一排阳为其上抗电阻。其次采纳共阳极数眄管.段码端为低电平常导通1.ED.此时数码管向89S51芯片Po1.l潴电流.为防止芯片烧坏,还需加1个IKn的限淀电班.考虑到数码管的亮度问即,采
7、纳了PNP三极管做躯动电路,地极接上IKa电阻后再与P2口相连(P2.02.5)进行位选。放射极接5Y电源,集电极接数码管位选。软件流程图和流程说明软件流程图D主程序源程图流程图说明初始化1包括定时BlK初值,初始化各内存单元.开定时中断,开CPU中断.等待定时师厮时闾显示及调亶子程序与砂表J1.示及调整子程序流程图与Ul时模式于程序大同小异.总结设计及调试体会硬件设计部分:首先要通过计算与参考资料等确定参数。而后通过仿真软件等调试,确定参数无误后再起先用AD画原理图,进而生成PCB进行布板.在焊板子的时候,也出现了问题,不当心将7805焊成了7905,结果又调试了一个时间。软件设计部分:设计
8、软件首先要考虑要做的功能,确定出合理的算法。合理的克法不仅要可以实现功能,而且在添加功能的时候要便利敏捷.有的人为了实现某种功能用了各种各样的方法来实现,结果程序结构吃死,当想要添加功能或者修改其他功能的时候,将修改程序大部分结构,也就是说要破坏程序现有的结构。关于调试:Keil软件调试单片机程序的时候,编译通过并不代表程序是正确的。编译通过只能说明程序没有语法上的错误。进行软件仿我或者下毂到开发板上进行调试,常常会出现各种各样的错误。很多超出预期效果的现象往往是一些微小错误引起的。例如没有现场爱护跟电原现场等,所以养成良好的编程习惯也很重要.有些想达成某些功能而添加的语句,事实上确一点效果也
9、没有.举个编程中的小问题:当有按键按下时,我们都要有软件防抖。正常的方法是调用一个延时。在实际调试中,要跳过这个抖动,须要100MS左右。假如运用正常的延时,会导致按键按下时CPUloOMS内无法进行其他操作,也就是说。平均IS内I(X)MS不调用显示子程序,这样就会导致亮度降低。这时候,考虑到显示子程序一次有十几考秒,就特殊写了一个程序来作为按键防抖的延时,事实上效果也是很不错的。这个想法就是在修改了多次程序未达到想要的效果(有按键按卜时显示亮度不降低)后最终想出来的方法。最终在做完板,焊完电路后,在接通电源之前,要用万用表细致检查电路是否有连接错,以免烧坏芯片和数码管。设计课设的其他体会:
10、看法要主动,不要认为很荷洁就不紧不慢。很多东西并不是自己设想的那么顺当,有时候个小问题可以花上你半天甚至天的时间。虽然自己在程序上并没遇到太大的问题,但是因为看法不然主动,对于没画过的PCB图迟迟不去下手,在周四晚上才解决。本以为周五一天可以做完板并完成整机调忒,可是各种突发事务让自己措手不及。发觉板来不及做完后才将程序功能进行扩展。这是我在这次试验中的个教训,也让我明白了对于自己不能太过丁白信,看法确定一切.图一:系统电路原理图a*的anAWK4*(外相EiM2,aae.a图二:系统电路PCB在protues中调试的结果在开发板上实现的效果(见实物)在焊的PCB板子上效果(见实物)在prot
11、ues里的仿真以及在开发板上实现和Fl己做实物所看到的现象是不一样的。在pr。IUeS里不用接三极管(NPN)就可以实现效果,但是在自己做板子的时候就不行了,因为51单片机的输出的电流不能驱动数码管发光,须要一个增加驱动的9014三极管。另外,protues里的复位按键不起作用(软件里就是这样设计的o将在PCB上实现的程序用在开发板上乂出现了问题,delay(3)这个延时子程序不合理,出现了闪耀的问题,所以将delay(3)改成了delay(1),这样问题就解决了。我是将三极管加在了段选上,乂加了限流电流,这样做数码管也能点亮。另一方面,一样的程序用在不同的显示上,现象也是不一样的。所以,我须
12、要不断地修正定时器的装值。TH1=(65536-49997)/256;重装初值T1.l=(65536-49997)%256;THO=(65536-8000)/256:T1.O=(65536-8000)%256;经过实际测量,这个数值是最合适的,一个小时一秒不差。表一:元器件清单器件名称ft*电池一个U7805一个自S开关一个51单片机一个1.ED两个极性电容一个非极性电容两个一个10K电阻九个IK电阻两个按七个100电阻八个PNP三极管八个4位数码管共阴)两个时钟程序源码*include#defineucharunsignedchar8defineuintUnSignedintucharcod
13、etablet0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71);sbitIed=Pl1:指示灯sbitqiehuankey=P3-7:/秒衣和时仲模式切换按tsbitsp_key=P3F;”秒表中起先/哲停按键sbitclf_key=P35:秒表中清军按键sbitfunc-key=P31;/时钟换位按雄(时、分、秒)sbitadd_key=P32:/时钟加1按犍sbitsub_key=P33;时钟M1按键ucharIdbil=0;切换按键标记位ucharshi1,shi2,fenl,
14、fen2,miaol,miao2,fen3,fenl,miao3,miao-l,nu119,11uh10;uintnuml,nus2,num3,num1,nm5,num6,num7,num8,num11;voiddelay(intXmS)”延时函数ui11ti.j;for(i=xms;i0;i-)for(j=H0;j0;j);中断初始化函数开总中断定时器工作方式选择,定时梆0和定时潺1都选定时器。装初1,定时IOmS(用于杪表)开定时滞0开关开定时等0小开关定时器1装初值,定时SomS(用于时钟)开定时器I开关关定时器1小开关voidinit()EA=I:BIODOXll:择第I种工作方式11
15、0=(65536-10000)/256:T1.O=(65536-1OOOO)%256:ETtkl;TRO=O:THl=(65536-50000)/256:T1.(6553650000)%256:ET1=1;TRl=I:voidmodkey()模式选择谴.本程序两种模式,分别是时间显示、秒表.当K1.bit为0时显示时钟,为1时iS入秒表if(qiehuan_key=0)(delay(5):if(qihuan-key=O(kl_bit+:if(kl_bit=2)kl_bit=O;)while(!qiehuan-key:)1voiddisplay1(ucharshi1,ucharshi2,ucha
16、rfenl,ucharfe112,ucharaiaolucharniao2)显示时怦函数(shil=numlIO;shi2=nunl%10;fenl-num210;fe112=num2%10;miaol=nu310:niao2=ru三3%10;P2=0xff:PO-tableshi1:/第一位P2=Oxfe;delay(3);P2=0xff;Po=tableshi2:其次位P2=0xfd;delay(3);P2=0xff:PO=OxdO:/第三位P2=0xfb:delay(3);P2=0xff;PO=tablefenl;第四位P2=0xf7:delay(3);P2=0xff:P0=tblefe
17、n2;/第五位P2=0xef;delay(3);P2=0xff;K)=OX40;/第六位P2=0xdf:delay(3);P2=0xff;PO=Iablelmiaol;笫七位P2=0xbf:delay(3):P2=0xff;P0=tableniao2;笫八位P2=Ox7f;delay(3);P2=0xff;voiddisplay(ucharfen3,ucharfen4,UChHrmiao3,ucharmiao4,ucharnum9,IICharnum10)/显示杪表函数fen3-num810;fen1=nutnH10;miao3=nu三710;miao4=ni7%10;num9-nut116:
18、numlO=nuB5;P2=0xff;P0=tablefen3;第一位P2=0xfe:delay(3);P2Wxff;POTablefcn4;其次位P2=0xfd;delay(3);P2=0xff;PO=OxIO;/笫三位P2Wxfb;delay(3);P2=0xff;P0-tablemiao3;/第四位P2=0xf7;delay(3);P2=0xff;P0=tablemiao4;/第五位P2=0xef;delay(3);P2-0xff;P0=0x40:7/第六位P2=0xdf;delay(3);P2=0xff;PO=IabIenum9;第七位P2=0xbf;delay(3):P2=0xff:
19、PO-tublenumlO;第八位P2=0x7f:delay(3);P2=0xff:voidkeymiaobiao()if(kl_bit1)(if(sp_key=O)(delay(5):if(sp_key=O)(TRO=TRO;hile(!sp_key)display(fen3,fen4,niao3,miao4,nu119,num10):if(TRO-O)(Ied=O;ifclf-kcy=O)(delay(5);if(clf_key=O)(Ied=I;while(!clf_key)num5=nu6=num7=num8=0:voidkeyscan()时钟按键扫描if(func_key=O)del
20、ay(5);if(func_key=0)(Ied=O:nuall+*:uhile(!func_key);if(numll=l)(TRl=O:if(num11=2)(TRl=I:if(num11=3)(TRl=I:ifnum11=4)(nu三ll0;TRl=I:)if(numl1!=0)(if(add_kcy=O)(delay(5);if(ad1.key=O)hile(!add_key);if(numl1=1)(num3+;if(num3-60)num3=0;)if(nunl1=2)(num2+;if(num2=60)num2=0:)if(num!1=3)(numl+;if(nunl-24)nu
21、m1=0;JJ1if(sub_key=O)(delay(5);if(sub_key-O)(hile(!sub_key):if(numll=l)(num3一:if(num3=-l)num3=59;Jif(num11=2)(num2一;if(num2-1)nun2=59;)if(nunl1=3)(numl;if(numl=-l)num1=23;voidnain()init:Ied=O:whiIe(I)(roode_kcyO;switch(kl_bit)模式选择(case0:(displayI(shi1,shi2,fenl,fen2,miaol,miao2):显示时间keyscan():break;
22、Jcase1:(display(fe113,fenl,iao3,miao4,num9,num10):显示杪表key_miaobiaoO:扫描杪表操作break:voidTimelOinterrupt3定时器1函数(时钟Tlll=(65536-19997)/256:重装初(ftT1.l=(65536-49997)*256;niinvl+:if(num4=20)nu11vl=0;num3+:if(nun3=60)秒针nu三3=0:nu三2+;if(num2=60)分针nu三2=0:nu三l;if(numl=24)时针numl=0:定时器O函数(杪表)里:装初值voidT加COOinterrupt1(TIIO=(655:16-8000)/256;T1.O=(65536-8000)256:num5+:if(num5-10)num5=0;nu11+;if(num6-10)(11ub6=0;nu三7+;if(num7-60)(nu三7=0:nu三8+;if(num8-60)(num8=0;