51单片机开发:温度传感器

温度传感器DS18B20:

初始化时序图如下图所示:

u8 ds18b20_init(void){ds18b20_reset();return ds18b20_check();
}void ds18b20_reset(void){DS18B20_PORT = 0;delay_10us(75);DS18B20_PORT = 1;delay_10us(2);
}u8 ds18b20_check(void){u8 time_temp=0;while(DS18B20_PORT && time_temp<20){  //检测低电平time_temp++;delay_10us(1);		}if(time_temp>=20)return 1; //没有响应else time_temp = 0;while(!DS18B20_PORT && time_temp<20){  //检测高电平time_temp++;delay_10us(1);}if(time_temp>=20)return 1; //没有响应return 0;
}

读时序:

u8 ds18b20_read_bit(void){u8 dat = 0;DS18B20_PORT = 0;_nop_(); _nop_();DS18B20_PORT=1;	_nop_();_nop_(); if(DS18B20_PORT)dat = 1;else dat = 0;delay_10us(5);return dat;
}u8 ds18b20_read_byte(){u8 i=0;u8 temp=0;u8 dat = 0;for(i=0;i<8;i++){temp = ds18b20_read_bit();dat >>=1;		//先读低位再读高位dat |= temp<<7;		}return dat;
}

写时序:

void ds18b20_write_byte(u8 dat){u8 i=0;u8 temp=0;for(i=0;i<8;i++){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_();//两个机器周期}}}

读取温度:

DS18B20 的典型温度读取过程为:复位→发 SKIP ROM 命令(0XCC)→发开始转
换命令(0X44)→延时→复位→发送 SKIP ROM 命令(0XCC)→发读存储器命令
(0XBE)→连续读出两个字节数据(即温度)→结束。
void ds18b20_start(){ds18b20_reset();ds18b20_check();ds18b20_write_byte(0xcc);ds18b20_write_byte(0x44);
}float ds18b20_read_temperture(void){u8 dath=0;u8 datl=0;u16 value;float temp = 0;ds18b20_start();ds18b20_reset();ds18b20_check();ds18b20_write_byte(0xcc);ds18b20_write_byte(0xbe);datl = 	ds18b20_read_byte();dath = ds18b20_read_byte();value = (dath<<8) + datl;if((value&0xf800) == 0xf800){value = ~value + 1;temp = value*(-0.0625);   }else{temp = value*0.0625;}return temp;
}

完整代码:

#include "ds18b20.h"
#include "intrins.h"
void ds18b20_reset(void){DS18B20_PORT = 0;delay_10us(75);DS18B20_PORT = 1;delay_10us(2);
}u8 ds18b20_check(void){u8 time_temp=0;while(DS18B20_PORT && time_temp<20){  //检测低电平time_temp++;delay_10us(1);		}if(time_temp>=20)return 1; //没有响应else time_temp = 0;while(!DS18B20_PORT && time_temp<20){  //检测高电平time_temp++;delay_10us(1);}if(time_temp>=20)return 1; //没有响应return 0;
}u8 ds18b20_read_bit(void){u8 dat = 0;DS18B20_PORT = 0;_nop_(); _nop_();DS18B20_PORT=1;	_nop_();_nop_(); if(DS18B20_PORT)dat = 1;else dat = 0;delay_10us(5);return dat;
}u8 ds18b20_read_byte(){u8 i=0;u8 temp=0;u8 dat = 0;for(i=0;i<8;i++){temp = ds18b20_read_bit();dat >>=1;		//先读低位再读高位dat |= temp<<7;		}return dat;
}void ds18b20_write_byte(u8 dat){u8 i=0;u8 temp=0;for(i=0;i<8;i++){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_();//两个机器周期}}}void ds18b20_start(){ds18b20_reset();ds18b20_check();ds18b20_write_byte(0xcc);ds18b20_write_byte(0x44);
}u8 ds18b20_init(void){ds18b20_reset();return ds18b20_check();
}float ds18b20_read_temperture(void){u8 dath=0;u8 datl=0;u16 value;float temp = 0;ds18b20_start();ds18b20_reset();ds18b20_check();ds18b20_write_byte(0xcc);ds18b20_write_byte(0xbe);datl = 	ds18b20_read_byte();dath = ds18b20_read_byte();value = (dath<<8) + datl;if((value&0xf800) == 0xf800){value = ~value + 1;temp = value*(-0.0625);   }else{temp = value*0.0625;}return temp;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2项目(一)

项目介绍 电商前台项目 技术架构&#xff1a;vuewebpackvuexvue-routeraxiosless.. 封装通用组件登录注册token购物车支付项目性能优化 一、项目初始化 使用vue create projrct_vue2在命令行窗口创建项目 1.1、脚手架目录介绍 ├── node_modules:放置项目的依赖 ├──…

labelme_json_to_dataset ValueError: path is on mount ‘D:‘,start on C

这是你的labelme运行时label照片的盘和保存目的地址的盘不同都值得报错 labelme_json_to_dataset ValueError: path is on mount D:,start on C 只需要放一个盘但可以不放一个目录

物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

物联网&#xff08;IoT&#xff09;‌是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术&#xff0c;实时采集并连接任何需要监控、连接、互动的物体或过程&#xff0c;实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…

无心剑七绝《深度求索》

七绝深度求索 深研妙理定乾坤 度世玄机启智门 求路千难兼万险 索萦华夏自为尊 2025年2月1日 平水韵十三元平韵 无心剑七绝《深度求索》以平水韵十三元平韵写成&#xff0c;意境深远&#xff0c;气势磅礴。诗中“深研妙理定乾坤”开篇点题&#xff0c;展现出对深奥道理的钻研与探…

Hot100之普通数组

53最大子数组和 题目 思路解析 我们用一个dp数组来收集我们从左往右&#xff0c;加起来的最大的和 也就是我们的节点不是负数&#xff0c;那我们直接收集就好了 如果是负数&#xff0c;我们就用Max&#xff08;&#xff09;比较是这个节点大还是当前节点大&#xff08;这个情…

如何利用天赋实现最大化的价值输出-补

原文&#xff1a; https://blog.csdn.net/ZhangRelay/article/details/145408621 ​​​​​​如何利用天赋实现最大化的价值输出-CSDN博客 如何利用天赋实现最大化的价值输出-CSDN博客 引用视频差异 第一段视频目标明确&#xff0c;建议也非常明确。 录制视频的人是主动性…

新能源算力战争:为什么AI大模型需要绿色数据中心?

新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…

Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)

目录 前言1. 基本知识2. Demo3. 实战代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&am…

unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等

目录 1 场景数量 SceneManager.sceneCount 2 直接代码生成新场景 SceneManager.CreateScene 3 场景的加载 3.1 用代码加载场景&#xff0c;仍然build setting里先加入配置 3.2 卸载场景 SceneManager.UnloadSceneAsync(); 3.3 同步加载场景 SceneManager.LoadScene 3.3.…

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…

hot100_21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[…

4 [危机13小时追踪一场GitHub投毒事件]

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…

Spring Boot项目中解决跨域问题(四种方式)

目录 一&#xff0c;跨域产生的原因二&#xff0c;什么情况下算跨域三&#xff0c;实际演示四&#xff0c;解决跨域的方法 1&#xff0c;CrossOrigin注解2&#xff0c;添加全局过滤器3&#xff0c;实现WebMvcConfigurer4&#xff0c;Nginx解决跨域5&#xff0c;注意 开发项目…

浅析DNS污染及防范

DNS污染&#xff08;DNS Cache Poisoning&#xff09;是一种网络攻击手段&#xff0c;通过篡改DNS服务器的缓存数据&#xff0c;将域名解析结果指向错误的IP地址&#xff0c;从而误导用户访问恶意网站或无法访问目标网站。这种攻击利用了DNS协议的特性&#xff0c;例如“只认第…

五. Redis 配置内容(详细配置说明)

五. Redis 配置内容(详细配置说明) 文章目录 五. Redis 配置内容(详细配置说明)1. Units 单位配置2. INCLUDES (包含)配置3. NETWORK (网络)配置3.1 bind(配置访问内容)3.2 protected-mode (保护模式)3.3 port(端口)配置3.4 timeout(客户端超时时间)配置3.5 tcp-keepalive()配置…

单细胞分析基础-第一节 数据质控、降维聚类

scRNA_pipeline\1.Seurat 生物技能树 可进官网查询 添加链接描述 分析流程 准备:R包安装 options("repos"="https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packages("BiocManager",update = F,ask =…

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1&#xff0c;录入用户信息1.4 例子2&#xff0c;正则验证手机号1.5 例子3&#xff0c;验证输入的密码1.6 例子4&#xff0c;显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1&#xff0c;获取输入框的内容2.4 例…

大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探

以下视频内容为叶梓分享DeepSeek多模态大模型janus的部署&#xff0c;并验证其实际效果&#xff0c;包括图生文和文生图两部分。 叶梓老师人工智能培训分享DeepSeek多模态大模型janus初探 DeepSeek 的多模态大模型 Janus 是一款强大的 AI 模型&#xff0c;专注于图像和文本的多…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

17.2 图形绘制7

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 17.2.9 字体 17.2.9.1 Font类 Font类定义特定的文本格式&#xff0c;包括字体、字号和样式特性。 Font常用属性&#xff1a; Na…