您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的18B20温度采集与适时24C02存储方案设计
1基于单片机的温度采集与适时存储方案设计摘要本课题为基于STC89C52单片机的温度采集与适时存储功能设计。系统不仅具有适时的温度采集功能,而且还具有将温度存储的功能,为一些场合需记录特殊温度提供了可能。温度采集部分使用单总线的DS18B20温度传感器,用液晶LCD1602作为显示器,存储器件使用芯片AT24C02。温度传感器DS18B20采集温度信号送给单片机处理,单片机再把温度数据送液晶显示器LCD1602显示,键盘是用来温度查询的,本设计还可以根据需要实时存储并显示一些必要的温度值。关键词:STC89C52单片机18B20LCD160224C02存储2AbstractThistopicisSTC89C52basedonsingle-chiptemperaturegatheringandtimelystoragefunctiondesign.Systemnotonlyhasthefunctionoftemperaturegatheringtimely,butalsohasthefunctionofstoragetemperaturewillneedsomeoccasionsforspecialtemperaturerecords.TemperaturegatheringpartusesingletemperaturesensorDS18B20buswithLCDdisplay,LCD1602,storagedevicesusedasAT24C02chips.TemperaturesensorDS18B20collectiontemperaturesignalprocessingchipmicrocontroller,forthetemperaturedatasentLCD1602LCDdisplayandkeyboardisused,thedesignofthetemperatureinquiresaccordingtostillcanreal-timedisplaysomenecessaryandstoragetemperature.Keywords:STC89C52microcontroller18B20LCD160224C02storage3一、方案选择与论证按照系统的设计功能要求,本设计采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制温度的采集和适时存储。确定设计系统由单片机主控模块、测温模块、显示模块、按键接口模块和存储模块共五个模块组成,电路系统框图如图1所示。1)显示方案选择方案一:温度的显示可以用数码管,但数码管的只能显示简单的数字,其电路复杂,占用资源较多,显示信息少,不宜显示大量信息。方案二:用液晶显示器LCD1602显示温度,其功耗小、体积小、显示内容丰富、超薄轻巧,且其内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形。我们通过比较选择方案二。2)温度采集方案选择方案一:采用SHT10来实现温度采集,SHT10是瑞士Sensirion公司生产的具有I2C总线接口的单片全校准数字式相对湿度和温度传感器。该传感器采用独特的CMOSensTM技术,具有数字式输出、免调试、免标定、免外围电路及全互换的特点。方案二:温度传感器DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简4单的编程实现9-12位的数字值读数方式,它内部有一个结构为8字节的高速暂存RAM存储器。本设计只需采集温度,故我们通过比较选择方案二。二、理论计算2.1温度计算实现温度的实时显示是由计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符显示。因为DS18B20的转换精度为9-12位可选的,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里德值是以0.0625为步进的,即温度值为温度寄存器里德二进制值乘以0.0625,就是实际的十进制温度值。华氏温度与摄氏温度的转换公式:摄氏:C=5/9ºC(F-32)华氏:F=9/5ºC+32计算温度子程序流程图见图2图25三、硬件的设计与实现根据方案的选择,系统由AT89C52、显示电路、测温电路和键盘电路组成。其电路如图3所示:注:接口有错,从网上找的图,24C02也没画上去,具体节后见程序端口定义。四,软件部分硬件部分不多说了,时间很紧,软件里写的很详细,请参考者仔细阅读程序。6使用注意:由于程序是模块化设计的,所以使用时应根据各模块程序类型来复制粘贴。下面附一个本人调试时的界面图,供大家参考。1.18b20驱动程序///*************18b20.h********///////#ifndef__18b20_h__#define__18b20_h__#includereg52.h#include18b20.h#includeintrins.h#includemath.h#defineucharunsignedchar7#defineuintunsignedintsbitDQ=P1^3;externvoidread_ds18b20();externvoiddelay(uinti);externvoidInit_DS18B20(void);externunsignedcharReadOneChar(void);externvoidWriteOneChar(uchardat);externunsignedintReadTemperature(void);#endif///*************18b20.c********////////*--------------程序名称:18b20驱动程序--------------------------------------------------------*//*--------------出口信息:读出温度值后,返回值为t,使用时,把t值付给一个Int型变量即可使用------*//*--------------注意:温度值t为int型,高四位为0------------------------------------------------*//*--------------作者:孟良---------------------------------------------------------------------*//*--------------单位:安徽建筑工业学院---------------------------------------------------------*//*--------------时间:2010.8.27----------------------------------------------------------------*/8#includereg52.h#include18b20.h#includeintrins.h#includemath.h#defineucharunsignedchar#defineuintunsignedint/*******************延时函数******************/voiddelay(uinti){while(i--);}/******************************************************************//*初始化*//*****************************************************************/voidInit_DS18B20(void){unsignedcharx=0;DQ=1;//DQ复位delay(8);//稍做延时DQ=0;//单片机将DQ拉低9delay(80);//精确延时大于480usDQ=1;//拉高总线delay(10);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay(5);}//读一个字节unsignedcharReadOneChar(void){uintj=0;uchardat=0;for(j=8;j0;j--){DQ=0;//给脉冲信号dat=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay(5);}return(dat);}//写一个字节10voidWriteOneChar(uchardat){uchark=0;for(k=8;k0;k--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat=1;}delay(5);}//读取温度unsignedintReadTemperature(void){unsignedchara=0;unsignedintb=0;unsignedintt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换delay(200);Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度11a=ReadOneChar();//低位b=ReadOneChar();//高位b=8;t=a+b;if(t==0x0550)//屏蔽第一次显示85return(0);elsereturn(t);}2.1602驱动程序//////////////*1602.h*********////////#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitrs=P2^4;sbitrw=P2^5;sbite=P2^6;voiddelay_1ms(uintz);voidinit_1602();voidwrite_1602_com(ucharcom);voidwrite_1602_dat(uchardate);voiddelay_1ms(uintz){12uintx,y;for(x=z;x0;x--)for(y=110;y0;y--);}voidinit_1602(){delay_1ms(15);write_1602_com(0x38);//显示模式设置,不检测忙信号write_1602_com(0x0c);//开显示,显示光标,闪烁write_1602_com(0x06);//当读或写一个字节后,地址加1,光标向后移一字节write_1602_com(0x80);//光标显示在第一行第一个字节}voidwrite_1602_com(ucharcom){rs=0;rw=0;P0=com;delay_1ms(5);e=1;delay_1ms(5);13e=0;}voidwrite_1602_dat(uchardate){rs=1;rw=0;P0=date;delay_1ms(5);e=1;delay_1ms(5);e=0;}3.24c02驱动程序////////////24c02.H//////////#ifndef__24C02_h__#define__24C02_h__#includereg52.h#defineucharunsignedchar#defineuinrunsignedint#defineAddWr0xae#defineAddRd0xaf14sbitwp=P1^0;sbitscl=P1^1;sbitsda=P1^2;externvoidmDelay(unsignedcharj);externvoidStart(void);externvoidStop(void);externvoidAck(void);externvoidNoAck(vo
本文标题:基于单片机的18B20温度采集与适时24C02存储方案设计
链接地址:https://www.777doc.com/doc-2573846 .html