单片机课程设计之基于DS18B20的多点温度测量系统的设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机应用系统设计课题:基于DS18B20的多点温度测量系统的设计姓名:班级:学号:指导老师:日期:引言在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都需要多点温度测量系统。因此,多点温度测量技术实现尤为重要。美国Dallas公司推出的数字温度传感器DSl8B20,电源供电范围在3.0~5.5V;温度测量范围为-55~+125℃;具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信;在-10~+85℃温度范围内具有±0.5℃精度;用户可编程设定9~12位的分辨率。以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统。DS18B20简介DSl8B20是美国Dallas半导体公司推出的一种智能数字温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现9~12位的数字值读数方式;可以分别在93.75ms和750ms内完成9位和12位的数字量;从DS18B20读出信息或写入DS18B20信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。使用DS18B20可使系统结构更趋简单,可靠性更高。1系统硬件设计由DS18B20和Atmel公司推出的单片机AT89C51以及相关外围电路组成的高精度、多点温度测量系统的结构框图如图1所示。系统采用8片DS18B20构成小型温度传感器网络[3],通过并行连接方式连接至单片机的通用I/O端口。单片机获得温度信息后,通过特定的算法,将处理后的温度信息通过LED显示出来,同时通过串行口送上位机处理。DS18B20内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支DS18B20进行控制,读取它们的温度。但是,要完成这个操作,软件设计比较复杂,同时存在一个缺点——速度太慢。无法适用于一些实时性要求高的测温场合。所以本次设计采取一种利用单片机的并口,同步快速读取8支DS18B20的方法。2系统软件设计2.1并行同步快速读取8支DS18B20的方法对于一支DS18B20,我们要输出或输入各类数据时,可以采用位寻址,比如:sbitDQ=P3^3;DQ=0;DQ=1;而对于8支DS18B20,如果还采用位寻址的方法,采用单总线,通过查询序列号依次读取,程序就非常复杂,而且速度会大大减慢,所以将位寻址扩展为字节寻址,比如:#defineDQP3;DQ=0x00;DQ=0xff;即可一次输出或输入8个位数据,从而达到同步读取的目的。2.2系统的温度合成处理采用上述方法一次读取8支DS18B20的时间不超过1秒,但读取的数据在RAM中并不顺序排列的。必须用软件合成处理,才能得到所需要的温度值。如表-1所示,纵向排列的是存放每次读取数据的Buf,而横向才是我们需要的温度值,此时设计一个将纵向数据转为横向温度的程序,连续执行两次,就可以将DS18B20的高和低字节全部合成标准的温度数据。2.3系统软件流程图主程序执行流程如图2所示,主程序先对各DS18B20进行初始化,然后重复调用写命令和读数据模块,最后将数据处理后送入LED显示。2.4系统电路图3系统仿真Proteus软件是Labcenter公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境。本设计的核心部分为八点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在KEIL下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。仿真中的一个画面如下面图3中的效果所示,此时采集的是第5通路的测量温度。4系统运行与数据分析根据系统软件与硬件设计方案搭建实际系统电路,依次采集八路温度测量数据,并且在LED数码管上显示所测温度,同时与现场温度计测量值进行比较,系统运行结果如下,见表-2:表-2传感器与温度计数据对照测量结果数据与温度计直接测量吻合,符合仿真结果,本系统的测量范围为0-99℃,DS18B20数字值读取位数为8位,精确到1℃,满足日常测量应用。另外可以通过改变DS18B20数字值读取位数提高精度,也可以根据实际应用要求扩大量程。在系统基础上可以加入开关控制测量通路选择,并实现超过测量范围蜂鸣器报警。5结论该温度测量系统结构简单、程序设计方便,基于仿真系统构建的实际电路运行良好,8支DS18B20的读取时间与1支DS18B20的读取时间基本相等,测温迅速准确。本设计采用Proteus仿真的好处在于可以迅速观察到设计效果,同时可以通过改变元器件参数使整个电路性能达到最优化。6参考文献1、唐俊翟.单片机原理与应用[M].北京:冶金工业出版社,252-2672、胡伟.单片机C程序设计及应用实例[M].北京:人民邮电出版社,1-4873、赵娜,赵刚.基于51单片机的温度测量系统[J].微计算机信息,2007.4、于永学,葛建.1-Wire总线数字温度传感器DS1-8B20及应用[J].电子产品世界,2003(2):80-82.5、江世明,刘先任.基于DS18B20的智能温度测量装置[J].邵阳学院学报,2004.6、聂毅.单片机定时器中断时间误差的分析及补偿[J]微计算机信息20027、谭浩强.C语言程序设计(第二版)北京:清华大学出版社1999附录:程序#includereg51.h#defineucharunsignedchar#defineuintunsignedintsbitDQ=P3^7;//ds18b20与单片机连接口sbitRS=P3^0;sbitRW=P3^1;sbitEN=P3^2;unsignedcharcodestr1[]={temperature:};unsignedcharcodestr2[]={};uchardatadisdata[5];uinttvalue;//温度值uchartflag;//温度正负标志/*************************lcd1602程序**************************/voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的){unsignedinti,j;for(i=0;ims;i++)for(j=0;j100;j++);}voidwr_com(unsignedcharcom)//写指令//{delay1ms(1);RS=0;RW=0;EN=0;P2=com;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidwr_dat(unsignedchardat)//写数据//{delay1ms(1);;RS=1;RW=0;EN=0;P2=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}voidlcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x08);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}voiddisplay(unsignedchar*p)//显示//{while(*p!='\0'){wr_dat(*p);p++;delay1ms(1);}}init_play()//初始化显示{lcd_init();wr_com(0x80);display(str1);wr_com(0xc0);display(str2);}/******************************ds1820程序***************************************/voiddelay_18B20(unsignedinti)//延时1微秒{while(i--);}voidds1820rst()/*ds1820复位*/{unsignedcharx=0;DQ=1;//DQ复位delay_18B20(4);//延时DQ=0;//DQ拉低delay_18B20(100);//精确延时大于480usDQ=1;//拉高delay_18B20(40);}uchards1820rd()/*读数据*/{unsignedchari=0;unsignedchardat=0;for(i=8;i0;i--){DQ=0;//给脉冲信号dat=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_18B20(10);}return(dat);}voidds1820wr(ucharwdata)/*写数据*/{unsignedchari=0;for(i=8;i0;i--){DQ=0;DQ=wdata&0x01;delay_18B20(10);DQ=1;wdata=1;}}read_temp()/*读取温度值并转换*/{uchara,b;ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0x44);//*启动温度转换*/ds1820rst();ds1820wr(0xcc);//*跳过读序列号*/ds1820wr(0xbe);//*读取温度*/a=ds1820rd();b=ds1820rd();tvalue=b;tvalue=8;tvalue=tvalue|a;if(tvalue0x0fff)tflag=0;else{tvalue=~tvalue+1;tflag=1;}tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数return(tvalue);}/*******************************************************************/voidds1820disp()//温度值显示{ucharflagdat;disdata[0]=tvalue/1000+0x30;//百位数disdata[1]=tvalue%1000/100+0x30;//十位数disdata[2]=tvalue%100/10+0x30;//个位数disdata[3]=tvalue%10+0x30;//小数位if(tflag==0)flagdat=0x20;//正温度不显示符号elseflagdat=0x2d;//负温度显示负号:-if(disdata[0]==0x30){disdata[0]=0x20;//如果百位为0,不显示if(disdata[1]==0x30){disdata[1]=0x20;//如果百位为0,十位为0也不显示}}wr_com(0xc0);wr_dat(flagdat);//显示符号位wr_com(0xc1);wr_dat(disdata[0]);//显示百位wr_com(0xc2);wr_dat(disdata[1]);//显示十位wr_com(0xc3);wr_dat(disdata[2]);//显示个位wr_com(0xc4);wr_dat(0x2e);//显示小数点wr_com(0xc5);wr_dat(disdata[3]);//显示小数位}/********************主程序***********************************/voidmain(){init_play();//初始化显示while(1){read_temp();//读取温度ds1820disp();//显示}}

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功