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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(DS18B20温度传感器详解带c程序.pdf)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS18B20温度传感器详解带c程序.pdf

1、DS18B20 温度传感器温度传感器(详细案列详细案列+程序程序)硬件介绍 1.1 主要特征(1)独特的单线接口方式,只需一个接口引脚即可通信;(2)每一个 DS18B20 都有一个唯一的 64 位 ROM 序列码;(3)在使用中不需要任何外围元件;(4)可用数据线供电,电压范围:+3.0V-+5.5 V;(5)测温范围:-55-+125,在-10-+85范围内精度为+0.5,分辨率为 0.0625;(6)通过编程可实现 9-12 位的数字读数方式。温度转换成 12 位数字信号所需时间最长为 750ms,而在 9 位分辩模式工作时仅需 93.75ms;(7)用户可自设定非易失性的报警上下限值;

2、(8)告警搜索命令可识别和定位那些超过报警限值的 DS18B20;(9)多个 DS18B20 可以并联在惟一的三线上,实现多点测温;(10)电源极性接反时,DS18B20 不会因发热而烧毁,但不能正常工作;1.2 外形与接线 引脚图 接线图 DS18B20 引脚定义:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。内部结构与介绍 2.1 内部结构 6464位位ROM ROM 和和单线单线接口接口电电源源检检测测存储器和控制器存储器和控制器高速高速缓存缓存存储器存储器8 8位位CRCCRC生成器生成器温度灵敏元件温度灵敏元件低温触发器低温

3、触发器TLTL高温触发器高温触发器THTH配置寄存器配置寄存器 内部结构图 2.2 DS18B20 内部存储器及温度数据格式 对于 DS18B20 内部存储器结构(见下图),它包括一个暂存 RAM 和一个非易失性电可擦除 EERAM,后者存放报警上下限 TH、TL。当改变 TH、T L 中的值时,数据首先被写进暂存器的第二、三字节中,主机可再读出其中内容进行验证。如果正确,当主机发送复制暂存器命令,暂存器的第二、三字节将被复制到 TH、TL中,这样处理有利于确保该数据在单总线上传输的完整性7。(暂存 RAM)EERAM 结构(电可擦写 RAM)暂存存储器作用是在单线通信时确保数据的完整性,它由

4、 8 字节组成,头两个字节表示测得的温度读数。以 12 位转化为例说明温度高低字节存放形式(温度的存储形式如表 3.1)及计算:12 位转化后得到的 12位数据,存储在 18B20 的两个高低 8 位的 RAM 中,二进制中的前面 5 位是符号位。如果测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1,再乘于 0.0625 才能得到实际温度8。表 3.1 温度的存储形式 高 8 位 S S S S S 26 25 24 低 8 位 23 22 21 20 2-1 2-2 2-3 2-4 S=1

5、 时表示温度为负,S=0 时表示温度为正,其余低位以二进制补码形式表示,最低位为 1 时表示 0.0625。温度/数字对应关系如表 3.2 所示。表 3.2 DS18B20 温度/数字对应关系表 温度()输出的二进制码 对应的十六进制码+125 0000 0111 1101 0000 07D0H+85 0000 0101 0101 0000 0550H+25.0625 0000 0001 1001 0001 0191H+10.125 0000 0000 1010 0010 00A2H+0.5 0000 0000 0000 1000 0008H 0 0000 0000 0000 0000 000

6、0H-0.5 1111 1111 1111 1000 FFF8H-10.125 1111 1111 0110 1110 FF5EH-25.0625 1111 1110 0110 1111 FF6FH-55 1111 1100 1001 0000 FC90H 执行序列与介绍 3.1 执行序列 (1)初始化 (2)ROM 指令集 AREAD_ROM 33H 读 ROM/可读出 64 位编码 BMATCH_ROM 55H 匹配 ROM/以此指令对某一个 1820 操作 CSKIP_ROM CCH 跳过 ROM/用于总线只有一个 1820 DSEARCH_ROM F0H 搜索 ROM/用于一次读取多个

7、 1820 的 64 位编码 EALARM_SEARCH ECH 报警搜索 ROM/从多个 1820 中搜索哪个在报警 (3)DS18B20 功能指令(暂存器指令集)A温度转换 44H 启动 DS18B20 进行温度转换 B读暂存器 BEH 读暂存器 9 个字节内容 C写暂存器 4EH 将数据写入暂存器的 TH、TL 字节 D复制暂存器 48H 把暂存器的 TH、TL 字节写到 E2RAM 中 E重新调 E2RAM B8H 把 E2RAM 中的 TH、TL 字节写到暂存器 TH、TL 字节 F读电源供电方式 B4H 启动 DS18B20 发送电源供电方式的信号给主 CPU 运行流程 4.1 多

8、个读取步骤 4.2 单个读取步骤 4.3 读取到的字节 时序介绍 5.1 初始化 主控器发送脉冲主控器发送脉冲至少至少480480ususDSDS1818B B2020等待等待1515 6060ususVpuVpu单总线单总线GNDGND主控器接收主控器接收至少至少480480ususDSDS1818B B2020发送发送存在脉冲存在脉冲6060 240240usus 5.2 写时间隙 5.3 读时间隙 6.开发板原理图7源程序#include/晶振为 11.0592MHz#define uint unsigned int#define uchar unsigned char sbit DQ=

9、P25;/接温度传感器 sbit duan=P26;/数码管段选 sbit wei=P27;/数码管位选 uchar code numw=0 x01,0 x02,0 x04,0 x08,0 x10,/数码管位选 0 x20,0 x40,0 x80,0 x00;uchar code numd=0 x3f,0 x06,0 x5b,0 x4f,0 x66,/数码管段选显示(09)0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar code numdg=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,/数码管“个”位段选显示因为保留一位小数,0 xed,0 xfd,0

10、x87,0 xff,0 xef;/所以各位后要显示小数点,所以需要重新编码(09)uchar code numfh=0 x40,0 x00;/温度+符号位/*1ms 延时函数*/void delay0(uint z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*15us 延时函数*/void delay(uint z)while(z-);/*初始化 DS18B20 函数*/void reset_ds18b20()uchar stat=0;DQ=1;delay(8);DQ=0;delay(80);/600us/12mhz DQ=1;delay(8);sta

11、t=DQ;/高电平为存在,低电平为不存在(stat 应该为 0)delay(4);/while(!DQ);/*等待 DQ 变为高电平 /因为存在脉冲检测结束后自动拉高*/return stat;/*写一个字节函数*/void write_byte(uchar dat)uchar i;DQ=1;/先拉高电平,为写作准备 for(i=0;i=1;delay(4);/*读一个字节函数*/uchar read_byte()uchar vaul,i;DQ=1;/先拉高电平,为读作准备 for(i=0;i=1;DQ=1;if(DQ)vaul|=0 x80;delay(4);return vaul;/*读取

12、温度值函数*/int read_temper()uchar templ,temph,flag;int temp;reset_ds18b20();/复位操作 write_byte(0 xcc);/跳过 ROM write_byte(0 x44);/温度转换 delay(300);/*reset_ds18b20();/复位操作 write_byte(0 xcc);/跳过 ROM write_byte(0 xbe);/读内部 RAM 内容 templ=read_byte();temph=read_byte();flag=(temph&0 x80)7;/判断高字节符号位是 1 还是 0(1 为负温度,

13、0 为正温度)if(flag=0)/temp=(temph4);temp=(templ+temph*256)*0.625;/将精度 0.0625 扩大 10 倍,因为 temp 为整形,小数部分读不到 /此项目需要保留一位小数,所以 x10,小数点后移一位 /所以可得要保留几位小数点就扩大 10 的几次方 else temp=(templ+temph*256)-1)*(-0.625);return temp;/*显示函数*/void display(int num)uchar i,zf,bai,shi,ge,fen;if(num0)zf=0;/温度 符号位 num=num*(-1);else

14、zf=1;/温度+符号位 bai=num/1000;shi=num%1000/100;ge=num%100/10;fen=num%10;for(i=0;i6;i+)wei=1;P1=numwi;wei=0;P1=0 x00;/消影 duan=1;switch(i)case 0:if(zf=0)P1=numfhzf;else if(bai!=0)P1=numdbai;else if(shi!=0)P1=numdshi;else P1=numdgge;break;case 1:if(zf=0&shi!=0)P1=numdshi;else if(zf=0&shi=0)P1=numdgge;else

15、if(zf!=0&bai!=0)P1=numdshi;else if(zf!=0&bai=0&shi!=0)P1=numdgge;else if(zf!=0&bai=0&shi=0)P1=numdfen;break;case 2:if(zf=0&shi!=0)P1=numdgge;else if(zf=0&shi=0)P1=numdfen;else if(zf!=0&bai!=0)P1=numdgge;else if(zf!=0&bai=0&shi!=0)P1=numdfen;else if(zf!=0&bai=0&shi=0)P1=0 x63;break;case 3:if(zf=0&shi

16、!=0)P1=numdfen;else if(zf=0&shi=0)P1=0 x63;else if(zf!=0&bai!=0)P1=numdfen;else if(zf!=0&bai=0&shi!=0)P1=0 x63;else if(zf!=0&bai=0&shi=0)P1=0 x39;break;case 4:if(zf=0&shi!=0)P1=0 x63;else if(zf=0&shi=0)P1=0 x39;else if(zf!=0&bai!=0)P1=0 x63;else if(zf!=0&bai=0&shi!=0)P1=0 x39;else P1=0 x00;break;case 5:if(zf=0&shi!=0)P1=0 x39;else if(zf!=0&bai!=0)P1=0 x39;else P1=0 x00;break;duan=0;P1=0 x00;/消影 delay0(10);/*主函数*/void main()while(1)display(read_temper();8效果图

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

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