DS18B20温度传感器

51(stc8h8k64u)

简介

ds18B20是使用单总线的元器件

代码

/*---------------------------------------------------------------------	*/
/* ------------------------ For STC8H MCU -----------------------------	*/
/* --- Web:			www.STCAI.com -----------------------------------------	*/
/* --- BBS:			www.STCAIMCU.com  -------------------------------------	*/
/* --- Email:		liulixun@zcst.edu.cn ----------------------------------	*/
/*		如果要在程序中使用此代码,请在程序中注明使用了LiuLixun的资料及程序		*/
/*---------------------------------------------------------------------	*/
#include	"DS18B20.h"
//========================================================================
// 描述: DS18B20初始化.
// 参数: none.
// 返回: none.
//========================================================================
void ds18b20_init()
{DS18B20_DQ_MODE;//双向IO口
}//========================================================================
// 描述: DS18B20特定延时函数.
// 参数: none.
// 返回: none.
//========================================================================
#if 1
void ds18b20_delay_us(uint8 us)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}while(--us);
}
#endif
//========================================================================
// 描述: DS18B20总线复位.
// 参数: none.
// 返回: none.
//========================================================================
#if 1
uint8 ds18b20_reset()
{uint8 ds18b20_retry;ds18b20_retry = 0;while (1){ds18b20_retry++;if(ds18b20_retry >= 10)return 1;DS18B20_DQ = 1; DS18B20_DQ = 0;                     //送出低电平复位信号ds18b20_delay_us(240);      //延时至少480usds18b20_delay_us(240);DS18B20_DQ = 1;                     //释放数据线ds18b20_delay_us(60);       //等待60usif(!DS18B20_DQ)                    //检测存在脉冲{ds18b20_delay_us(240);      //等待设备释放数据线ds18b20_delay_us(180);return 0;}ds18b20_delay_us(240);      //等待设备释放数据线ds18b20_delay_us(180);}
}
#endif
//========================================================================
// 描述: 从DS18B20读1字节数据.
// 参数: none.
// 返回: 1字节数据.
//========================================================================
#if 1
uint8 ds18b20_read_byte()
{uint8 i;uint8 dat = 0;for (i=0; i<8; i++)             //8位计数器{dat >>= 1;DS18B20_DQ = 0;                     //开始时间片ds18b20_delay_us(1);                //延时等待DS18B20_DQ = 1;                     //准备接收ds18b20_delay_us(1);                //接收延时if (DS18B20_DQ) dat |= 0x80;        //读取数据ds18b20_delay_us(60);               //等待时间片结束}return dat;
}
#endif
//========================================================================
// 描述: 向DS18B20写1字节数据.
// 参数: 1字节数据.
// 返回: none.
//========================================================================
#if 1
void ds18b20_write_byte(uint8 dat)
{char i;for (i=0; i<8; i++)             //8位计数器{DS18B20_DQ = 0;                     //开始时间片ds18b20_delay_us(1);                //延时等待dat >>= 1;                  //送出数据DS18B20_DQ = CY;ds18b20_delay_us(60);               //等待时间片结束DS18B20_DQ = 1;                     //恢复数据线ds18b20_delay_us(1);                //恢复延时}
}
#endif
//========================================================================
// 描述: 读取温度.
// 参数: none.
// 返回: 温度值.
//========================================================================
#if 1
float ds18b20_read_temperature()
{uint16 TempH, TempL, Temperature;uint16 ds18b20_retry;ds18b20_retry = 0;if(ds18b20_reset())      //设备复位{return 255; //返回错误代码}   ds18b20_write_byte(0xCC);        //跳过ROM命令ds18b20_write_byte(0x44);        //开始转换命令Delay(750);/*下面注释的代码就要全部删除*///    while (!DS18B20_DQ && ds18b20_retry++ < 400)                    //等待转换完成
//    {
//		Delay(1);
//    }
//    if(ds18b20_retry >= 400)
//    {
//        return 255;  //返回错误代码
//    }if(ds18b20_reset())      //设备复位{return 255; //返回错误代码}  ds18b20_write_byte(0xCC);        //跳过ROM命令ds18b20_write_byte(0xBE);        //读暂存存储器命令TempL = ds18b20_read_byte();     //读温度低字节TempH = ds18b20_read_byte();     //读温度高字节if(TempH & 0xf8)    //如果为负数{// MinusFlag = 1;  //设置负数标志Temperature = (TempH<<8) | TempL;Temperature = ~Temperature+1;return (float)Temperature*-0.625/10.0;}else{//MinusFlag = 0;  //清除负数标志Temperature = (TempH<<8) | TempL; return (float)Temperature*0.625/10.0;	//0.0625 * 10,保留1位小数点}
}
#endif
/*---------------------------------------------------------------------	*/
/* ------------------------ For STC8H MCU -----------------------------	*/
/* --- Web:			www.STCAI.com -----------------------------------------	*/
/* --- BBS:			www.STCAIMCU.com  -------------------------------------	*/
/* --- Email:		liulixun@zcst.edu.cn ----------------------------------	*/
/*		如果要在程序中使用此代码,请在程序中注明使用了LiuLixun的资料及程序		*/
/*---------------------------------------------------------------------	*/#ifndef __DS18B20_H
#define __DS18B20_H#include "STC8H.h"
#include "Type_def.h"
#include "Delay.h"
//#include 	<intrins.h>#ifndef DS18B20_DQ
#define DS18B20_DQ P24 //DS18B20的数据口
#endif#ifndef DS18B20_DQ_MODE
#define DS18B20_DQ_MODE {P2M1 &= ~0x10;P2M0 |= 0x10;} // P2.4推挽输出模式
#endifvoid ds18b20_init();                //DS18B20初始化
float ds18b20_read_temperature();   //读取温度#endif

注意点

1:传感器的数据输出口需要注意更改

2:DQ口需要设置为推挽输出模式

3:还有一点就是关于转换温度后的延时,确保温度能够正确的转换;

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

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

相关文章

Spring事务管理策略对比与性能优化实践指南

Spring事务管理策略对比与性能优化实践指南 问题背景介绍 在现代企业级应用中&#xff0c;事务管理是保障数据一致性与安全性的核心机制。Spring作为主流的Java企业级开发框架&#xff0c;提供了多种事务管理方案&#xff0c;包括编程式事务、声明式事务以及与第三方分布式事务…

C++“类吸血鬼幸存者”游戏制作的要点学习

古之学者必有师&#xff0c;对于技术的提升&#xff0c;只靠自己的摸索虽然能得到深刻的经验&#xff0c;但往往没有较高的效率。笔者这些天学习了BV1eM4m1S74K“提瓦特幸存者”的C开发&#xff0c;也是实现了该类型游戏的开发。今天&#xff0c;就通过经验总结&#xff0c;亲手…

Python OpenCV图像处理与深度学习:Python OpenCV图像分割入门

图像分割&#xff1a;从基础到实践 学习目标 通过本课程&#xff0c;学员们将了解图像分割的基本概念&#xff0c;掌握使用OpenCV实现图像分割的方法&#xff0c;包括基于阈值的分割和基于区域的分割技术。同时&#xff0c;学员将能够独立完成简单的图像分割任务&#xff0c;并…

MQ使用场景分析

异步解耦‌系统间通过消息队列通信&#xff0c;降低耦合度&#xff08;如订单系统与库存系统&#xff09;典型场景&#xff1a;电商下单后异步通知物流系统‌流量削峰‌应对突发流量&#xff0c;将请求暂存到消息队列逐步处理典型场景&#xff1a;秒杀活动时缓冲高并发请求‌数…

人工智能学习:NLP文本处理的基本方法

一、分词 1、分词介绍 概念 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符。分词过程就是找到这样分界符的过程…

Vue3 中 Proxy 在组件封装中的妙用

目录 Vue3 中 Proxy 在组件封装中的妙用&#xff1a;让组件交互更优雅 组件封装中的常见痛点 Proxy 是什么&#xff1f; Proxy 在组件封装中的应用 基础组件结构 使用 Proxy 实现方法透传 代码解析 父组件中的使用方式 Proxy 的其他应用场景 1. 权限控制 2. 方法调用…

DevExpress WinForms中文教程:Data Grid - 过滤编辑器

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

华为云CCE

华为云CCE&#xff1a;重构云原生应用的全栈引擎 一、云原生时代的"操作系统" 在数字经济浪潮中&#xff0c;容器化和微服务架构已成为企业数字化转型的标配。华为云容器引擎&#xff08;CCE&#xff09;作为云原生领域的"操作系统"&#xff0c;通过深度…

STM32——Uinx时间戳+BKP+RTC实时时钟

目录 一、Uinx时间戳 1.1Uinx简介 1.2UTC/GMT 1.3时间戳转换 1.3.1主要数据类型 1.3.2主要函数 1.3.3C语言时间戳转换示例 1.3.4时间格式化说明符 1.3.5注意事项 二、BKP 2.1BKP简介 2.2BKP基本结构 三、RTC 3.1RTC简介 3.2RTC框图 3.3RTC基本结构 3.4RTC硬件…

Java设计模式是什么?核心设计原则有哪些?

文章目录什么是设计模式&#xff1f;为什么使用设计模式&#xff1f;设计模式的核心设计原则是什么&#xff1f;1. 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;2. 里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;3. 依赖倒置原则&am…

网络层和数据链路层

目录 1.网络层 2.数据链路层 1.网络层 我们知道&#xff0c;我们的消息为了从A端发送到B端&#xff0c;达成远距离传输&#xff0c;我们为此设计了很多协议层&#xff0c;分别是应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;网卡&#xff0c…

Redis 的字典:像智能文件柜一样高效的哈希表实现

目录 一、从传统查找的痛点到哈希表的优势​ 二、哈希表的核心结构&#xff1a;文件柜的构成​ 2.1、 dictht 结构体&#xff1a;文件柜本体​ 2.2、dictEntry 结构体&#xff1a;带链条的文件夹​ 2.2.1、 哈希冲突的解决&#xff1a;抽屉里的链条​ 2.3、字典的高层封装…

FAST API部署和使用

第一部分&#xff1a;FastAPI 的使用&#xff08;开发环境&#xff09; 1. 安装 首先&#xff0c;你需要安装 FastAPI 和一个 ASGI 服务器&#xff0c;最常用的是 Uvicorn。 pip install "fastapi[standard]"这个命令会安装 FastAPI 以及所有推荐的依赖&#xff0c;包…

【JavaWeb】之HTML(对HTML细节的一些总结)

大家天天开心&#xff01; 文章目录 前言一、HTML的简介二、HTML运行方式三、html 的标签/元素-说明四、表单注意事项总结 前言 首先我们在把Java基础学习完之后&#xff0c;我们就要进行网站方面的开发了&#xff0c;我们要了解网页的组成&#xff0c;而网页的组成有HTML,CSS,…

互联网医院品牌IP的用户体验和生态构建

一、患者体验与信任构建互联网医院品牌IP的价值核心在于获得患者的深度信任&#xff0c;而卓越的用户体验是实现这一目标的关键路径。在医疗服务同质化严重的当下&#xff0c;患者体验已成为医疗机构差异化竞争的重要维度。研究表明&#xff0c;良好的用户体验能够提高用户满意…

【Node.js教程】Express框架入门:从搭建到动态渲染商品列表

前言 Visual Studio Code(简称VSCode)是微软开发的一款免费开源跨平台代码编辑器,凭借其免费、开源、跨平台的特性,以及丰富的插件生态和美观的界面,成为前端开发者的首选工具。 本文将带你从零开始学习Express框架,包括搭建项目、配置路由、使用中间件以及实现动态渲染…

众擎机器人开源代码解读

一&#xff0c;综述 EngineAI ROS 包&#xff1a; 高层开发模式&#xff1a;用户可通过发布身体速度指令&#xff0c;直接调用 EngineAI 机器人的行走控制器。底层开发模式&#xff1a;用户可通过发布关节指令&#xff0c;自主开发专属的控制器。 ROS2 package&#xff1a;全…

Windows系统安装Git详细教程

文章目录步骤 1&#xff1a;下载 Git 安装包步骤 2&#xff1a;运行安装程序步骤 3&#xff1a;选择安装路径步骤 4&#xff1a;选择组件步骤 5&#xff1a;选择默认编辑器步骤 6&#xff1a;选择路径环境变量步骤 7&#xff1a;选择 HTTPS 协议的传输方式步骤 8&#xff1a;配…

leetcode 3446. 按对角线进行矩阵排序 中等

给你一个大小为 n x n 的整数方阵 grid。返回一个经过如下调整的矩阵&#xff1a;左下角三角形&#xff08;包括中间对角线&#xff09;的对角线按 非递增顺序 排序。右上角三角形 的对角线按 非递减顺序 排序。示例 1&#xff1a;输入&#xff1a; grid [[1,7,3],[9,8,2],[4,…

携程旅行 web 验证码 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 部分python代码 result cp…