ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:257.46KB ,
资源ID:8027771      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8027771.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课程设计之基于DS18B20的多点温度测量系统的设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

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

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

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

6、VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如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语言程

9、序设计(第二版)北京:清华大学出版社1999 附录:程序 #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(

10、unsigned int ms)/延时1毫秒(不够精确的) 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_t

11、emp()/*读取温度值并转换*/ uchar a,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)

12、;/温度值扩大10倍,精确到1位小数 return(tvalue); /*/ 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=0x2

13、0;/如果百位为0,不显示 if(disdata1=0x30) 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();/显示

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1