简述网站建设的步骤/网络营销软文

简述网站建设的步骤,网络营销软文,网站建设制作,沈阳网站建设找思路00. 目录 文章目录 00. 目录01. DS18B20简介02. DS18B20引脚及电路03. DS18B20内部结构框图04. DS18B20内存映射05. 硬件设计06. 软件设计07. 实验现象08. 附录 01. DS18B20简介 DS18B20 是常用的数字温度传感器,其输出的是数字信号,具有体积小&#xf…

00. 目录

文章目录

    • 00. 目录
    • 01. DS18B20简介
    • 02. DS18B20引脚及电路
    • 03. DS18B20内部结构框图
    • 04. DS18B20内存映射
    • 05. 硬件设计
    • 06. 软件设计
    • 07. 实验现象
    • 08. 附录

01. DS18B20简介

DS18B20 是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高,多点组网的特点。

DS18B20 数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样。

主要根据应用场合的不同而改变其外观。封装后的 DS18B20 可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测

温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温

和控制领域。温度范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;电压范围:3.0~5.5V;DS18B20 支持多点组网功能,多个

DS18B20 可以并联在唯一的三线上,实现组网多点测温。

DS18B20 不同封装外观实物如下图所示:
在这里插入图片描述

02. DS18B20引脚及电路

在这里插入图片描述

03. DS18B20内部结构框图

在这里插入图片描述

parasite power circuit:是寄生电路部分,也就是说DS18B20可以不用通过VDD来进行供电,通过DQ口接电源也可以进行供电。DQ为高电平时,会对电容CPP进行充电,DQ为低电平时,电容会进行供电。
64-BIT ROM:作为器件地址,用于总线通信的寻址
MEMORY CONTROL LOGIC: 存储控制逻辑,用于控制数据的传输
SCRATCHPAD(暂存器):用于总线的数据交互(RAM)
TEMPERATURE SENSOR:模拟温度传感器
ALARM HIGH TRIGGER REGISTER:报警高位触发寄存器,存储温度上限阈值
ALARM LOW TRIGGER REGISTER: 报警低位触发寄存器,存储温度下限阈值
CONFIGURATION REGISTER:配置寄存器,用于设置分辨率(精度)
EEPROM: 用于保存温度触发阈值和配置参数
8-BIT CRC GENERATOR: 8位CRC生成器(CRC,循环冗余码,一种校验码)

04. DS18B20内存映射

在这里插入图片描述

05. 硬件设计

在这里插入图片描述

由图可知,P1 端子的 DS18B20 脚为 DS18B20 温度传感器控制口,可将该引脚与芯片的 GPIO 连接。

06. 软件设计

bsp_ds18b20.h

#ifndef BSP_DS18B20_H
#define BSP_DS18B20_H#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"//管脚定义
#define DS18B20_PIN         HI_IO_NAME_GPIO_7
#define DS18B20_GPIO_FUN    HI_IO_FUNC_GPIO_7_GPIO#define DS18B20_DQ_OUT(a)   hi_gpio_set_ouput_val(DS18B20_PIN,a)//函数声明
void ds18b20_io_out(void);
void ds18b20_io_in(void);
void ds18b20_reset(void);
uint8_t ds18b20_check(void);
uint8_t ds18b20_read_bit(void);
uint8_t ds18b20_read_byte(void);
void ds18b20_write_byte(uint8_t dat);
void ds18b20_start(void);
uint8_t ds18b20_init(void);
float ds18b20_gettemperture(void);#endif

bsp_ds18b20.c

#include "bsp_ds18b20.h"
#include <unistd.h>
#include "hi_time.h"//DS18B20输出配置
void ds18b20_io_out(void)
{hi_gpio_init();                                            // GPIO初始化hi_io_set_pull(DS18B20_PIN, HI_IO_PULL_UP);                // 设置GPIO上拉hi_io_set_func(DS18B20_PIN, DS18B20_GPIO_FUN);             // 设置IO为GPIO功能hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_OUT);             // 设置GPIO为输出模式
}//DS18B20输入配置
void ds18b20_io_in(void)
{hi_io_set_pull(DS18B20_PIN, HI_IO_PULL_NONE);                // 设置GPIO浮空hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_IN);             // 设置GPIO为输入模式
}/******************************************************* 函数名   :GPIO_GetInputValue* 功能     :获取GPIO输入状态* 输入     :id, *val* 输出     :0/1*******************************************************/
hi_gpio_value DS18B20_DQ_IN = {0};
uint8_t GPIO_GetInputValue(hi_gpio_idx id,hi_gpio_value *val)
{hi_gpio_get_input_val(id,val);return *val;
}//ds18b20复位
void ds18b20_reset(void)	   
{                 hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_OUT);             // 设置GPIO为输出模式DS18B20_DQ_OUT(0); //拉低DQhi_udelay(750);    //拉低750usDS18B20_DQ_OUT(1); //DQ=1 hi_udelay(15);     //15US
}/*******************************************************************************
* 函 数 名         : ds18b20_check
* 函数功能		   : 检测DS18B20是否存在
* 输    入         : 无
* 输    出         : 1:未检测到DS18B20的存在,0:存在
*******************************************************************************/
uint8_t ds18b20_check(void) 	   
{   uint8_t retry=0;ds18b20_io_in(); while (GPIO_GetInputValue(DS18B20_PIN,&DS18B20_DQ_IN)&&retry<200){retry++;hi_udelay(1);};if(retry>=200)return 1;else retry=0;while ((!GPIO_GetInputValue(DS18B20_PIN,&DS18B20_DQ_IN))&&retry<240){retry++;hi_udelay(1);};if(retry>=240)return 1;	    return 0;
}/*******************************************************************************
* 函 数 名         : ds18b20_read_bit
* 函数功能		   : 从DS18B20读取一个位
* 输    入         : 无
* 输    出         : 1/0
*******************************************************************************/
uint8_t ds18b20_read_bit(void) 			 // read one bit
{uint8_t data;hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_OUT);DS18B20_DQ_OUT(0); hi_udelay(2);DS18B20_DQ_OUT(1); ds18b20_io_in();hi_udelay(12);if(GPIO_GetInputValue(DS18B20_PIN,&DS18B20_DQ_IN))data=1;else data=0;	 hi_udelay(50);           return data;
}/*******************************************************************************
* 函 数 名         : ds18b20_read_byte
* 函数功能		   : 从DS18B20读取一个字节
* 输    入         : 无
* 输    出         : 一个字节数据
*******************************************************************************/
uint8_t ds18b20_read_byte(void)    // read one byte
{        uint8_t i,j,dat;dat=0;for (i=0;i<8;i++) {j=ds18b20_read_bit();dat=(j<<7)|(dat>>1);}						    return dat;
}/*******************************************************************************
* 函 数 名         : ds18b20_write_byte
* 函数功能		   : 写一个字节到DS18B20
* 输    入         : dat:要写入的字节
* 输    出         : 无
*******************************************************************************/
void ds18b20_write_byte(uint8_t dat)     
{             uint8_t j;uint8_t testb;hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_OUT);for (j=1;j<=8;j++) {testb=dat&0x01;dat=dat>>1;if (testb) {DS18B20_DQ_OUT(0);// Write 1hi_udelay(2);                            DS18B20_DQ_OUT(1);hi_udelay(60);             }else {DS18B20_DQ_OUT(0);// Write 0hi_udelay(60);             DS18B20_DQ_OUT(1);hi_udelay(2);                          }}
}/*******************************************************************************
* 函 数 名         : ds18b20_start
* 函数功能		   : 开始温度转换
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void ds18b20_start(void)// ds1820 start convert
{   						               ds18b20_reset();	   ds18b20_check();	 ds18b20_write_byte(0xcc);// skip romds18b20_write_byte(0x44);// convert
} //DS18B20初始化
uint8_t ds18b20_init(void)
{hi_gpio_init();                                            // GPIO初始化hi_io_set_pull(DS18B20_PIN, HI_IO_PULL_UP);                // 设置GPIO上拉hi_io_set_func(DS18B20_PIN, DS18B20_GPIO_FUN);             // 设置IO为GPIO功能hi_gpio_set_dir(DS18B20_PIN, HI_GPIO_DIR_OUT);             // 设置GPIO为输出模式ds18b20_reset();return ds18b20_check();
}/*******************************************************************************
* 函 数 名         : ds18b20_gettemperture
* 函数功能		   : 从ds18b20得到温度值
* 输    入         : 无
* 输    出         : 温度数据
*******************************************************************************/ 
float ds18b20_gettemperture(void)
{uint16_t temp;uint8_t a,b;float value;ds18b20_start();                    // ds1820 start convertds18b20_reset();ds18b20_check();	 ds18b20_write_byte(0xcc);// skip romds18b20_write_byte(0xbe);// convert	    a=ds18b20_read_byte(); // LSB   b=ds18b20_read_byte(); // MSB   temp=b;temp=(temp<<8)+a;if((temp&0xf800)==0xf800){temp=(~temp)+1;value=temp*(-0.0625);}else{value=temp*0.0625;	}return value;    
}

template.c

#include <stdio.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"#include "bsp_led.h"
#include "bsp_ds18b20.h"//LED任务
osThreadId_t LED_Task_ID; //led任务IDvoid LED_Task(void)
{led_init();//LED初始化while (1) {LED(1); usleep(200*1000); //200msLED(0);usleep(200*1000); //200ms}
}
//LED任务创建
void led_task_create(void)
{osThreadAttr_t taskOptions;taskOptions.name = "LEDTask";            // 任务的名字taskOptions.attr_bits = 0;               // 属性位taskOptions.cb_mem = NULL;               // 堆空间地址taskOptions.cb_size = 0;                 // 堆空间大小taskOptions.stack_mem = NULL;            // 栈空间地址taskOptions.stack_size = 1024;           // 栈空间大小 单位:字节taskOptions.priority = osPriorityNormal; // 任务的优先级LED_Task_ID = osThreadNew((osThreadFunc_t)LED_Task, NULL, &taskOptions); // 创建任务1if (LED_Task_ID != NULL){printf("ID = %d, Create LED_Task_ID is OK!\n", LED_Task_ID);}
}//控制任务
osThreadId_t DS18B20_Task_ID; //任务IDvoid DS18B20_Task(void)
{static uint8_t i=0;float temper;while(ds18b20_init()){printf("DS18B20检测失败,请插好!\r\n");usleep(500*1000); //500ms}printf("DS18B20检测成功!\r\n");while (1) {i++;if(i%50==0){temper=ds18b20_gettemperture();if(temper<0){printf("检测的温度为:-");}else{printf("检测的温度为: ");}printf("%.1f°C\r\n",temper);}usleep(10*1000); //10ms}
}
//任务创建
void ds18b20_task_create(void)
{osThreadAttr_t taskOptions;taskOptions.name = "ds18b20Task";       // 任务的名字taskOptions.attr_bits = 0;               // 属性位taskOptions.cb_mem = NULL;               // 堆空间地址taskOptions.cb_size = 0;                 // 堆空间大小taskOptions.stack_mem = NULL;            // 栈空间地址taskOptions.stack_size = 1024;           // 栈空间大小 单位:字节taskOptions.priority = osPriorityNormal1; // 任务的优先级DS18B20_Task_ID = osThreadNew((osThreadFunc_t)DS18B20_Task, NULL, &taskOptions); // 创建任务if (DS18B20_Task_ID != NULL){printf("ID = %d, Task Create OK!\n", DS18B20_Task_ID);}
}/*** @description: 初始化并创建任务* @param {*}* @return {*}*/
static void template_demo(void)
{printf("-Hi3861开发板--DS18B20温度传感器实验\r\n");led_task_create();ds18b20_task_create();//任务创建
}
SYS_RUN(template_demo);

07. 实验现象

下载程序前,按照如下接线
在这里插入图片描述

注意:DS18B20 温度传感器不要插反,否则电源短路,容易烧坏开发板。方

向参考下图:
在这里插入图片描述

实验现象:读取 DS18B20 温度数据,并在串口助手上显示。

08. 附录

参考:【51单片机系列】DS18B20温度传感器模块

参考:【51单片机】DS18B20

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

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

相关文章

跨境大文件传输如何突破延迟与丢包双重困局

一、行业痛点&#xff1a;跨国传输的挑战 在全球化业务场景中&#xff0c;跨境大文件传输常面临网络延迟高、丢包率频发等问题。传统TCP协议因其“先建联再传输”的机制&#xff0c;在高时延、高丢包环境下效率骤降&#xff0c;导致跨国协作、影视渲染、科研数据共享等场景中传…

Dify 升级攻略:从0.15.3迈向1.1.0,元数据管理全攻略!

嘿&#xff0c;小伙伴们&#xff01;今天给大家带来一个超实用的干货分享——Dify从0.15.3升级到1.1.0版本的详细攻略。这次升级不仅带来了功能上的更新&#xff0c;还特别强化了元数据管理。相信很多小伙伴和我一样&#xff0c;一直在使用Dify来提升工作效率&#xff0c;但每次…

numpy学习笔记14:模拟随机游走过程

numpy学习笔记14&#xff1a;模拟随机游走过程 随机游走是一种数学统计模型&#xff0c;其中的每一步方向和大小都是随机的。下面使用 NumPy 模拟一维和二维的随机游走过程&#xff1a; 1.代码示例 import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.s…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…

dijkstra算法——47. 参加科学大会

卡码网:47. 参加科学大会https://kamacoder.com/problempage.php?pid=1047 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。 小明的起点是第一个车站,终点是最后一个车站。然而,途中的各个车站之间的道路状况、交通拥堵程度以…

基于ssm学科竞赛小程序的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临&#xff0c;过去的学科竞赛管理方式的缺点逐渐暴露&#xff0c;本次对过去的学科竞赛管理方式的缺点进行分析&#xff0c;采取计算机方式构建学科竞赛小程序。本文通过阅读相关文献&#xff0c;研究国内外相关技术&#xff0c;提出了一种关于竞赛信息…

【redis】什么是持久化之 RDB

什么是持久化 MySQL 的事务&#xff0c;有四个比较核心的特性&#xff1a; 原子性一致性持久性>持久化&#xff08;说的一回事&#xff09; 把数据存储在硬盘上>持久把数据存在内存上>不持久重启进程/重启主机之后&#xff0c;数据是否还存在 隔离性 Redis 是一个内存…

Python 鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

Channel-wise Knowledge Distillation for Dense Prediction论文阅读和

paper&#xff1a;https://arxiv.org/pdf/2011.13256.pdf code&#xff1a;https://github.com/open-mmlab/mmrazor 这篇paper主要是商汤开源的mmrazor中提及在detection有效果&#xff0c;我之前记录的几篇sota文章虽然在各自的paper中在detection领域都有提及有增益&#…

【MySQL】基本操作 —— DML 与约束

目录 DML 基本介绍DML 常见操作添加数据 insert给指定字段添加数据给全部字段添加数据给指定字段批量添加数据给全部字段批量添加数据 修改数据 update删除数据 delete 约束基本概念约束操作主键约束添加单列主键添加多列主键&#xff08;联合主键&#xff09;修改表结构添加主…

HarmonyOS三层架构实战

目录&#xff1a; 1、三层架构项目结构1.0、三层架构简介1.1、 common层&#xff08;主要放一些公共的资源等&#xff09;1.2、 features层&#xff08;主要模块定义的组件以及图片等静态资源&#xff09;1.3、 products层&#xff08;主要放主页面层和一些主要的资源&#xff…

ETL中的实用功能以及数据集成方式

在企业数字化转型的进程中&#xff0c;数据集成扮演着至关重要的角色。它不仅是实现信息流动和系统协同的关键步骤&#xff0c;更是提升企业运营效率和决策能力的核心驱动力。ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作为数据集成的重要工具&…

基于Springboot+Typst的PDF生成方案,适用于报告打印/标签打印/二维码打印等

基于SpringbootTypst的PDF生成方案&#xff0c;适用于报告打印/标签打印/二维码打印等。 仅提供后端实现 Typst2pdf-for-report/label/QR code github 环境 JDK11linux/windows/mac 应用场景 适用于定制化的报告模板/标签/条码/二维码等信息的pdf生成方案。通过浏览器的p…

简述下npm,cnpm,yarn和pnpm的区别,以及跟在后面的-g,--save, --save-dev代表着什么

文章目录 前言一、npm&#xff0c;cnpm&#xff0c;yarn和pnpm的基本介绍和特点1.npm (Node Package Manager)2. Yarn3. cnpm (China npm)4. pnpm 二、简述npm和pnpm 的存储方式和依赖数1.存储方式2.依赖树 三、两者依赖树的差异导致结果的对比四、简单说说-g&#xff0c;--sav…

VSCode C/C++ 开发环境完整配置及常见问题(自用)

这里主要记录了一些与配置相关的内容。由于网上教程众多&#xff0c;部分解决方法并不能完全契合我遇到的问题&#xff0c;因此我选择以自己偏好的方式&#xff0c;对 VSCode 进行完整的配置&#xff0c;并记录在使用过程中遇到的问题及解决方案。后续内容也会持续更新和完善。…

如何搭建一个安全经济适用的TRS交易平台?

TRS&#xff08;总收益互换&#xff09;一种多方参与的投资方式&#xff0c;也是绝对收益互换&#xff08;total return swap&#xff09;的一种形式。 它是一种衍生合约&#xff0c;是一种金融衍生品的合约&#xff0c;是指交易双方在协议期间将参照资产的总收益转移给信用保…

SpringMVC(四)Restful软件架构风格

目录 ​编辑 API接口设计的架构风格 一 Dao层实现&#xff08;处理数据库&#xff09; 二 Sercice层实现&#xff08;处理业务逻辑&#xff09; 三 Controller层&#xff08;处理http请求&#xff09; 四 补充知识点 1 PathVariable - 路径变量 2 CrossOrigin(Origins …

Docker搭建MySQL主从服务器

一、在主机上创建MySQL配置文件——my.cnf master服务器配置文件路径&#xff1a;/data/docker/containers/mysql-cluster-master/conf.d/my.cnf slave服务器配置文件路径&#xff1a; /data/docker/containers/mysql-cluster-master/conf.d/my.cnf master服务配置文件内容 …

鸿蒙路由 HMrouter 配置及使用一

1、学习链接 HMRouter地址 https://gitee.com/hadss/hmrouter/blob/dev/HMRouterLibrary/README.md 2、工程配置 下载安装 ohpm install hadss/hmrouter 添加编译插件配置 在工程目录下的build-profile.json5中&#xff0c;配置useNormalizedOHMUrl属性为true (我这项目创…

Linux中安装Git

安装Git 安装git&#xff0c;我们可以使用yum指令在线安装&#xff0c;这里&#xff0c;我们先对yum做一个简单介绍。 执行下面命令 #查看可用的git安装包 yum list git #安装git yum install -y git 查看git安装包 安装git 验证是否安装成功 安装完毕之后&#xff0c;我们…