一、读取温度函数

float ds18b20_read_temperture(void)
{float temp;u8 dath=0;u8 datl=0;u16 value=0;ds18b20_start();//开始转换ds18b20_reset();//复位ds18b20_check();ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0xbe);//读存储器datl=ds18b20_read_byte();//低字节dath=ds18b20_read_byte();//高字节value=(dath<<8)+datl;//合并为16位数据if((value&0xf800)==0xf800)//判断符号位,负温度{value=(~value)+1; //数据取反再加1temp=value*(-0.0625);//乘以精度    }else //正温度{temp=value*0.0625; }return temp;
}

二、开始温度转换

void ds18b20_start(void)
{ds18b20_reset();//复位ds18b20_check();//检查DS18B20ds18b20_write_byte(0xcc);//SKIP ROMds18b20_write_byte(0x44);//转换命令
}

三、复位

void ds18b20_reset(void)
{DS18B20_PORT=0;   //拉低DQdelay_10us(75);   //拉低750usDS18B20_PORT=1;   //DQ=1delay_10us(2);   //20US
}

四、检查

u8 ds18b20_check(void)
{u8 time_temp=0;while(DS18B20_PORT&&time_temp<20)   //等待DQ为低电平{time_temp++;delay_10us(1); }if(time_temp>=20)return 1; //如果超时则强制返回1else time_temp=0;while((!DS18B20_PORT)&&time_temp<20)   //等待DQ为高电平{time_temp++;delay_10us(1);}if(time_temp>=20)return 1;  //如果超时则强制返回1return 0;
}

五、写入字节

void ds18b20_write_byte(u8 dat)
{u8 i=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次写一位,且先写低位再写高位{temp=dat&0x01;//选择低位准备写入dat>>=1;//将次高位移到低位if(temp){DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1;  delay_10us(6);}else{DS18B20_PORT=0;delay_10us(6);DS18B20_PORT=1;_nop_();_nop_();  }   }
}

六、读取字节高低位

u8 ds18b20_read_bit(void)
{u8 dat=0;DS18B20_PORT=0;_nop_();_nop_();DS18B20_PORT=1; _nop_();_nop_(); //该段时间不能过长,必须在15us内读取数据if(DS18B20_PORT)dat=1;  //如果总线上为1则数据dat为1,否则为0else dat=0;delay_10us(5);return dat;
} u8 ds18b20_read_byte(void)
{u8 i=0;u8 dat=0;u8 temp=0;for(i=0;i<8;i++)//循环8次,每次读取一位,且先读低位再读高位{temp=ds18b20_read_bit();dat=(temp<<7)|(dat>>1);}return dat;
}

DS18B20读取温度相关推荐

  1. STM32通过DS18B20读取温度

    DS18B20 简介 DS18B20是一款具有高精度温度测量的芯片,测温范围是-55摄氏度到125摄氏度. DS18B20 使用单总线协议,总线通讯通过一根控制信号线实现.控制线需要一个弱上拉电阻,这 ...

  2. DS18B20读取温度并显示在数码管上

    下面是我的函数 分3个文件:头文件,DS18B20系列子函数文件,主函数部分(既数据处理和显示部分) 头文件 #ifndef __TEMP_H_ #define __TEMP_H_#include&l ...

  3. DS18B20读取温度(带小数)

    由于DS18B20对时间精度要求很高,所以在写读取温度之前一定要改时序 1. 单总线延时函数 //单总线延时函数 void Delay_OneWire(unsigned int t) {t*=12; ...

  4. DS18B20读取温度,序号匹配

    1 /* DS18B20时钟端口.引脚定义 */ 2 #define DS18B20 GPIOC 3 #define DS18B20_Onboard (GPIO_Pin_15) 4 #define D ...

  5. 51单片机温度传感器DS18B20

    51单片机温度传感器DS18B20 实现功能 插上DS18B20温度传感器,数码管显示检测的温度值 单片机型号:STC89C52 DS18B20介绍 1.DS18B20简介 DS18B20 是由 DA ...

  6. DS18B20测量温度

    文章目录 一.DS18B20读取温度步骤 二.初始化复位时序 2.发送一个字节 二.读取数据 1.读取一个Bit 2.读取一个字节 三.启动温度转换 四.判断转换完成 五.读取温度 程序地址 一.DS ...

  7. MCU-51:单片机DS18B20温度报警器

    目录 一.DS18B20 1.1 DS18B20介绍 1.2 引脚及应用电路 1.3 内部结构框图 1.4 存储器结构 二.单总线 2.1 单总线介绍 2.2 单总线电路规范 2.3 单总线时序结构 ...

  8. C51---13 DS18B20温度传感器

    C51---13 DS18B20温度传感器 DS18B20介绍 引脚及电路 内部结构图 存储器的结构 单总线介绍 单总线电路规范 单总线时序结构❗ DS18B20操作流程 DS18B20数据帧 温度存 ...

  9. STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)

    文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...

最新文章

  1. linux 重新分区挂载,Linux:挂载磁盘分区,linux已挂载磁盘重新分区
  2. java 金字塔样式输出_Java打印金字塔(正实心、正空心,倒实心、倒空心),菱形...
  3. excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
  4. 当下的力量 - [读书笔记]
  5. 怎么在服务器跑sql文件,服务器mysql数据库如何运行脚本
  6. 为什么学校计算机没有声音,电脑为什么没声音,教您电脑为什么没声音
  7. DECOUPLED WEIGHT DECAY REGULARIZATION
  8. ESLint 与 Prettier使用
  9. 软考 软件设计师个人总结 (程序语言部分)
  10. 通用人工智能:我们是否接近,尝试是否有意义?
  11. 通过http请求上传含中文路径文件问题解决
  12. 蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解
  13. Pycharm编译代码时出现“SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file ...“
  14. 7天搭建物联网项目 STM32 + ESP8266 第 1 节 上传数据到云平台
  15. SQL:查找或删除重复行
  16. 利用python爬取复仇者联盟3无限战争豆瓣短评
  17. 【Nginx】第二十二节 redirect跟permanent区别
  18. O365 Exchange收到钓鱼邮件的处理办法
  19. java文件加密软件设计_【文件夹加密超级大师和Java软件构架设计模式哪个好用】文件夹加密超级大师和Java软件构架设计模式对比-ZOL下载...
  20. 主流休闲游戏分析报告

热门文章

  1. 为啥不招北大清华的?
  2. \t\t使用INDY的IdMappedPortTCP控件实现动态的HTTP代理服务器
  3. OverLoad和 OverWrite区别
  4. 基因表达式编程(GEP)自学 第【3】天 Python 实现
  5. 使用remoting 代替c# web service实现航班eterm命令发送和接收
  6. UiPath与按键精灵区别
  7. P1119 灾后重建(基础Floyd原理的理解和运用)
  8. 算法竞赛入门经典(刘汝佳)——代码笔记
  9. cc2530期末试卷_ZigBee期末试题.docx
  10. 超强古文...... yi