当前位置: 首页 > news >正文

stm32f103zet6 ds18b20

main.c

// main.c
#include "sys.h"
#include "ds18b20.h"int main(void){	uart_init(9600);delay_init();while(DS18B20_Init())	//DS18B20初始化	{printf("error");delay_ms(200);}while(1){printf("%4.2f\r\n",Get_Temp());}}

ds18b20.h

// ds18b20.h
#ifndef __DS18B20_H
#define __DS18B20_H 
#include "sys.h"   
//DS18B20引脚宏定义						
#define DS18B20_GPIO_PORT		GPIOB
#define DS18B20_GPIO_PIN		GPIO_Pin_12
#define DS18B20_GPIO_CLK   	RCC_APB2Periph_GPIOB
//输出状态定义
#define OUT 1
#define IN  0
//控制DS18B20引脚输出高低电平
#define DS18B20_Low  GPIO_ResetBits(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN)
#define DS18B20_High GPIO_SetBits(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN)		
u8 DS18B20_Init(void);//初始化DS18B20
short DS18B20_Get_Temp(void);//获取温度
void DS18B20_Start(void);//开始温度转换
void DS18B20_Write_Byte(u8 dat);//写入一个字节
u8 DS18B20_Read_Byte(void);//读出一个字节
u8 DS18B20_Read_Bit(void);//读出一个位
void DS18B20_Mode(u8 mode);//DS18B20引脚输出模式控制
u8 DS18B20_Check(void);//检测是否存在DS18B20
void DS18B20_Rst(void);//复位DS18B20   
float Get_Temp(void);
#endif

ds18b20.c

// ds18b20.c
#include "ds18b20.h"
#include "delay.h"			
void DS18B20_Rst(void)	   
{                 DS18B20_Mode(OUT); 	//SET OUTPUTDS18B20_Low; 				//拉低DQdelay_us(750);    	//拉低750usDS18B20_High; 			//DQ=1 delay_us(15);     	//15US
}
//等待DS18B20的回应
//返回1:未检测到DS18B20的存在
//返回0:存在
/*
复位脉冲执行完之后,总线已经被拉高了;
此时,从机需要给总线拉高;
因此,逻辑是:主机切换为输入模式判断总线是否仍为高点平,如果超过200us,表示从机没反应,初始化失败;如果200us内,总线被从机拉低了,则开始计时拉低的时间,<240us初始化成功,超时则失败
*/
u8 DS18B20_Check(void) 	   
{   u8 retry=0;DS18B20_Mode(IN);	//SET  INPUT	 while (GPIO_ReadInputDataBit(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN)&&retry<200){retry++;delay_us(1);};	 if(retry>=200)return 1;else retry=0;while (!GPIO_ReadInputDataBit(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN)&&retry<240){retry++;delay_us(1);};if(retry>=240)return 1;	    return 0;
}
//从DS18B20读取一个位
//返回值:1/0
u8 DS18B20_Read_Bit(void) 	 
{u8 data;DS18B20_Mode(OUT);	//SET OUTPUTDS18B20_Low; delay_us(2);DS18B20_High; DS18B20_Mode(IN);	//SET INPUTdelay_us(12);if(GPIO_ReadInputDataBit(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN))data=1;else data=0;	 delay_us(50);           return data;
}
//从DS18B20读取一个字节
//返回值:读到的数据
u8 DS18B20_Read_Byte(void)     
{        u8 i,j,dat;dat=0;for (i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}						    return dat;
}
//写一个字节到DS18B20
//dat:要写入的字节
void DS18B20_Write_Byte(u8 ByteData)     {             u8 j;u8 LastBit;DS18B20_Mode(OUT);	//SET OUTPUT;for (j = 1;j <= 8;j++){//取最后一位 LastBit = ByteData&0x01;ByteData = ByteData >> 1;if (LastBit) {DS18B20_Low;	// Write 1delay_us(2);                            DS18B20_High;delay_us(60);             }else{DS18B20_Low;	// Write 0delay_us(60);             DS18B20_High;delay_us(2);                          }}
}
//开始温度转换
void DS18B20_Start(void) {   						               DS18B20_Rst();	   DS18B20_Check();	 DS18B20_Write_Byte(0xcc);	// skip romDS18B20_Write_Byte(0x44);	// convert
} //初始化DS18B20的IO口 DQ 同时检测DS的存在
//返回1:不存在
//返回0:存在    	 
u8 DS18B20_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_APB2PeriphClockCmd(DS18B20_GPIO_CLK, ENABLE);	 //使能PORTA口时钟 GPIO_InitStructure.GPIO_Pin = DS18B20_GPIO_PIN;				//PORTA.6 推挽输出GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(DS18B20_GPIO_PORT, &GPIO_InitStructure);GPIO_SetBits(DS18B20_GPIO_PORT,DS18B20_GPIO_PIN);    //输出DS18B20_Rst();return DS18B20_Check();
}  
//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-550~1250) 
short DS18B20_Get_Temp(void)
{u8 temp;u8 TL,TH;short tem;DS18B20_Start ();  			// ds1820 start convertDS18B20_Rst();DS18B20_Check();	 DS18B20_Write_Byte(0xcc);	// skip romDS18B20_Write_Byte(0xbe);	// convert	    TL=DS18B20_Read_Byte(); 	// LSB   TH=DS18B20_Read_Byte(); 	// MSB  if(TH>7){TH=~TH;TL=~TL; temp=0;					//温度为负  }else temp=1;				//温度为正	  	  tem=TH; 					//获得高八位tem<<=8;    tem+=TL;					//获得底八位tem=(float)tem*0.625;		//转换     if(temp)return tem; 		//返回温度值else return -tem;    
}void DS18B20_Mode(u8 mode)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(DS18B20_GPIO_CLK, ENABLE);	 //使能PORTA口时钟if(mode){GPIO_InitStructure.GPIO_Pin = DS18B20_GPIO_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;}else{GPIO_InitStructure.GPIO_Pin =  DS18B20_GPIO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;}GPIO_Init(DS18B20_GPIO_PORT, &GPIO_InitStructure);
}
float Get_Temp(void){short temperature = 0;temperature = DS18B20_Get_Temp();	//读取温度float temp = (float)temperature/10;return  temp;
}

相关文章:

stm32f103zet6 ds18b20

main.c // main.c #include "sys.h" #include "ds18b20.h"int main(void){ uart_init(9600);delay_init();while(DS18B20_Init()) //DS18B20初始化 {printf("error");delay_ms(200);}while(1){printf("%4.2f\r\n",Get_Temp());}}ds18…...

【前端,TypeScript】TypeScript速成(六):函数

函数 函数的定义 定义一个最简单的加法函数&#xff1a; function add(a: number, b: number): number {return a b }&#xff08;可以看到 JavaScript/TypeScript 的语法与 Golang 也非常的相似&#xff09; 调用该函数&#xff1a; console.log(add(2, 3)) // out [LOG…...

React引入Echart水球图

在搭建React项目时候&#xff0c;遇到了Echart官方文档中没有的水球图&#xff0c;此时该如何配置并将它显示到项目中呢&#xff1f; 目录 一、拓展网站 二、安装 三、React中引入 1、在components文件夹下新建一个组件 2、在组件中引入 3、使用水波球组件 一、拓展网站 …...

谷歌浏览器的智能推荐功能使用指南

谷歌浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;以其强大的功能和简洁的界面深受用户喜爱。其中&#xff0c;智能推荐功能通过利用先进的算法和数据分析&#xff0c;为用户提供个性化的内容推荐&#xff0c;大大提升了上网体验。本文将详细介绍如何开启和使用谷歌浏览…...

GitHub 上排名前 11 的开源管理后台(Admin Dashboard)项目

如果你是一名开发者&#xff0c;经常处理数据或参与项目管理&#xff0c;那么这篇文章绝对值得收藏&#xff01;当你需要一个高效、易用的管理后台&#xff08;Admin Dashboard&#xff09;项目时&#xff0c;本文会给你灵感。 在现代企业管理和业务运营中&#xff0c;管理后台…...

【运维】部署MKDocs

部署MKDocs obsidian 记录笔记&#xff0c;通过 mkdocs 私有化部署。 1 使用MKDocs创建笔记 创建仓库&#xff0c;安装 Material for MkDocs 和 mkdocs-minify-plugin mkdir tmp cd tmp git initpip install mkdocs-material pip install mkdocs-minify-pluginmkdocs new .2 …...

C# 读取多种CAN报文文件转换成统一格式数据,工具类:CanMsgRead

因为经常有读取CAN报文trace文件的需求&#xff0c;而且因为CAN卡不同、记录软件不同会导致CAN报文trace文件的格式都有差异。为了方便自己后续开发&#xff0c;我写了一个CanMsgRead工具类&#xff0c;只要提供CAN报文路径和CAN报文格式的选项即可将文件迅速读取转换为统一的C…...

计算机网络 (8)物理层的传输方式

一、串行传输与并行传输 串行传输 定义&#xff1a;串行传输是一种数据传输方式&#xff0c;指的是逐位地按照顺序传输数据。在串行传输中&#xff0c;数据位逐个按照一定的顺序进行传输&#xff0c;可以通过单条线路或信道进行。特点&#xff1a; 逐位传输&#xff1a;串行传输…...

【C#】WPF设置Separator为垂直方向

1. 方法1 <Separator BorderBrush"Gray"><Separator.LayoutTransform><RotateTransform Angle"90" /></Separator.LayoutTransform> </Separator>2. 方法2 <Separator Style"{StaticResource {x:Static ToolBar.S…...

太速科技-519-基于ZU19EG的4路100G光纤的PCIe 加速计算卡

基于ZU19EG的4路100G光纤的PCIe 加速计算卡 一、板卡概述 本板卡系我司自主设计研发&#xff0c;基于Xilinx公司Zynq UltraScale MPSOC系列SOC XCZU19EG-FFVC1760架构&#xff0c;支持PCIE Gen3x16模式。其中&#xff0c;ARM端搭载一组64-bit DDR4&#xff0c;总容量达…...

安卓入门二 Kotlin基础

Kotlin Kotlin的历史 Kotlin由Jet Brains公司开发设计&#xff0c;2011年公布第一版&#xff0c;2012年开源。 2016年发布1.0正式版&#xff0c;并且Jet Brains在IDEA加入对Kotlin的支持&#xff0c;安卓自此又有新的选择。 2019年谷歌宣布Kotlin成为安卓第一开发语言&#x…...

C++ ——— 单/多参数构造函数的隐式类型转换和 explicit 关键字

单参数构造函数 代码演示&#xff1a; class A { public:A(int i):_a(i){}private:int _a; }; 在 A 这个类中的构造函数只有一个参数&#xff0c;这就称之为单参数的构造函数 不同形式实例化对象 代码演示&#xff1a; A a1(1);A a2 2; a1 的实例化过程&#xff1a; 第…...

Java编程规约:集合处理

文章目录 I 集合处理【强制】【推荐】II 知识扩展I 集合处理 【强制】 不要在 foreach 循环里进行元素的 remove / add 操作。remove 元素请使用 iterator 方式,如果并发操作,需要对 iterator 对象加锁。// 正例: List<String> list = new ArrayList<>(...

IOS safari 播放 mp4 遇到的坎儿

起因 事情的起因是调试 IOS 手机下播放服务器接口返回的 mp4 文件流失败。对于没调试过移动端和 Safari 的我来说着实费了些功夫&#xff0c;网上和AI也没有讲明白。好在最终大概理清楚了&#xff0c;在这里整理出来供有缘人参考。 问题 因为直接用 IOS 手机的浏览器打开页面…...

plsql :用户system通过sysdba连接数据库--报错ora-01031

一、winR cmd通过命令窗口登录sys用户 sql sys/[password]//localhost:1521/[service_name] as sysdba二、输入用户名:sys as sysdba 三、输入密码:自己设的 四、执行grant sysdba to system; 再去PL/SQL连接就可以了...

LabVIEW条件配置对话框

条件配置对话框&#xff08;Configure Condition Dialog Box&#xff09; 要求&#xff1a;Base Development System 当右键单击**条件禁用结构&#xff08;Conditional Disable Structure&#xff09;**并选择以下选项时&#xff0c;会显示此对话框&#xff1a; Add Subdiagr…...

PyAudio库基本知识详解——为自制PCM音频播放器做准备

前言 结合前段时间我们做的音频编解码器&#xff0c;这样我们就可以将获取到的ADPCM数据&#xff0c;转换成PCM数据&#xff0c;然后播放出来&#xff0c;得到一个完整的音频数据&#xff0c;因此&#xff0c;接下来几篇文章中&#xff0c;我们想做一个播放PCM格式的音频播放器…...

Git如何添加子仓库

背景 项目中经常使用别人维护的模块&#xff0c;在git中使用子模块的功能能够大大提高开发效率。 使用子模块后&#xff0c;不必负责子模块的维护&#xff0c;只需要在必要的时候同步更新子模块即可。 本文主要讲解子模块相关的基础命令&#xff0c;详细使用请参考main page…...

001__VMware软件和ubuntu系统安装(镜像)

[ 基本难度系数 ]:★☆☆☆☆ 一、Vmware软件和Ubuntu系统说明&#xff1a; a、Vmware软件的说明&#xff1a; 官网&#xff1a; 历史版本&#xff1a; 如何下载&#xff1f; b、Ubuntu系统的说明&#xff1a; 4、linux系统的其他版本&#xff1a;红旗(redhat)、dibian、cent…...

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项&#xff0c;系统需要java环境&#xff0c;确认系统有java环境&#xff0c;根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包&#xff0c;解压&#xff0c;将runt…...

GT511C3指纹模块嵌入式驱动开发与工程实践

1. GT511C3指纹识别模块底层驱动技术解析GT511C3是由Digital Persona公司推出的高性能光学指纹识别模块&#xff0c;广泛应用于门禁系统、考勤终端、金融支付设备及嵌入式身份认证场景。该模块基于ARM7TDMI内核主控&#xff0c;集成专用图像处理引擎与模板匹配协处理器&#xf…...

【Hot 100 刷题计划】 LeetCode 215. 数组中的第K个最大元素 | C++ 快速选择与堆排序题解

LeetCode 215. 数组中的第K个最大元素 | C 快速选择与小顶堆双解法 &#x1f4cc; 题目描述 题目级别&#xff1a;中等 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不…...

OpenClaw配置优化指南:提升Phi-3-vision-128k长文本处理效率

OpenClaw配置优化指南&#xff1a;提升Phi-3-vision-128k长文本处理效率 1. 问题背景与挑战 上周我尝试用OpenClaw处理一份300页的图文混合技术文档时&#xff0c;遇到了典型的"长文本困境"——系统频繁卡顿&#xff0c;内存占用飙升到16GB&#xff0c;最终因响应超…...

如何用 AI Agent Harness Engineering 重构企业生产流程:一套可复制的落地方法论

如何用AI Agent Harness Engineering重构企业生产流程&#xff1a;一套从0到亿可复制的落地方案书关键词&#xff1a;AI Agent、Harness Engineering、企业生产流程重构、智能协作体、低代码Agent编排、端到端流程自动化、ROI可验证落地摘要&#xff1a;当ChatGPT引爆通用人工智…...

如何在iPhone 6s上解决内核利用失败问题:TrollInstallerX完全指南

如何在iPhone 6s上解决内核利用失败问题&#xff1a;TrollInstallerX完全指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 你是否在使用TrollInstallerX越狱iPhone 6…...

5步解锁VMware的macOS支持:Unlocker工具全面解析与实践指南

5步解锁VMware的macOS支持&#xff1a;Unlocker工具全面解析与实践指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在虚拟化技术日益普及的今天&#xff0c;许多开发者和技术爱好者希望在非苹果硬件…...

终极指南:gallery本地AI模型平台的架构演进与技术发展历程

终极指南&#xff1a;gallery本地AI模型平台的架构演进与技术发展历程 【免费下载链接】gallery A gallery that showcases on-device ML/GenAI use cases and allows people to try and use models locally. 项目地址: https://gitcode.com/GitHub_Trending/gallery44/galle…...

如何快速解锁WeMod Pro功能:Wand-Enhancer完整免费指南

如何快速解锁WeMod Pro功能&#xff1a;Wand-Enhancer完整免费指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款强大的开源工具&…...

KernelSU模块开发技术突破与实战指南

KernelSU模块开发技术突破与实战指南 【免费下载链接】KernelSU A Kernel based root solution for Android 项目地址: https://gitcode.com/GitHub_Trending/ke/KernelSU 在Android root解决方案领域&#xff0c;KernelSU凭借其内核级实现带来的稳定性和安全性&#xf…...

Palworld存档工具完全指南:高效管理与转换游戏数据

Palworld存档工具完全指南&#xff1a;高效管理与转换游戏数据 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools Palworld存档工具是一款专为Palwor…...