基于51单片机的精准万年历的设计与实现_第1页
基于51单片机的精准万年历的设计与实现_第2页
基于51单片机的精准万年历的设计与实现_第3页
基于51单片机的精准万年历的设计与实现_第4页
基于51单片机的精准万年历的设计与实现_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

基于51单片机的精准万年历的设计与实现Ⅰ基于51单片机的精准万年历的设计与实现摘要:科学技术迅速发展的当代社会,人们的生活中都和时间密切相关,时间可以影响每一个人做事的状态。人们最开始从自然的变换中得知时间的变化,再到后面的摆钟,最后到现在的电子时钟。随着时间的变化,人文信息也相对变化,例如温度、星期、日期等,于是电子万年历就应运而生。电子万年历是将时间、星期、日期和温度等功能集合于一体;电子万年历的出现给我们的生活带来了很多的方便,作为其它的附加功能,现在越来越广泛的应用到各种电子产品中,具有很大的发展市场和广阔的市场前景。关键词:时间;单片机;电子万年历;电路;温度;Abstract:Withtherapiddevelopmentofscienceandtechnologyincontemporarysociety,people'slivesarecloselyrelatedtotime.Timecanaffectthestatusofeachindividual.Peoplefirstlearnedaboutthechangesoftimefromthenaturaltransformation,thentothependulumclock,andfinallytothecurrentelectronicclock.Withthechangeoftime,thehumanitiesinformationalsochangesrelatively,suchastemperature,week,date,etc.Therefore,theelectroniccalendarhascomeintobeing.Theelectroniccalendarisacollectionoffunctionssuchastime,day,dateandtemperature.Theappearanceoftheelectroniccalendarhasbroughtalotofconveniencetoourlives.Asanadditionalfunction,itisnowmoreandmorewidelyusedinvariouselectronicproducts.Whichhasagreatdevelopmentmarketandbroadmarketprospects.Keywords:Time;Singlechip;Electroniccalendar;Circuit;Temperature;基于51单片机的精准万年历的设计与实现全文共28页,当前为第1页。基于51单片机的精准万年历的设计与实现全文共28页,当前为第1页。[9]。1.2温度传感器的发展据调查,1990年,温度传感器在外国市场的销售以及使用比例远远高于其他传感器。从第一个温度计的发明之后,人们开始把温度当成一种测量工具,他们通过把温度转换成电信号的方式对事物进行测量。基于51单片机的精准万年历的设计与实现全文共28页,当前为第3页。温度传感器可分为两大类:一类是接触式温度传感器,一类是非接触式温度传感器。接触式温度传感器就是测量温度的元器件和被测量的对象要吻合接触,使其达到热平衡。基于51单片机的精准万年历的设计与实现全文共28页,当前为第3页。第3页(共27页)2系统设计任务与方案论证2.1万年历系统设计任务对电子万年历的设计,以单片机作为主要的硬件搭其他的传感器和显示器等。但是在选择需要的单片机时,要满足和考虑环境并且要自己能够实现和自己能够使用,还要有合适的参数,性能必须要稳定,功耗要低,成本也要低,不然就不知道该怎么解决了。在自己的设计要求之下,就确定自己要设计的系统由电源电路模块、时钟显示模块、按键模块、温度测量模块以及闹钟、闹铃模块六个模块组成,电路的系统构成原理图如图2-1所示。图2-1万年历系统构成框图2.2实现设计的方案论证2.2.1单片机芯片选择与论证采用STC89C51这一款单片机芯片作为核心部分,这款单片机采用FlashROM内部存储器,可以在3V的电压下工作,STC89C51单片机的内部存储器为4KBROM的存储空间。在对设计的电路进行最后的调试时,编写的程式的错误和对新的程式进行烧录是,不需要对单片机进行多次的插拔。因为STC89C51内部具有4KBROM存储芯片并且支持在线编程和可擦除技术,所以采用STC89C51作为本次设计的核心芯片。基于51单片机的精准万年历的设计与实现全文共28页,当前为第4页。2.2.2时钟模块选择与论证基于51单片机的精准万年历的设计与实现全文共28页,当前为第4页。在对比其他的时钟芯片的结果之下,本次设计选用DS1302时钟芯片作为记录时间,是因为DS1302时钟芯片不仅可以对时间进行记录并且精度十分高和工作电压低,耗能就会很小就比较适合本次的设计。2.2.3按键模块选择与论证本次设计选用独立按键,查询十分方便简单,程序编写和处理也很简单,还很节约CPU的占用资源。2.2.4温度传感器的选择与论证也是在对比其他的温度传感器的结论之下,本次毕业设计就选择DS18B20温度传感器作为记录温度之用。DS18B20温度传感器是数字式的,也只需要一根数据线传输数据,很容易将单片机相连,舍去了模数转换电路,降低了硬件的成本,自己的成本也降低了,还简化了系统的电路。2.3电路设计的最终方案决定基于51单片机的精准万年历的设计与实现全文共28页,当前为第5页。总结上面分析的结果所示,我在本次的毕业设计的作品就以STC89C51单片机为主,DS1302时钟芯片记录时间,DS18B20温度传感器记录测试温度,LCD12864液晶显示屏显示日期、星期、温度等。基于51单片机的精准万年历的设计与实现全文共28页,当前为第5页。第12页(共27页)3硬件设计电路经过上述的分析和对自己能力的考虑,在下面就对具体的硬件电路进行设计,只对自己能力之内的设计进行介绍。3.1STC89C51单片机简介本次毕业设计的是在STC89C51单片机的基础之上再搭配其他的电路部分来进行设计处理的,所以说单片机才是最主要的。单片机STC89C51的内部结构框图如下图3-1所示。图3-1单片机STC89C51的内部将结构框图基于51单片机的精准万年历的设计与实现全文共28页,当前为第6页。下面图2-3就是STC89C51单片机的40个的引脚:基于51单片机的精准万年历的设计与实现全文共28页,当前为第6页。图3-2STC89C51单片机的引脚图在此对P3口的第二功能进行解释说明。基于51单片机的精准万年历的设计与实现全文共28页,当前为第7页。测试时对P3口写入高电平1的时候,P3口内部上拉,当作输出口,当其作为输入时,P3口将会输出电流,P3口的引脚具有相应的第二功能,下面图3-3介绍了P3口的第二功能。基于51单片机的精准万年历的设计与实现全文共28页,当前为第7页。图3-3P3口的第二功能3.2DS1302时钟芯片的接口设计与性能分析3.2.1DS1302时钟芯片的特点、功能简介时钟芯片DS1302是可以随着时间变化而改变的一个芯片,不仅仅能记录普通的时间的格式,还可以对软件自动调整,还是串行I/O的通信方式。下面图3-4为DS1302时钟芯片的引脚说明,下面图3-5为DS1302时钟芯片的引脚图。基于51单片机的精准万年历的设计与实现全文共28页,当前为第8页。图3-4DS1302时钟芯片的引脚说明基于51单片机的精准万年历的设计与实现全文共28页,当前为第8页。图3-5DS1302时钟芯片的引脚图3.2.2DS1302时钟芯片的接口电路设计1DS1302时钟芯片的接口电路及工作原理:图3-6DS1302与MCU接口电路上面图3-6为DS1302时钟芯片的接口使用电路,其中T2为储存电源,在充电电源和电池供电的系统中提供低电源和电池备份。2DS1302时钟芯片的控制字节DS1302时钟芯片的控制字节的输出,必须要从最低位开始,它的最高位也一定要是1,只有这样才能对芯片写入数据,不然的话连数据都不能写,那么下面的步骤就没有办法进行。最高位的前一位可以为0也可以为1,是0的话就代表存储公历数据,是1的话就是存取RAM的实时数据。基于51单片机的精准万年历的设计与实现全文共28页,当前为第9页。基于51单片机的精准万年历的设计与实现全文共28页,当前为第9页。3.3LCD12864液晶显示屏显示模块3.3.1LCD12864液晶显示屏的特点和使用1LCD12864液晶显示屏的接口说明如下面图3-7所示:图3-7LCD12864的接口说明使用图2指令说明LCD1286液晶显示模块的控制芯片和其他的芯片不同,它有两套控制命令,它们是基本指令和扩充指令。如下面图3-8和图3-9所示:基于51单片机的精准万年历的设计与实现全文共28页,当前为第10页。图3-8基本指令说明基于51单片机的精准万年历的设计与实现全文共28页,当前为第10页。图3-9扩充指令3.4DS18B20温度芯片接口电路设计和性能简介3.4.1DS18B20温度芯片的特性简介DS18B20温度芯片它不仅仅是比较使用的数字式温度传感器,而且它的体积很小那么就不需大的成本,这是我感觉最好的,还有就是它的抗干扰的能力必须强、精度也必须要高,不然的话就算它在便宜我也不会考虑它。但是恰恰这些它都有,所以才会选择它。除了上面已经具体的说明的特点DS18B20温度芯片还拥有以下几个优点:1具有独特的单线接口只需要一个端口进行通信;2测量温度的范围在-55℃到125℃之间;3零待机功耗;4可以通过数据线进行供电,电压的范围在3.0V-5.5V之间;基于51单片机的精准万年历的设计与实现全文共28页,当前为第11页。下面图3-10为DS18B20温度芯片的内部结构图:基于51单片机的精准万年历的设计与实现全文共28页,当前为第11页。图3-10DS18B20温度芯片内部结构图我认为DS18B20是这样来测量温度的,就如下面图3-11这样。在下面的图上可以很清楚的看到首先是低温度系数晶振给计数器1发送固定的脉冲信号,与之对应的高温度系数晶振就会发生变化,也就会发送信号给计数器2,但是计数器2却是一个减法的计数器。在整个图中虽然看不出来有一些计数门,但是它却是存在的,也是必须有的不然就无法测量温度。计数门一旦打开DS18B20就会开始读取计数器1进行计数,以便完成测温。图3-11DS18B20测温原理图基于51单片机的精准万年历的设计与实现全文共28页,当前为第12页。基于51单片机的精准万年历的设计与实现全文共28页,当前为第12页。3.4.2DS18B20温度芯片的电路设计图3-12温度传感器DS18B20接口电路测量温度的原理了解之后,就应该继续了解DS18B20的外接接口电路,这里说的外接电路只是连接其他的元器件,就如上面的图3-12所表示的这样,就是需要与其他的元器件连接,这个连接也很简单,就是STC89C51单片机的P3.2引脚与DS18B20温度芯片的DQ引脚相连接,VCC引脚电源,GND引脚接地。3.5电源部分电源电路是系统最基本的部分,任何电路都离不开电源部分,本次设计采用两种供电方式,一个是USB供电,一个是用电池盒通过蓄电池来给他供电,但我认为第一种要好一点。3.6复位电路设计复位电路我就可以直接采用单片机STC89C51的复位引脚RST,出现2个连续周期以上的高电平时,就会完成对单片机的复位,还有就是一直是高电平的时候,就会对单片机进行循环复位,就不会执行下面的程式,就算是卡死了,那么整个程式就直接Down机,也就是说要对它解除复位。基于51单片机的精准万年历的设计与实现全文共28页,当前为第13页。那么具体的复位是怎么实现的了,就如下面图3-13所表示的这样,首先它要感觉到有电来了,并且会对电容C1充电,就会让RST在一定时间内是高电平。就是整个系统在工作的时候,按下复位的按键也会让RST处在高电平,上电和按键复位的操作就都完成了。基于51单片机的精准万年历的设计与实现全文共28页,当前为第13页。我们在选择电容的时候,会首先考虑电容值在0~30μF之间,这次的毕业设计也是同样如此,我就选用的是10μF的电容。在电阻的选择上就需要根据自己的实际情况来挑选了,我这次就用的是4.7K的电阻,不会太大,但是符合本电路就是最好的。基于51单片机的精准万年历的设计与实现全文共28页,当前为第14页。图3-13复位电路原理图基于51单片机的精准万年历的设计与实现全文共28页,当前为第14页。第15页(共27页)4万年历系统软件设计4.1万年历系统软件介绍本次毕业设计的电子万年历显示时间、温度等功能是在程式的控制下实现的。电子万年历系统的软件设计按需求功能分为多个不同的程式模块,分别是进行总体系统的设计、程序编写和最后的测试,最后通过编写的主要程序将其他程序模块拼接起来。对本次毕业设计的软件进行编写时,就要清楚公历计算、温度测量程式设计等多方面的问题。在编写代码的过程中,首先要对单片机的各个引脚进行初始化,再将时间、温度等用相对应的格式进行显示。系统的实现就需要我自己来编写代码来实现,而下面图4-1就是我的编写代码的思路框图,具体的关键代码见附件。图4-1系统实现思路图基于51单片机的精准万年历的设计与实现全文共28页,当前为第15页。基于51单片机的精准万年历的设计与实现全文共28页,当前为第15页。5软件与硬件调试到了这里本次的设计就算是基本完成了。此次的论文设计体框架便已经搭建好了,然后就是把写好的程序下载到已搭建、调试好的硬件电路板中去,看看是否能与预想的结构一致。我使用KEILuVision4开发环境作为单片机程序的编译器和用来对程序的调试。5.1程序的调试与下载5.1.1程序的编写与下载使用KEILuVision4集成开发环境对本次设计的程序进行编写;KEILuVision4是用创建工程的方式来管理文件的,所有的文件包括源程式、大量的头文件等都可以让工程项目文件一起处理。我就是按照自己的步骤来进行文件的创建和编写、烧录程式的:(1)创建一个空白的工程项目文件(本次设计的名字:万年历完整程序);(2)新建一个空白文档;(3)在空白文档中编写代码(代码见附件,为主要代码);(4)保存项目文件(本设计是用C语言编程,所以保存时输入文件名应加后缀名.c);(5)把程序文件添加到项目中;(6)程序写完就可以编译调试并生成hex文件了;基于51单片机的精准万年历的设计与实现全文共28页,当前为第16页。(7)对工程进行设置,打开工程菜单(Project),点击设置(ALT+F7);设置晶振频率(11.0592),保存退出设置菜单。基于51单片机的精准万年历的设计与实现全文共28页,当前为第16页。图5-1晶振频率设置最后点击编译或者按Ctil+F7,若没有编译错误,HEX文件就生成好了。5.1.2STC-ISP芯片烧录软件的使用(1)下载STC-ISP软件,安装完成并且驱动安装完毕后,就可把单片机和电脑连接,打开STC-ISP软件进行调试。(2)调试好以后打开已经生成好的hex文件,选择相应的COM口,其他选项无需设置,点击下载,然后单片机上电即可完成程序烧录。基于51单片机的精准万年历的设计与实现全文共28页,当前为第17页。本次设计通过在KEILuVision4中对每个模块程序的运行和调试,确认程序没有错误。基于51单片机的精准万年历的设计与实现全文共28页,当前为第17页。第16页(共27页)6总结本次论文,我是以单片机STC89C51为核心设计的电子万年历。在论文的撰写中,我从不知道怎么设计和写论文到可以将论文写出来,真的是很不容易;尽力在用自己的方式去撰写,但是还是有缺陷的地方。对于此次毕业设计我对学到的东西得到了运用,也让自己有动手的能力得到了提高。液晶显示屏可以正常显示时间和温度,基本上完成了本次设计预期要实现的功能和目标。虽然在完成的过程不是很容易,但是能够成功的做出实物的感觉还是很好的,我很感谢能有这次能将理论与实际结合的机会!基于51单片机的精准万年历的设计与实现全文共28页,当前为第18页。基于51单片机的精准万年历的设计与实现全文共28页,当前为第18页。第27页(共27页)附件附件A:万年历主要代码#include<reg52.h> //调用单片机头文件#defineucharunsignedchar//无符号字符型宏定义 变量范围0~255#defineuintunsignedint //无符号整型宏定义 变量范围0~65535#include"nongli.h"ucharcodeshuzi[]="0123456789ABCDEF";charcodeshuzi_c[]="0123456789ABCDEF";sbitrs=P2^5;sbitrw=P2^6;sbite=P2^7;sbitkey1=P1^3;//时钟调节按键 //设置sbitkey2=P1^4;//加sbitkey3=P3^2;//减sbitkey4=P3^3;//确定sbitkey5=P3^7;//背光sbitbeep=P1^2; //蜂鸣器IO口sbitdq=P1^1;//18b20IO口的定义sbitBG=P1^0;//背光IO口的定义uinttemperature;//温度变量基于51单片机的精准万年历的设计与实现全文共28页,当前为第19页。bitflag_200ms=1;基于51单片机的精准万年历的设计与实现全文共28页,当前为第19页。ucharmenu_1;ucharflag_clock_en;//闹钟标志位ucharopen1;//闹钟开标志位ucharflag_c_en;bitflag_100ms;ucharn_nian,n_yue,n_ri;/*********************************************************************名称:delay_1ms()*功能:延时1ms函数*输入:q*输出:无***********************************************************************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<115;j++);} /************延时函数*****************/voiddelay_uint(uintz){ while(z--);}基于51单片机的精准万年历的设计与实现全文共28页,当前为第20页。/**********************************************************基于51单片机的精准万年历的设计与实现全文共28页,当前为第20页。*函数名:addr_12864*功能:写地址*说明:写汉字时要写个地址*输入:无*返回:无**********************************************************/voidaddr_12864(ucharhang,ucharlie) //地址转换{ucharaddress;switch(hang){ case1:address=0x80+lie;break; case2:address=0x90+lie;break; case3:address=0x88+lie;break; case4:address=0x98+lie;break; default: break; }write_com(address);}/***********************************************************函数名:write_string*功能:在12864上显示字符数据*说明:*输入:无基于51单片机的精准万年历的设计与实现全文共28页,当前为第21页。*返回:无基于51单片机的精准万年历的设计与实现全文共28页,当前为第21页。**********************************************************/voidwrite_string(ucharhang,ucharlie,uchar*p){addr_12864(hang,lie); //地址转换while(*p!='\0'){ write_dat(*p); p++; delay_uint(50);}}/************初始化显示*****************/voidinit_12864_dis(){ write_string(1,0,"多功能万年历"); write_string(2,0,"阳历2000年00月00"); write_string(3,0,"农历00-00星期"); write_string(4,0,"00:00:0000.0℃"); write_guanbiao(1,1,0);}/******************时间芯片显示函数**********************/ voidds1302_dis(){ ucharmiao_1; if(menu_1==0)基于51单片机的精准万年历的设计与实现全文共28页,当前为第22页。 {基于51单片机的精准万年历的设计与实现全文共28页,当前为第22页。 read_time(); if(miao_1!=miao) { miao_1=miao; Conversion(0,nian,yue,ri); //农历转换 n_nian=year_moon; n_yue=month_moon; n_ri=day_moon; write_shu16(2,3,nian); //显示年 write_shu16(2,5,yue); //显示月 write_shu16(2,7,ri); //显示日 if(week==0) { write_string(3,7,"日"); } if(week==1) { write_string(3,7,"一"); } if(week==2) { write_string(3,7,"二"); } if(week==3) {基于51单片机的精准万年历的设计与实现全文共28页,当前为第23页。 write_string(3,7,"三");基于51单片机的精准万年历的设计与实现全文共28页,当前为第23页。 } if(week==4) { write_string(3,7,"四"); } if(week==5) { write_string(3,7,"五"); } if(week==6) { write_string(3,7,"六"); } if(week==7) { week=0;write_string(3,7,"日"); } addr_12864(3,2); //地址转换 write_dat(shuzi[n_yue/16]); write_dat(shuzi[n_yue%16]); write_dat('-'); write_dat(shuzi[n_ri/16]); write_dat(shuzi[n_ri%16]); addr_12864(4,0); //地址转换基于51单片机的精准万年历的设计与实现全文共28页,当前为第24页。 write_dat(''); 基于51单片机的精准万年历的设计与实现全文共28页,当前为第24页。 write_dat(shuzi[shi/16]); write_dat(shuzi[shi%16]); write_dat(':'); write_dat(shuzi[fen/16]); write_dat(shuzi[fen%16]); write_dat(':'); write_dat(shuzi[miao/16]); write_dat(shuzi[miao%16]); write_dat(''); write_dat(shuzi[temperature/100%10]); write_dat(shuzi[temperature/10%10]); write_dat('.'); write_dat(shuzi[temperature%10]); } }}/************主函数**************/voidmain(){ key1=1; key2=1; key3=1; key4=1; beep=0; //开机叫一声delay_1ms(150);基于51单片机的精准万年历的设计与实现全文共28页,当前为第25页。 P0=P1=P2=P3=0xff; //

温馨提示

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

评论

0/150

提交评论