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

上传人:飞****2 文档编号:60117003 上传时间:2022-11-13 格式:DOC 页数:13 大小:320KB
返回 下载 相关 举报
单片机课程设计之基于DS18B20的多点温度测量系统的设计.doc_第1页
第1页 / 共13页
单片机课程设计之基于DS18B20的多点温度测量系统的设计.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《单片机课程设计之基于DS18B20的多点温度测量系统的设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计之基于DS18B20的多点温度测量系统的设计.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、单片机应用系统设计课 题:基于DS18B20的多点温度测量系统的设计 姓 名: 班 级: 学 号: 指导老师: 日 期: 引 言 在粮库测温系统、冷库测温系统、智能化建筑控制系统、中央空调系统等多种系统中都需要多点温度测量系统。因此,多点温度测量技术实现尤为重要。美国Dallas公司推出的数字温度传感器DSl8B20,电源供电范围在3.05.5V;温度测量范围为-55+125;具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信;在-10+85温度范围内具有0.5精度;用户可编程设定912位的分辨率。以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统。 DS

2、18B20简介 DSl8B20是美国Dallas半导体公司推出的一种智能数字温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过编程实现912位的数字值读数方式;可以分别在93.75ms和750 ms内完成9位和12位的数字量;从DS18B20读出信息或写入DS18B20信息仅需要1根口线(单线接口);温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。使用DS18B20可使系统结构更趋简单,可靠性更高。1系统硬件设计 由DS18B20和Atmel公司推出的单片机AT89C51以及相关外围电路组成的高精度、多点温度测量系统的结构框

3、图如图1所示。系统采用8片DS18B20构成小型温度传感器网络3,通过并行连接方式连接至单片机的通用I/O端口。单片机获得温度信息后,通过特定的算法,将处理后的温度信息通过LED显示出来,同时通过串行口送上位机处理。 DS18B20内部均有一个独立的64位序列号,单片机通过序列号可以对一条总线上的多支DS18B20进行控制,读取它们的温度。但是,要完成这个操作,软件设计比较复杂,同时存在一个缺点速度太慢。无法适用于一些实时性要求高的测温场合。所以本次设计采取一种利用单片机的并口,同步快速读取8支DS18B20的方法。2系统软件设计21 并行同步快速读取8支DS18B20的方法 对于一支DS18

4、B20,我们要输出或输入各类数据时,可以采用位寻址,比如:sbit DQ=P33; DQ=0; DQ=1; 而对于8支DS18B20,如果还采用位寻址的方法,采用单总线,通过查询序列号依次读取,程序就非常复杂,而且速度会大大减慢,所以将位寻址扩展为字节寻址,比如: #define DQ P3; DQ=0x00; DQ=0xff; 即可一次输出或输入8个位数据,从而达到同步读取的目的。22 系统的温度合成处理 采用上述方法一次读取8支DS18B20的时间不超过1秒,但读取的数据在RAM中并不顺序排列的。必须用软件合成处理,才能得到所需要的温度值。如表-1所示,纵向排列的是存放每次读取数据的Buf

5、,而横向才是我们需要的温度值,此时设计一个将纵向数据转为横向温度的程序,连续执行两次,就可以将DS18B20的高和低字节全部合成标准的温度数据。23 系统软件流程图 主程序执行流程如图2所示,主程序先对各DS18B20进行初始化,然后重复调用写命令和读数据模块,最后将数据处理后送入LED显示。2. 4 系统电路图3系统仿真 Proteus软件是Labcenter公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的绘制与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能

6、仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验环境。 本设计的核心部分为八点温度数据的快速准确读取,完成电路设计和软件编程后,将程序在KEIL下编译,装入单片机,进行仿真,可以看到,同步快速多点温度测量得到了实现。仿真中的一个画面如下面图3中的效果所示,此时采集的是第5通路的测量温度。4系统运行与数据分析 根据系统软件与硬件设计方案搭建实际系统电路,依次采集八路温度测量数据,并且在LED数码管上显示所测温度,同时与现场温度计测量值进行比较,系统运行结果

7、如下,见表-2:表-2 传感器与温度计数据对照 测量结果数据与温度计直接测量吻合,符合仿真结果,本系统的测量范围为099,DS18B20数字值读取位数为8位,精确到1,满足日常测量应用。另外可以通过改变DS18B20数字值读取位数提高精度,也可以根据实际应用要求扩大量程。在系统基础上可以加入开关控制测量通路选择,并实现超过测量范围蜂鸣器报警。5结 论 该温度测量系统结构简单、程序设计方便,基于仿真系统构建的实际电路运行良好,8支DS18B20的读取时间与1支DS18B20的读取时间基本相等,测温迅速准确。 本设计采用Proteus仿真的好处在于可以迅速观察到设计效果,同时可以通过改变元器件参数

8、使整个电路性能达到最优化。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 附录:程序#

9、include#define uchar unsigned char#define uint unsigned intsbit DQ=P37;/ds18b20与单片机连接口sbit RS=P30;sbit RW=P31;sbit EN=P32;unsigned char code str1=temperature: ;unsigned char code str2= ; uchar data disdata5;uint tvalue;/温度值uchar tflag;/温度正负标志/*lcd1602程序*/ void delay1ms(unsigned int ms)/延时1毫秒(不够精确的)

10、unsigned int i,j; for(i=0;ims;i+) for(j=0;j0;i-) DQ = 0; /给脉冲信号 dat=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat); void ds1820wr(uchar wdata)/*写数据*/ unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata=1; read_temp()/*读取温度值并转换*/ uchar a,b; d

11、s1820rst(); 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(tvalu

12、e); /*/ void ds1820disp()/温度值显示 uchar flagdat; disdata0=tvalue/1000+0x30;/百位数 disdata1=tvalue%1000/100+0x30;/十位数 disdata2=tvalue%100/10+0x30;/个位数 disdata3=tvalue%10+0x30;/小数位 if(tflag=0) flagdat=0x20;/正温度不显示符号 else flagdat=0x2d;/负温度显示负号:- if(disdata0=0x30) disdata0=0x20;/如果百位为0,不显示 if(disdata1=0x30)

13、 disdata1=0x20;/如果百位为0,十位为0也不显示 wr_com(0xc0);wr_dat(flagdat);/显示符号位 wr_com(0xc1); wr_dat(disdata0);/显示百位 wr_com(0xc2); wr_dat(disdata1);/显示十位 wr_com(0xc3); wr_dat(disdata2);/显示个位 wr_com(0xc4); wr_dat(0x2e);/显示小数点 wr_com(0xc5); wr_dat(disdata3);/显示小数位 /*主程序*/ void main() init_play();/初始化显示 while(1)read_temp();/读取温度 ds1820disp();/显示

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁