51单片机的ds18b20驱动程序

2023-05-16

/*******************************************************************************
*  标题:  18b20温度芯片驱动程序                                                            *
*  文件:  18b20.h 18b20.c                                                                         *
*  日期:  2010-3-11                                                                                     *
*  版本:  1.12(试验通过版)可用51hei单片机开发板               *
*  邮箱: 
acsdf139@163.com        qq:526083029                                 *
*  网站: 无                                                                                                  *
********************************************************************************
*  描述:                                                                                                          *
*         用法:首先在主程序内添加头文件#include"18b20.c"                 *
*      在程序中使用ReadTemp();获取温度芯片内数据                             *
*      使用 temp_to_str();函数将时间数据转换液晶字符                         *         
*                                                                                                                     *
********************************************************************************
*【版权】自己参照网上,朋友,以及书本资料上写的,所以没有版权       *
*【声明】此程序,可用于学习,参考及实际设计中,欢迎转载复制以及建议批评     *
*【技术支持】qq:526083029  小张                                                      *
********************************************************************************/
 
#ifndef _18B20_H_
#define _18B20_H_
#define uchar unsigned char
#define rerom1820            0x33       // 读ROM指令   
#define matchrom1820         0x55      // 匹配ROM指令   
#define skiprom1820          0xCC      // 跳过ROM指令   
#define searchrom1820        0xF0      // 搜索ROM指令   
#define alarmsearch1820      0xEC      // 报警搜索指令   
#define wrscratchpad1820     0x4E      // 写暂存寄存器指令   
#define rescratchpad1820     0xBE      // 读暂存寄存器指令   
#define copyscratchpad1820   0x48      // 复制暂存寄存器指令   
#define convert1820          0x44      // 启动温度转换指令   
#define recalle21820         0xB8      // 重新调出E2PROM的数据 
/***********ds18b20延迟子函数*******/
extern void delaydq(uchar i);
/**********ds18b20初始化函数**********************/
extern void dqinit(void);
/***********ds18b20读一个字节**************/ 
extern uchar re1820b(void);
/*************ds18b20写一个字节****************/ 
extern void wr1820b(uchar dat);
extern void ReadTemp(void);
extern void temp_to_str();
#endif
///c程序//
#include <AT89X52.H>
#include "18b20.h"
#include <intrins.h>
//管脚定义
sbit DQ=P3^0;
 
uchar TempBuffer[8];
uchar temp_value,temp2,xs,fflag;
             
 
/*************************************
函数名:delaydq
函数功能:延时
参数:i(秒数)
返回:无
备注:无
*************************************/
void delaydq(uchar i)
{
       while(i--);
}
/*************************************
函数名:dqinit
函数功能:初始化
参数:无
返回:无
备注:无
*************************************/
void dqinit(void)
{
        uchar x=0;
        DQ = 1;          //DQ 复位
        delaydq(8); // 稍做延时
        DQ = 0;          // 单片机将DQ拉低
        delaydq(80); // 精确延时 大于 480us
        DQ = 1;          // 拉高总线
        delaydq(14);
        x=DQ;            // 稍做延时后 如果x=0则初始化成功 x=1则初始化失败
        delaydq(20);
}
/*************************************
函数名:re1820b
函数功能:读数据
参数:无
返回:dat(数据)
备注:无
*************************************/
uchar re1820b(void)
{
       uchar i=0;
       uchar dat = 0;
       for (i=8;i>0;i--)
        {
               DQ = 0; // 给脉冲信号
               dat>>=1;
               DQ = 1; // 给脉冲信号
               if(DQ)
               dat|=0x80;
               delaydq(4);
        }
       return(dat);
}
/*************************************
函数名:wr1820b
函数功能:写数据
参数:dat(数据)
返回:无
备注:无
*************************************/
void wr1820b(uchar dat)
{
       unsigned char i=0;
       for (i=8; i>0; i--)
       {
             DQ = 0;
              DQ = dat&0x01;
           delaydq(5);
              DQ = 1;
           dat>>=1;
       }
}
/*************************************
作者:刘温电   来源:本站原创   点击数:5292  更新时间:2013年11月26日
函数名:ReadTemp
函数功能:温度转换
参数:无
返回:无
备注:无
*************************************/
void ReadTemp(void)
{
       unsigned char a=0;
       unsigned char b=0;
       unsigned char t=0;
 
       dqinit();
       wr1820b(0xCC);        // 跳过读序号列号的操作
       wr1820b(0x44);    // 启动温度转换
 
       delaydq(100);      
       dqinit();
       wr1820b(0xCC);   // 跳过读序号列号的操作
       wr1820b(0xBE);  // 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 
       delaydq(100);
 
       a=re1820b();       // 读取温度值低位
       b=re1820b();              // 读取温度值高位
    if(b>127)
       {
       b=(256-b);a=(256-a);fflag=1; // 负温度求补码
       }
       temp_value=b<<4;
       temp_value+=(a&0xf0)>>4;  
    temp2=a&0x0f;             // 小数的值
      
 
   xs=temp2*0.0625*10; // 小数位,若为0.5则算为5来显示   xs小数
 
        
}
 
/*************************************
函数名:temp_to_str
函数功能:温度显示
参数:无
返回:无
备注:无
*************************************/
void temp_to_str()    // 温度数据转换成液晶字符显示
{
 if(fflag==1)
 { TempBuffer[0]='-';
             TempBuffer[1]=temp_value/10+'0'; // 十位
             TempBuffer[2]=temp_value%10+'0';  // 个位
             TempBuffer[3]='.';
             TempBuffer[4]=xs+'0';
             TempBuffer[5]=0xdf;   // 温度符号
             TempBuffer[6]='C';
             TempBuffer[7]='\0';
 }
 else
 {
             TempBuffer[0]='+';
             TempBuffer[1]=temp_value/10+'0';  // 十位
             TempBuffer[2]=temp_value%10+'0'; // 个位
             TempBuffer[3]='.';
             TempBuffer[4]=xs+'0';
             TempBuffer[5]=0xdf;   // 温度符号
             TempBuffer[6]='C';
             TempBuffer[7]='\0';
 
 }
 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机的ds18b20驱动程序 的相关文章

  • makefile '@' '$' '$$' '-' '-n ' 使用小结

    编译代码时 xff0c 会进程接触makefile xff0c 会涉及到一些符号 xff0c 由于不明白有些意思经常出现问题 xff0c 在此归纳一下 39 64 39 符号的使用 通常makefile会将其执行的命令行在执行前输出到屏幕上
  • 【STM32】RTC实时时钟,步骤超细详解,一文看懂RTC

    什么是RTC RTC Real Time Clock xff1a 实时时钟 RTC是个独立的定时器 RTC模块拥有一个连续计数的计数器 xff0c 在相应的软件配置下 xff0c 可以提供时钟日历的功能 修改计数器的值可以重新设置当前时间和
  • FreeRTOS学习(一)

    前言 最近正在学习和FreeRTOS相关的知识 xff0c 在此记录一下 xff0c 学习资料来自正点原子 在学习之前 xff0c 我也有一个和很多初学者共同的疑惑 Why RTOS xff1f 在探究这个问题之前 xff0c 我想先回顾一
  • stm32CUBEIDE 生成的串口初始化代码详解

    static void MX USART1 UART Init void huart1 Instance 61 USART1 huart1 Init BaudRate 61 115200 huart1 Init WordLength 61
  • Install Python 3 on Ubuntu 18.04 or 20.04

    Install Python 3 on Ubuntu 18 04 or 20 04 Step1 Check your version of PythonStep 2 Install Supporting SoftwareStep 3 Dow
  • Python 报错:Command "python setup.py egg_info" failed with error code 1

    最近做一个项目 xff0c 需要搭建很多不同的python环境 xff0c 于是我就用pip install装了很多包 xff0c 但是装包的时候我遇到了很多次这个报错 xff0c 比如这一次我在安装imgaug的时候也提示了这个错误 如图
  • FreeRTOS 常用的几个函数

    1 xff09 vTaskSuspend TaskHandle t Task ID 挂起指定任务 被挂起的任务绝不会得到CPU的使用权 xff0c 不管该任务具有什么优先 级 使用实例 static TaskHandle t LED Tas
  • FreeRTOS 任务设计注意事项

    1 FreeRTOS中程序运行的上下文包括 xff1a 中断服务函数普通任务空闲任务 1 xff09 中断服务函数是一种需要特别注意的上下文环境 xff0c 它运行在非任务的执行环境下 xff08 一般为芯片的一种特殊运行模式 xff08
  • 2022,程序员应该如何找工作

    最近找工作面了不少公司 xff0c 也有不少感悟和心得 xff0c 今天在这里分享给大家 1 想清楚自己为什么离职 每个人离职都有自己的理由 xff0c 这里列举了一些离职理由 钱给的不够干的不开心没有发展前途加班太严重回老家发展领导不好不
  • 我的四轴飞行器经验总结(一)

    从我看到了TED的演讲和不断冒出来大疆的无人机产品新闻开始 xff0c 我开始爱上了做四轴飞行器 xff0c 有的人可能只当做是一个电子产品制作或者DIY什么的 xff0c 可是我觉的我对四轴飞行器有着更加深的感情 xff0c 就连我的桌面
  • 环境变量设置后不生效

    不需要重启系统 xff0c 只需要重启VS
  • mac os上编译vlc视频库的踩坑之旅

    mac os上编译vlc视频库的踩坑之旅 mac os上编译vlc视频库的踩坑之旅 开始编译VLC视频库 一前期准备工作二参照官方编译文档安装软件三开始编译vlc四踩一些坑五总结 新项目开始目涉及媒体播放 xff0c 在android上多媒
  • 【JAVA】Eclipse保存时出现“Save could not be completed”问题

    问题 xff1a Save could not be completed 原因 xff1a eclipse的默认编译语言是 34 ISO 8859 1 34 xff0c 这个语言不支持中文 xff0c 所以如果编辑的程序含有中文而且编译语言
  •  MX-Linux:在distrowatch上的排名,为什么能够做到第一?

    个人观点 xff1a MX Linux 很好 MX Linux 桌面操作系统的成功 xff0c 主要有以下这几个因素 xff1a A 技术因素 xff1a 1 关键因素 xff1a MX snapshots工具 xff1b 2 次要因素 x
  • Qt 出现“程序异常结束”问题可能的解决思路

    第三方库的编译有问题 请注意 xff0c 出现此种问题绝不止这一个原因 xff0c 还包括其它很多原因 xff0c 这些原因可能千奇百怪 xff0c 需要你的开发经验去积累去发掘 在这里 xff0c 根据我自己的经验 xff0c 总结几种可
  • Qt 中如何在主窗口中添加子窗口

    方法 原理其实简单 和在窗口上动态 代码的形式 添加控件的方法一样 但需要设置一下子窗口的属性 在子窗口构造函数中添加代码 setWindowFlags Qt FramelessWindowHint 作用 隐藏子窗口的标题栏和边框 如果不隐
  • Qt5 自定义字体修改: 字体、大小以及颜色(部分要点已实测)

    Qt设置字体类型及添加字体文件 Qt 添加字体文件 1 设置支持的字体 QFont font font setFamily 34 填写字体名称 34 2 通过字体文件来设置字体 字体的名称可以是自带的 xff0c 也可以是外部的 xff0c
  • Qt QTableWidget 表格自适应 高度和宽度

    1 在MainWindow中设置 对被嵌入的子窗口进行设置 xff0c 去除子窗口的一些影响到嵌入的部件 pTable gt setWindowFlags Qt CustomizeWindowHint Qt FramelessWindowH
  • 互斥信号量和二值信号量的区别

    详解互斥信号量的概念和运行 https blog csdn net weichushun article details 122744773 互斥信号量的主要作用是对资源实现互斥访问 xff0c 使用二值信号量也可以实现互斥访问的功能 xf
  • Qt QTableWidget设置表头、菜单 背景色,以及不成功的原因

    Qt QTableWidget设置表头背景色不成功的原因 QTableWidget没有设置背景色的函数 xff0c 通过Qss样式来设置背景色 m pTable gt horizontalHeader gt setStyleSheet 34

随机推荐

  • Qt记住上次窗口的位置和状态

    include lt QCloseEvent gt include lt QShowEvent gt void MainWindow showEvent QShowEvent event restoreGeometry config gt
  • git-cola 使用方法

    目录 git cola 的用法实践记录 git cola 是 git的图形界面管理工具 因此 xff0c 在安装 git cola之前 xff0c 一般首先需要安装 git 官网地址 xff1a http git cola github i
  • Qt中的 DEPENDPATH 和 INCLUDEPATH 的区别

    在Qt中添加库文件的时候 xff0c Qt会自动在pro文件里生成三行配置 INCLUDEPATH 43 61 dir DEPENDPATH 43 61 dir LIBS 43 61 Ldir llibxxx includepath 和 l
  • STM32--MPU内存保护单元(一)

    先说明一下MPU xff0c MPU有很多含义 xff0c 我们常见的有 xff1a MPU xff1a Memory Protection Unit xff0c 内存保护单元 xff08 本文描述的内容 xff09 xff1b MPU x
  • Qt .pro 官方手册 Creating Project Files (*)

    Creating Project Files Qt 6 5 Creating Project Files qmake Manual Creating Project Files Qt 5 14 Qt 5 14 qmake Manual Cr
  • 感悟 编程思想:Rust,不同于面向过程思想与面向对象思想 (**)

    编程思想的演变 面向过程思想 xff1f 面向对象思想 xff1f Rust语言 xff0c 据说既有面向过程的特征 xff0c 又有面向对象的特点 xff1f 不要过分地拘泥于在一个项目中采用面向过程思想与面向对象思想 实际上 xff0c
  • 基础数据结构:单链表

    定义 单链表是一种线性数据结构 xff0c 用一组地址任意存储单元来存储数据 xff0c 存储单元分散在内存任意地址上 xff0c 存储单元之间用指针连接 单链表一般有两种 xff1a 带头结点的 xff0c 头结点不存放数据 xff0c
  • 开源飞控种类分享

    开源飞控发展 一 开源飞控发展 第一代开源飞控系统使用Arduino或其他类似开源电子平台为基础 xff0c 扩展连接各种MEMS传感器 xff0c 能够让无人机能平稳地飞起来 第二代开源飞控系统大多拥有自己的开源硬件 开发环境和社区 xf
  • 2020电赛绕障飞行无人机无遥控自动飞行解决方案(Ti)

    一 方案目标 针对部分大赛要求无人机在无遥控的情况下实现自主飞行 xff0c 本方案实现无遥控和接收机 情况下 xff0c 通过杜邦线或者按钮触发无人机进入相应模式 xff0c 执行模式对应的指令 由于 Ti 飞控有 8 个 PWM 接口
  • 数组名a+1和&a+1的区别

    C C 43 43 里面的数组名字会退化为指针 xff0c 所以数组名a实际指的是数组的第一个元素的地址 而数组名作为指针来讲有特殊性 xff0c 它正在它所指向的内存区域中 xff0c amp a的值和a的数值是相同的 xff08 可以输
  • float精度分析

    二进制浮点数是以 符号 43 数值表示法 储存 xff1a 将最高位指定为符号位 xff08 sign bit xff09 xff1b 指数部份 xff1a 即次高的e位 决定数值的数量级 小数部份 xff1a 即余下的f位 决定数值的浮动
  • Eigen库四元数表示顺序

    Eigen Quaterniond Q 1 2 3 4 表示顺序为 xff1a w 61 1 x 61 2 y 61 3 z 61 4 同理其余常用四元数数组顺序为q w x y z euler 61 R eulerAngles xff08
  • mavros中的一些坑

    固件 xff1a px4 控制 xff1a 通过对mavros发布mavros setpoint raw local话题控制无人机飞行 获取飞机的ENU坐标系坐标有两个话题 xff1a mavros global position loca
  • rosdep update 超时失败2021最新解决方法

    好记性不如烂笔头 xff0c 记录方法 xff0c 方便大家 一 关于 rosdep 安装ros的最后一步是rosdep init和rosdep update xff0c rosdep是解决ros包依赖问题的一个工具 rosdep init
  • STM32 FSMC/FMC原理保姆级讲解(一)

    FSMC通俗讲解 FSMC 框图FMC引脚说明FMC地址映射FSMC不同位宽操作FSMC寄存器FSMC时钟FSMC 四种模式FSMC参数设置FSMC 控制异步 NOR FLASH 的时序FSMC的功能FSMC的特点 STM32 FSMC F
  • Vue2.0生命周期和钩子函数的一些理解

    vue生命周期简介 生命周期详解 生命周期探究 对于执行顺序和什么时候执行 xff0c 看上面两个图基本有个了解了 下面我们将结合代码去看看钩子函数的执行 ps 下面代码可以直接复制出去执行 span class xml span clas
  • Python变量的下划线

    1 两边双下划线 xff1a 特殊变量 xff0c 类似 xxx xff0c 可以直接访问 xff0c 不是private变量 xff0c 不能用 name score 这样的变量名 2 左侧单下划线 xff1a 如 xff0c name
  • 前端面试之问到promise怎么办?

    前言 Promise作为面试中的经典考题 xff0c 我们一定要深刻学习和理解它 xff01 Promise有什么用呢 xff1f 答 xff1a 我们拿它解决异步回调问题 Pomise是ES6里面新增的一种异步编程的解决方案 现在这个pr
  • 经典编程书籍(C++, 网络, Windows, Linux)

    导读 xff1a 书单中列举的都是相关领域的经典书籍 xff0c 必读之作 此书单的编辑参考了很多网站 xff0c 包括一些名家的推荐 xff0c 例如侯捷 xff0c 孟岩 xff0c 荣耀 xff0c 潘爱民等等 xff0c 在此也向这
  • 51单片机的ds18b20驱动程序

    标题 18b20温度芯片驱动程序 文件 18b20 h 18b20 c 日期 2010 3 11