1、DS18B20.h 文件。主要进行函数声明,和管脚定义。

#ifndef _DS18B20_H_
#define _DS18B20_H_#include <intrins.h>
#include <reg52.h>sbit DS = P1^7;               //温度测量芯片数据线void delayus(unsigned char i);
void delayms(int j);
unsigned char DS18B20_Initial();
unsigned char DS18B20_ReadByte();
void DS18B20_SendByte(unsigned char dat);
float DS18B20_ReadTmp();#endif

2、DS18B20.c 文件,驱动程序
DS18B20驱动的重点是用单片机的IO口模拟通讯时序。

/*
DS18B20温度传感器驱动程序,调用方法为:调用函数DS18B20_ReadTmp(),返回一个浮点型温度数值,
返回的温度单位为℃ 。
*/#include <reg52.h>
#include <DS18B20.h>
#include <intrins.h>/*
*函数名 :delayus(unsigned char i)
*功能   : 产生微秒级延时,经调试,12MH晶振时,延时方程为 t=6i+8 , 所需延时时间对应的i值为:10us i=0(误差-1), 15us i=1(误差-1),45us i=6(误差-1), 60us i=9(误差+2),80us i=12(误差0),480us i=79(误差+2)
*输入 :延时参数 i
*输出 :无
*/
void delayus(unsigned char i)  //经调试,延时方程为 t=6i+8 , 所需延时时间对应的i值为:
{while(i){ --i;}
}/*
*函数名 :delayms(int j)
*功能  :产生毫秒级延时    t=0.21i+0.01   (t单位ms)
*输入  :j
*输出  :无
*/
void delayms(int j)
{while(j){ unsigned char k=100;while(k){--k;}--j;}
}/*
*函数名 : DS18B20_Initial()
*功能  :  DS18B20的初始化
*输入  : 无
*输出  :初始化失败返回0,成功返回1
*/
unsigned char DS18B20_Initial()
{unsigned char i=0;DS=0;delayus(85);         //延时480us       !!!79改85,增加一些延时DS=1;while(DS){delayus(15);       //延时约100usi++;if(i>5)              //等待>500us{return 0;     //初始化失败}}delayus(85);         return 1;            //初始化成功,给初始化函数返回1}/*
*函数名 :DS18B20_ReadByte()
*功能  : 读取一个字节的数据
*输入  : 无
*输出  : 读取到的数据*/
unsigned char DS18B20_ReadByte()     /*单纯地复制存储数据位,不需要算术运算因此用无符号数,不能用有符号数,否则符号会占用数据位*/
{unsigned char dat=0,bi=0;  unsigned char i;for(i=0;i<8;i++){DS=0;           //拉低数据线_nop_();         //空指令,占用1个机器周期的时间,12MHz晶振时为1usDS=1;              //释放数据线delayus(0);          //延时10us ,等待温度芯片发送数据线dat=dat>>1;         //右移1位,准备给最高位存入数据bi=DS;             //DS不是数据,不能进行移位操作,要先存入数据字符bi中dat=dat|(bi<<7);  /***将数据线DS的数据赋值到变量dat的第8位(最高位)中传感器是从低位开始发送数据,单片机要将收到的数据先存入高位,再一步步移至低位***/    delayus(6);        //延时48us,进行下一次读取}return dat;
}/*
*函数名 : DS18B20_SendByte(unsigned short int dat)
*功能  :  发送一个字节命令
*输入  :  需要发送的数据
*输出   :无
*/
void DS18B20_SendByte(unsigned char dat)
{unsigned char a;for(a=0;a<8;a++){     DS=0;delayus(1);           //延时15us,准备写入数据DS=dat&0x01;                //写入一位数据,写入最低位数据dat=dat>>1;delayus(9);           //延时等待60usDS=1;                    //再次拉高数据线}
}/*
*函数名:     DS18B20_ReadTmp()
*函数功能:   读取温度数据,并转换成以℃为单位的数值
*输入:   无
*输出:   温度值
*/
float DS18B20_ReadTmp()
{unsigned char tml,tmh;      //温度数据的低字节和高字节。分开、连续读取unsigned int  tmp=0;             //全部字节的温度数据(16字节)float temperature;           //经转换系数运算后的温度数据,℃DS18B20_Initial();          //温度芯片初始化delayms(5);                   //初始化完成后延时个1ms(时序图没有这样的要求)。DS18B20_SendByte(0xcc);        //跳过ROM,跳过温度芯片地址识别,直接进行温度变换DS18B20_SendByte(0x44);         //发送温度变换命令DS18B20_Initial();            //温度芯片初始化delayms(5);                   //初始化完成后延时个1ms(时序图没有这样的要求)。DS18B20_SendByte(0xcc);DS18B20_SendByte(0xbe);      //发送读暂存器命令tml=DS18B20_ReadByte();      //读取温度数据低字节,并存储到临时变量tml中tmh=DS18B20_ReadByte();tmp=tmp|tmh;                    //全温度字节中存入高字节tmp=(tmp<<8)|tml;           //全温度字节中存入低字节temperature = tmp*0.0625;         //换算温度值,℃return temperature;                     //将临时变量tmp的值返回给读温度指令,以便后续进行数据处理
}

DS18B20温度传感器驱动文件相关推荐

  1. STM32入门开发: 编写DS18B20温度传感器驱动(读取环境温度、支持级联)

    一.环境介绍 编程软件: keil5 操作系统: win10 MCU型号: STM32F103C8T6 STM32编程方式: 寄存器开发 (方便程序移植到其他单片机) 温度传感器: DS1820 DS ...

  2. ds18b20温度传感器驱动编写

    协议 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括:初始化时序.写时序.读时序. 黑色部分表示单片机操作,蓝色部分表示18b20操作,每次主机操 ...

  3. 51单片机DS18B20温度驱动

    51单片机DS18B20温度传感器驱动,仅有.h文件,无.c文件. /***************************************************************** ...

  4. 解决树莓派的gpio口不能读取ds18b20的设备文件

    概述 做了一个树莓派的温度检测装置,反正就是用ds18b20来传感器来检测温度这样子,不过树莓派最新的固件貌似不能读取ds18b20的设备文件 解决办法 我也是百度才知道的,把下面这句话加入/boot ...

  5. DS18B20温度采集报警系统,原理及汇编、C语言实现

    单片机课程设计已完成,现供以参考. DS18B20单总线的工作方式 数据手册说明1: DS18B20数字温度传感器提供9-Bit到12-Bit的摄氏温度测量精度和一个用户可编程的非易失性且具有过温和低 ...

  6. imx6ul linux读取DS18B20温度

    imx6ul linux读取DS18B20温度 首先尝试加载模块 root@imx6ulevk:~# modprobe w1-gpio modprobe: FATAL: Module w1-gpio ...

  7. DS18B20温度测量程序文件(简单通用)

    DS18B20是一个非常简单的温度传感器,对于像我这样单片机萌新是比较友好的.网上关于它的介绍非常多,包括原理.引脚.通信.以及51单片机.STM32的各种代码等等.本人写了一个简单的ds18b20. ...

  8. STC15F2K60S2读取DS18B20温度串口显示

    为方便大家调试,特附该程序的项目下载地址 STC15F2K60S2读取DS18B20温度实例下载地址 //************************** //程序说明:stc15f2k60s2采 ...

  9. ESP8266_RTOS_SDK v3.x 读DS18B20温度数据

    陈拓 2021/05/05-2021/05/05 1. 概述 在本文中我们使用ESP8266_RTOS_SDK 3.x读取DS18B20的数据. 开发环境: Win10 Linux子系统Ubuntu ...

最新文章

  1. PrestaShop 网站后台配置(三)
  2. 初学spring mvc
  3. python多态_python 多态
  4. php文件的作用,php入口文件的作用-PHP问题
  5. Qt工作笔记-右键菜单造成内存泄漏等分析
  6. linux system查看内存占用,Linux查看系统内存占用
  7. mysql profiling_MySQL Profiling 的使用
  8. python中plot是什么意思_python中的plot函数是什么?
  9. ubuntu搭建php运行环境
  10. Java se官方中文API下载链接
  11. 双十一,美团为何静悄悄?
  12. MySQl安装与学习,内附SQlyog
  13. 华为各类工程师通信基础面试题目及答案
  14. 计算机表格常用根式,excel怎么建立常用根式_在excel中怎样开根号�9�3
  15. 爱乐乐iLELE®益生菌新品上市由妈咪爱研究中心出品
  16. 看我解决Linux下的OTG切换问题
  17. windows10怎么备份操作系统
  18. C语言链表怎么合并同类项,求一个关于合并同类项的编程
  19. android图片压缩工具类
  20. SEO像艺术,为自己做站最划算

热门文章

  1. python读写磁盘扇区数据有什么用_磁盘存放数据原理 - osc_v8xs2czi的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. Google Maps无声导航的秘密
  3. 游程检验.医学统计实例详解-医学统计助手★卡方检验,t检验,F检验,秩和检验,方差分析
  4. 2021 新版微博转发爬虫发布
  5. DNF:拍卖行计算器 for JAVA 。 最近迷了毒奶粉。。索性写了个计算器~~~
  6. 南京大学计算机硕士毕业去向,南京大学金融硕士就业前景怎么样?快来看看就业质量报告吧...
  7. java毕业设计网上书城系统mybatis+源码+调试部署+系统+数据库+lw
  8. win10+NVIDIA GTX 960M+CUDA 8.0+cudnn6.0安装
  9. Mac使用Boot Camp安装win10(不用U盘)
  10. Yarn管理页面中Aplication history无法访问问题以及Aggregation is not enabled问题