单片机实习报告电子时钟以及温度测量系统设计_第1页
单片机实习报告电子时钟以及温度测量系统设计_第2页
单片机实习报告电子时钟以及温度测量系统设计_第3页
单片机实习报告电子时钟以及温度测量系统设计_第4页
单片机实习报告电子时钟以及温度测量系统设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

刖言时钟,自从它发明的那天起,就成为了人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英体振荡器,于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式转动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。本次实习利用单片机实现数字时钟功能的主要内容,其中AT89S52是核心元件同时采用数码管动态显示“时”,“分”,“秒”以及“温度”的现代计时装置。与传统机械表相比,它具有走时准确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89S52芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟,并有定时功能。第一章系统设计1.1电路组成及工作原理本次实习数字时钟设计原理主要利用AT89S52单片机,由单片机的P0口控制数码管的段码,P3口控制数码管的位码,P1.0P1.1P1.2三口用于调节时间,具有改变当前时间数值功能。P1.7口接有发光二极管,该二极管一秒变化一次,刚好与数字时钟的变化一致。在设计中引入一个电源电路,是外部电源系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的电压。系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。该信号将被送到“时计数器”也采用60进制计数器,每累计到60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计数器,可实现对一天,24小时的累计。显示电路将“时”、“分”、“秒”、计数器的输出,通过六个七段LED显示器显示出来。校时是由P1口控制,由内部设定程序扫描控制。

1.2硬件部分单片机的特点是体积小、成本低、功能强、功耗小单片机型号:本次实习采用的是AT89S52型单片机。芯片引脚图如下:U1竺3TI_::二■1"7~T~XTAL1竺3TI_::二■1"7~T~XTAL1PCCj/ADCP0.1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2JA10PSENP2.3/A11ALEP2.4/A12=/■.P2.5/A13P2.6/A14P2.7/A15R1.0TT2P3.0/RXDP1.1/T2EXpa.irrxDP1.2P3.2/iixrrcrP1.3Pc3布FTP1.4F3.4mP1.5P3.5/T1P1.6P3燮P17P37血口_5<:~77—T二—芯片引脚解释如下:MCS-51系类单片机共有40个引脚及时钟,具体如下所示:XTAXTA有P0、P1、P2、P3口以及控制口线电源(a)内部振荡器在这次实习中我们采用的内部振荡器方式,将18和19和引脚接晶体振荡器以及电容。

第二章方案论证及程序流程图2.1显示电路ftBCDEFGDPftBCDEFGDPABCDEFGDP由P1口来实现段码的选择,而P3口则实现了位码的选择。实习中使用了74LS244芯片来提高单片机的驱动能力,由于单片机P3口的输出时高电平,所以使用了2803反向芯片。2.2振荡电路以及复位电路Pl.0JT2P1.1JT2EXP1.2P1.3P1.4P1.5P1.6P1.712_45Pl.0JT2P1.1JT2EXP1.2P1.3P1.4P1.5P1.6P1.712_4567011AT89C52第三章实习要求3.1设计要求以MCS-51系列单片机为核心器件,组成一个电子时钟系统。系统显示器由4位LED数码管组成,分别显示时间值的小时和分,以24h(小时)计时方式。能够使用按键开关随时对当前时间进行调整。(推荐:键1为功能切换键,键2为移位键,键3为增加键,键4为减少键。也可自行定义。)有精力的学生可以实现闹钟定时功能和上位机时钟显示控制功能。3.2实习工具计算机外用表5V稳压电源面包板3.3元器件清单序名称型号数量用途1面包板1个2连接线2捆3单片机芯片89S521个控制器4晶振12MHz1个时钟电路5独石电容30pF2个时钟电路6电阻10K1个复位电路7电解电容10uF1个复位电路8电阻4.7K1个温度测量974LS321个或门,片选电路10DS18B201温度测量11LED发光二极9个输出控制电路12电阻200欧1749个用于LED发光二极管限流,8个用于数码管限流13按键姆个5T1个用于复位电路,4个用于按键输入14电阻4.7K4个按键输入限流15数码管(共阴)4位一体2个显示1674LS3743个驱动数码管1728031个驱动数码管18塑料袋4个2个大的,2个小的19稳压电源1个20编程器21万用表3.3总体设计为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些。考虑时钟显示只有4位,且系统没有其他复杂的处理任务,所以决定采用动态扫描法实现LED的显示。单片机采用易购的AT89S51系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能。硬件系统的总体构成框架可以参考下图(实际电路请自行设计)。秒表/时钟计时器的硬件电路可以参考下图(实际电路请自行设计),采用AT89S52单片机,最小化应用设计;采用共阳七段LED显示器,P0口输出段码数据,P3.0~P3.7口作列扫描输出,P1.0,P1.1,P1.2口接三个按钮开关,用以调时功能设置,P1.6口接温度传感器用于温度的测量。为了提供共阴LED数码管的驱动电压,用74LS244作电源驱动输出。采用12MHz晶振,有利于提高通信波特率的准确性。为了提高驱动能力在P0口,P3口和数码管之间要接上74LS244和2803芯片实习中我开始没有接,发现数码管很暗。

2线路设计如下:冲XTAJ.2IQXlAl.t注:74LS244,2803芯片引脚连线如下ft1Z聆■表时罅谜"器凰蹿障理圈U2COM1B1C2B2C3B3C4B4C5B5C6B6C7B7C8B8CULN2803〈TEXT》102线路设计如下:冲XTAJ.2IQXlAl.t注:74LS244,2803芯片引脚连线如下ft1Z聆■表时罅谜"器凰蹿障理圈U2COM1B1C2B2C3B3C4B4C5B5C6B6C7B7C8B8CULN2803〈TEXT》1018171615亘131Y11Y21Y31Y424681A1CC1A2v1A31A474LS24412(1)主程序本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。(2)LED显示子程序数码管显示的数据存放在内存单元disp_buf[0]-disp_buf[7]中。其中disp_buf[0]-disp_buf[1]存放时数据,disp_buf[2]-disp_buf[3]存放分数据,disp_buf[4]-disp_buf[5]存放秒数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应码段存放在ROM表(codevalue[17]中。显示时,先取出disp_buf[0]-disp_buf[7]中的某一数据,然后查得对应的显示用码段,并从P0口输出,P3口将对应的数码管选中供电,就能显示该地址单元的数据值。(3)定时器T0中断服务程序定时器T0用于时间计时。中断进入后,时钟计时累计中断达1秒时,对秒计数单元进行加1操作。在计数单元中采用十进制BCD码计数,满60进位,T0中断服务程序执行流程见下图:图匕」w中断Aft督程序第四章实习具体过程4.1最小系统的设计

本次实习老师首先向我们讲解了单片机的原理以及KAIL和Protuse软件的使用方法。为了让我们具体体会这些软件的使用方法,我们先设计了一个最小系统,具体如下:电路连线图:U1>XTAL1P0.0/AD0PLL1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5U1>XTAL1P0.0/AD0PLL1/AD1P0.2/AD2XTAL2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.0/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15PIJ:i'T2P3.0^RXDP1.1.-T2EXP3.1JTXDPI.2P3.2ANT0PI.3P3.3/1NT1PI.4P3.4.-T0PI.5P3.5/T1PI.6P3.6A>VRPI.7P3.7/RDaElHiw卫笠是疆卫墨箜宝箜9号引脚接复位系统电路,按钮按下为高电平,系统复位。18,19号引脚接晶体振荡器以及电容够成内部振荡电路。我采用P1.7号引脚接发光二极管,可以驱动二极管发光。程序如下:#include<reg51.h>sbitLED=P1A7;unsignedcharnum;main()(num=0;TMOD=01;TH0=-10000/256;TL0=-10000%256;TR0=1;EA=1;ET0=1;while(1);}voidtimer()interrupt1(TH0=-10000/256;TL0=-10000%256;num=num+1;if(num==100)(LED=!LED;num=0;}}4.2电子时钟以及温度测量系统设计这是这次实习的主要任务,有了上面的基础,我很顺利地把电路图画出,具体电路见下图。

RBCDEFQDPnUnunuaP3IVHXDPl.ifTXDPglHTDP3a'INT1Pl.^TOP3ST1P3jaWRP3.7/RD-pzn-HEPZ.VABP22/MUPZJ'AIIPZ.^AIZPZ^AOPZAAUP2.T/A15RBCDEFQDPnUnunuaP3IVHXDPl.ifTXDPglHTDP3a'INT1Pl.^TOP3ST1P3jaWRP3.7/RD-pzn-HEPZ.VABP22/MUPZJ'AIIPZ.^AIZPZ^AOPZAAUP2.T/A15号一噎3一S捎点嚣甘使用了为了提供共阴LED数码管的驱动电压,用74LS244作电源驱动输出。由P0口输出驱动数码管的段选择,而P3口的输出接上2803芯片驱动数码管的位选择。在连线时要注意芯片端口号和引脚号的区别,所以我参考了老师给我们的芯片资料,感觉非常有用,不但帮我们完成了线路图的连接,而且对于我们以后的学习也是非常有用的。对于数码管的段端口号和位端口号的确定有一定的困难,开始连线时我没有自己确定端口号,而是直接参考王老师连得电路图,感觉非常困难,后来我想到数码管就是由一个一个的二极管组成的,我为什么不用外用表自己来测量呢?这样既可以完成实验操作,而且还可以提高自己动手解决问题的能力。弄清原理后我很快确定好了数码管各个端口号对应的芯片引脚°P1.0,P1.1和P1.2是开关调节按钮,具体功能下面叙述,连线比较简单。对于这次连线总的来说还是比较简单的,可能一个看起来很复杂的电路图,如果我们能够弄清楚原理,那么就非常简单。同样对于我们学习也是这样的,遇到困难不能退缩,如果那样的话,那么也许我们永远不能够解决问题。程序的编写过程我们在大一时学习了C++语言,当时不知道它有什么具体的作用,无非不就是编写一些简单无聊的程序。通过这次单片机的实习,我充分认识到C语言的强大功能。现在有点后悔当初没有好好学习这门语言。上学期学习单片机基础知识时我们主要是应用汇编语言编写程序,但是对于一些大型复杂的程序,可能汇编语言会很复杂。如何解决这个问题呢?实习老师向我们讲解了C51语言的强大功能,让我们到图书馆找一些资料学习一下。经过两个星期的系统学习,我基本掌握了编程思想和一般的方法。具体的程序如下:#include<REG51.H>#include<absacc.h>sbitDQ=P1"6;sbitLED=P1"7;sbitKEY1=P1"0;sbitKEY2=P1"1;sbitKEY3=P1"2;#definejump_ROM0xcc#definestart0x44#defineread_EEROM0xbebitflash_flag;//数码管闪烁周期控制0.2秒bitsecond_flag;//秒周期控制bitminute_flag;//分周期控制unsignedintnum;//10毫秒累加一次unsignedcharhours,minutes,seconds;//小时分钟秒当前值unsignedinttemperature;#defineSEG_PORTP0#defineBIT_PORTP3unsignedchardisp_buf[8];

codeunsignedcharcodevalue[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};bitkey_operated;//按键已处理过unsignedcharstart_time,elaps;unsignedcharstatus;〃状态voiddelay(unsignedcharN)//N*2us软件延时{unsignedchari;i=N;do{}while(一i);voiddelay_ms(unsignedcharN)//N*100us软件延时{unsignedchari,j;i=N;j=50;do{do{}while(--j);}while(一i);unsignedcharreset(void)//18B20复位{unsignedcharready;DQ=1;delay(1);DQ=0;delay(240);//>480usDQ=1;delay(30);//大于60us小于75ready=DQ;delay(120);return(ready);〃响应周期>300usvoidwrite_byte(unsignedchardat)//18B20写字节{unsignedchari;EA=0;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;//至少隔1us再输出delay(30);//数据至少保持60usDQ=1;dat>>=1;//至少隔1us再输出下一位}EA=1;}unsignedcharread_byte(void)//18B20读字节{unsignedchari=0;unsignedchardat=0;EA=0;for(i=0;i<8;i++)TOC\o"1-5"\h\z{DQ=0;dat>>=1;//1usDQ=1;if(DQ==1)dat|=0x80;delay(30);〃大于60us//}EA=1;return(dat);}convert_temp(){reset();write_byte(jump_ROM);write_byte(start);}read_temp()〃温度测量子程序{unsignedcharTMPH,TMPL;reset();write_byte(jump_ROM);write_byte(read_EEROM);TMPL=read_byte();TMPH=read_byte();TMPH=TMPH<<4;TMPL=TMPL>>4;temperature=TMPH+TMPL;if(temperature<128){disp_buf[6]=temperature/10;disp_buf[7]=temperature%10;}else{temperature=256-temperature;disp_buf[6]=17;disp_buf[7]=temperature%10;}init_timer0()//定时器初始化子程序{TMOD=01;TH0=-1000/256;TL0=-1000%256;TR0=1;EA=1;ET0=1;}ISR_Timer0()interrupt1//10ms定时中断服务子程序{staticunsignedchari=0;unsignedchartemp;TH0=-1000/256;TL0=-1000%256;num++;if(num%200==0)flash_flag=1;if(num==1000){num=0;second_flag=1;seconds++;seconds=seconds%60;if(seconds==0)minute_flag=1;}BIT_PORT=0x00;SEG_PORT=codevalue[disp_buf[i]];temp=0x01;BIT_PORT=temp<<i;i++;i=i%8;}clock()〃时钟运行子程序{if(minute_flag){minute_flag=0;minutes++;if(minutes==60){minutes=0;hours++;if(hours==24)hours=0;}}disp_buf[0]=hours/10;disp_buf[1]=hours%10;disp_buf[2]=minutes/10;disp_buf[3]=minutes%10;disp_buf[4]=seconds/10;disp_buf[5]=seconds%10;}unsignedcharscankey(){unsignedchartemp1,temp2;staticbitkey_first;//第一次扫描到按键按下temp1=P1;temp1=~P1;temp1&=0x0f;if(temp1==0){key_first=1;elaps=0;}else{delay_ms(100);temp2=~P1;temp2&=0x0f;if(temp1==temp2){if(key_first){start_time=seconds;key_first=0;key_operated=0;}elaps=(seconds+60-start_time)%60;returntemp1;}}return0;}voidmain(){unsignedcharkeyval;bitflag=0;bitflag2=0;init_timer0();status=0;while(1){keyval=scankey();if((keyval==1)&&(!key_operated)){disp_buf[0]=hours/10;disp_buf[1]=hours%10;disp_buf[2]=minutes/10;disp_buf[3]=minutes%10;disp_buf[4]=seconds/10;disp_buf[5]=seconds%10;switch(status){case0:if(elaps>=3){status=1;key_operated=1;}break;case1:status=2;key_operated=1;break;case2:status=0;key_operated=1;break;default:break;}}if(status==0)clock();if(second_flag){second_flag=0;flag2=!flag2;if(flag2)read_temp();elseconvert_temp();LED=!LED;}if((keyval==2)&&((!key_operated)||elaps%2==1)){key_operated=1;if(status==1){hours++;hours=hours%24;disp_buf[0]=hours/10;disp_buf[1]=hours%10;}if(status==2){minutes++;minutes=minutes%60;disp_buf[2]=minutes/10;disp_buf[3]=minutes%10;}}if((keyval==4)&&((!key_operated)||elaps%2==1)){key_operated=1;if(status==1){hours+=24;hours一;hours=hours%24;disp_buf[0]=hours/10;disp_buf[1]=hours%10;}if(status==2){minutes+=60;minutes一;minutes=minutes%60;disp_buf[2]=minutes/10;disp_buf[3]=minutes%10;}}{}if(flash_flag){flash_flag=0;flag=!flag;if(status==2){if(flag){disp_buf[2]=minutes/10;disp_buf[3]=minutes%10;}else{disp_buf[2]=16;disp_buf[3]=16;}}if(status==1){if(flag){disp_buf[0]=hours/10;

disp_buf[1]=hours%10;else{disp_buf[0]=16;disp_buf[1]=16;}}}}}第五章实习中遇到的问题本次单片机实习对于实际动手能力有一定的要求,对于以后我们就业找工作有一定的帮助。我在这次实习中也遇到了许多的困难,但是在几位指导老师的帮助下我最终很好地完成了实习任务,得到老师的肯定。具体问题如下:如何在软件中会出模拟的电路图?答:Proteus软件应用如下:¥“二甘♦答:Proteus软件应用如下:¥“二甘♦t泓二・ITS/■•占.原理图编辑窗口(TheEditingWindow):顾名思义,它是用来绘制原理图的。蓝色方框内为可编辑区,元件要放到它里面。注意,这个窗口是没有滚动条的,你可用预览窗口来改变原理图的可视范围。.预览窗口(TheOverviewWindow):它可显示两个内容,一个是:当你在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是,当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。.模型选择工具栏(ModeSelectorToolbar):主要模型(MainModes):介十剪忑1H'1*选择元件(components)(默认选择的)2*放置连接3*放置标签(用总线时会用到)4*放置文本5*用于绘制总线6*用于放置子电路7*用于即时编辑元件参数(先单击该图标再单击要修改的元件)配件(Gadgets):吕I)」画°热夕窗1*终端接口(terminals):有VCC、地、输出、输入等接口2*器件引脚:用于绘制各种引脚3*仿真图表(graph):用于各种分析,如NoiseAnalysis4*录音机5*信号发生器(generators)6*电压探针:使用仿真图表时要用到7*电流探针:使用仿真图表时要用到8*虚拟仪表:有示波器等2D图形(2DGraphics):/口。;MAO品1*画各种直线2*画各种方框3*画各种圆4*画各种圆弧5*画各种多边形6*画各种文本7*画符号8*画原点等.元件列表(TheObjectSelector):用于挑选元件(components)、端接口(terminals)、信号发生器(generators)、仿真图表(graph)等。举例,当你选择“元件(components广,单击“P”按钮会打开挑选元件对话框,选择了一个元件后(单击了“OK”后),该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。.方向工具栏(OrientationToolbar):旋转:厂旋转角度只能是90的整数倍。翻转:**完成水平翻转和垂直翻转。使用方法:先右键单击元件,再点击(左击)相应的旋转图.仿真工具栏I*I』IHI■I仿真控制按钮1*运行2*单步运行3*暂停4*停止按照自己设计的电路图就可以画出想要的电路图!在软件中模拟和实际的效果为什么有如此大的差别?答:软件中模拟受到电脑CPU工作频率的影响,所以效果不是很明显,但是一些基本的现象还是可以看出来的。只要我们知道原理和图是正确的,那么就没有必要考虑太多的未知因素。在实际面包板中一定会看到正确的现象。面包板连线注意事项!!!!!!答:面包板连线时一定要弄清楚它的原理,不然就会一点头绪都找不到。连接芯片是要弄清楚各个引脚对应的端口号,该接地的地方一定要接地,该接高电平的地方一定要接高电平。第六章实习小结这是我又一次用单片机做成功的小制作硬件。在制作过程中,我对51单片机的了解进一步的加深,对KEIL软件的使用更加灵活,对Proteus模拟软件有了初步的了解。查阅相关电子毕业论文网站,对论文的书写也有了流程框架。我学到了许多自己以前没有接触过的知识,真是受益匪浅

温馨提示

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

评论

0/150

提交评论