番禺做网站技术超酷网站模板

web/2025/10/4 20:57:27/文章来源:
番禺做网站技术,超酷网站模板,自己做网站怎么赚钱,长春关键词排名优化简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的#xff0c;其实数据手册都有说到#xff0c; 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的其实数据手册都有说到 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Number上面; 电路图 两个DS18B20连接到一起 实现步骤 创建项目 基于 上一篇 普中STM32-PZ6806L开发板(HAL库函数实现-温度传感器DS18B20) 添加用户代码 获取DS18B20的Serial Number信息, 然后记录下来, 用于向指定DS18B20获取温度值 typedef struct {uint8_t familyCode;uint8_t sns[6];uint8_t crc; } SENSOR_DS18B20_SerialNumberInfo;SENSOR_DS18B20_SerialNumberInfo SENSOR_DS18B20_GetSN(void) {SENSOR_DS18B20_SerialNumberInfo info;uint8_t recvs[8] { 0 };SENSOR_DS18B20_Reset ();HAL_Delay (1);SENSOR_DS18B20_Write (0x33); // read romHAL_Delay (1);// 1 byte - family code// 2 ~ 7 byte - serial number// 8 byte - CRC8 recvs[0] SENSOR_DS18B20_Read(); // family codeinfo.familyCode recvs[0];for (int i 0; i 6; i) // serial number{ recvs[i1] SENSOR_DS18B20_Read();info.sns[i] recvs[i1];}recvs[7] SENSOR_DS18B20_Read(); // CRC8info.crc recvs[7];if (SENSOR_DS18B20_CRC8(recvs, 7) ! recvs[7]) // CRC8 检查{info.familyCode 0;memset(info.sns, 0, sizeof(info.sns)/sizeof(uint8_t));info.crc 0; return info; // CRC校验不一致}return info; }实现流程参考pdf 实现代码 /* 两个DS18B20设备 */ #include stdio.h #include string.h/* DS18B20, 提前读取出来的SNfamilyCodeCRC码 */ SENSOR_DS18B20_SerialNumberInfo ds18b20_infos[] {{ 0x28, { 0x2E, 0x7C, 0x04, 0x05, 0x00, 0x00 }, 0xCC },{ 0x28, { 0x2F, 0x7D, 0x10, 0x02, 0x01, 0x00 }, 0xBE } };/* 引脚重新设置为输入 */ static void SENSOR_DS18B20_SetPinInput(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin GPIO_Pin;GPIO_InitStruct.Mode GPIO_MODE_INPUT;GPIO_InitStruct.Pull GPIO_NOPULL;HAL_GPIO_Init(GPIOx, GPIO_InitStruct); } /* 引脚重新设置为输出 */ static void SENSOR_DS18B20_SetPinOutput(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) {GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin GPIO_Pin;GPIO_InitStruct.Speed GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP;HAL_GPIO_Init(GPIOx, GPIO_InitStruct); }/*SENSOR_DS18B20_Reset :初始化也是复位, 每次发送指令前的动作0 : 初始化失败1 : 初始化成功 */ static uint8_t SENSOR_DS18B20_Reset(void) {uint8_t res 0;SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN); // 引脚输出模式HAL_GPIO_WritePin (DS18B20_PORT, DS18B20_PIN, 0); // 拉低引脚delay_us (480); // 参考初始化时序图, 延时480usSENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN); // set the pin as inputdelay_us (60); // 15~60us等待DS18B20回复信息, 多等20us避免检测不到if ( !HAL_GPIO_ReadPin(DS18B20_PORT, DS18B20_PIN) )res 1; // 检测到低电平, DS18B20有响应else res 0;delay_us (420); // 等待DS18B20结束响应return res; }/* 写流程 */ void SENSOR_DS18B20_Write(uint8_t data) {/*按位写, 根据时序图, 按照写的 高电平的时序 和 低电平的时序进行延时*/for (int i 0; i 8; i){if ((data (1i))!0) // 写1{SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN); HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, 0); // 拉低delay_us (2); // 低电平保持时间SENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN); // 输入delay_us (60); // 等待}else // 写0{SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);HAL_GPIO_WritePin (DS18B20_PORT, DS18B20_PIN, 0); // 拉低delay_us (60); // 等待60usSENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN); // 输入}} } /* 读流程 */ uint8_t SENSOR_DS18B20_Read (void) {uint8_t value 0;SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);for (int i0;i8;i){SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN);HAL_GPIO_WritePin(DS18B20_PORT, DS18B20_PIN, 0); // 拉低delay_us(2); // 拉低电平等待时间SENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN);if (HAL_GPIO_ReadPin (DS18B20_PORT, DS18B20_PIN)) {value | 1i; }delay_us (60); // DS18B20数据响应时间}return value; }/* 计算CRC码 */ uint8_t SENSOR_DS18B20_CRC8(uint8_t *dats, uint8_t len) {uint8_t i, dat, crc, fb, st_byt;st_byt 0;crc 0;do {dat dats[st_byt];for (i 0; i 8; i) { fb crc ^ dat;fb 1;crc 1;dat 1;if (fb 1) crc ^ 0x8c; }st_byt;} while (st_byt len); return crc; }/* 获取Serial NumberCRCfamily Code */ SENSOR_DS18B20_SerialNumberInfo SENSOR_DS18B20_GetSN(void) {SENSOR_DS18B20_SerialNumberInfo info;uint8_t recvs[8] { 0 };SENSOR_DS18B20_Reset ();HAL_Delay (1);SENSOR_DS18B20_Write (0x33); // read romHAL_Delay (1);// 1 byte - family code// 2 ~ 7 byte - serial number// 8 byte - CRC8 recvs[0] SENSOR_DS18B20_Read(); // family codeinfo.familyCode recvs[0];for (int i 0; i 6; i) // serial number{ recvs[i1] SENSOR_DS18B20_Read();info.sns[i] recvs[i1];}recvs[7] SENSOR_DS18B20_Read(); // CRC8info.crc recvs[7];if (SENSOR_DS18B20_CRC8(recvs, 7) ! recvs[7]) // CRC8 检查{info.familyCode 0;memset(info.sns, 0, sizeof(info.sns)/sizeof(uint8_t));info.crc 0; return info; // CRC校验不一致}return info; }/* 写Serial NumberCRCfamily Code */ void SENSOR_DS18B20_WriteID(uint8_t index) {uint8_t id_data[8];id_data[0] ds18b20_infos[index].familyCode;id_data[7] ds18b20_infos[index].crc;for ( int i 1; i 7; i ){id_data[i] ds18b20_infos[index].sns[i-1];}SENSOR_DS18B20_Reset (); SENSOR_DS18B20_Write (0x55); // skip ROM; //Match ROM [55h]for ( int i 0; i 8; i ){SENSOR_DS18B20_Write(id_data[i]);} }/* 等待电平被拉高 */ void SENSOR_DS18B20_WaitForHigh(uint32_t time) {SENSOR_DS18B20_SetPinInput(DS18B20_PORT, DS18B20_PIN);delay_us(time);while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_9) 0);SENSOR_DS18B20_SetPinOutput(DS18B20_PORT, DS18B20_PIN); }/* 将读取值转化成温度值 */ float SENSOR_DS18B20_ValueToTemperature(uint8_t lsb, uint8_t msb) {uint16_t temp 0;temp (msb 8) lsb;if((temp0xf800)0xf800) // 符号位判定是否负数{temp(~temp)1; // 补码转原码return temp*(-0.0625); //12bit 增量值}else{return temp*0.0625; //12bit 增量值} }/* 通过serial number数据获取温度 */ float SENSOR_DS18B20_GetTemperatureByID(uint8_t ds18b20_index) {uint8_t recv_data[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // 9 Bytesuint8_t ds18b20_num sizeof(ds18b20_infos) / sizeof(SENSOR_DS18B20_SerialNumberInfo);uint16_t temp 0;if ( ds18b20_index ds18b20_num )return 0; // 不存在此设备SENSOR_DS18B20_Reset ();HAL_Delay (1);SENSOR_DS18B20_WriteID(ds18b20_index);SENSOR_DS18B20_Write(0x44);//Convert Temperature [44h]SENSOR_DS18B20_WaitForHigh(20);SENSOR_DS18B20_Reset ();SENSOR_DS18B20_WriteID(ds18b20_index);SENSOR_DS18B20_Write(0xBE);//Read Scratchpad [BEh]for (uint8_t i 0; i 9; i){recv_data[i] SENSOR_DS18B20_Read();}return SENSOR_DS18B20_ValueToTemperature(recv_data[0], recv_data[1]); }代码 无需下载, 代码上面基本都提供了 Note: 支持你的DS18B20, 你需要修改 改成你的DS18B20的信息 SENSOR_DS18B20_SerialNumberInfo ds18b20_infos[] { { 0x28, { 0x2E, 0x7C, 0x04, 0x05, 0x00, 0x00 }, 0xCC }, { 0x28, { 0x2F, 0x7D, 0x10, 0x02, 0x01, 0x00 }, 0xBE } };

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

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

相关文章

网站开发 兼职挣钱吗网络推广服务合同范本

变量生而不变,允许优化,JDK1.5 pre 避免,逸出 final int x; // 错误的构造函数 public FinalFieldExample(){x 3;// 此处就是将this逸出global.obj this; }

公司的网站建设公司seo的主要工作内容

编写JUnit测试可能是一个乏味而乏味的过程。 了解如何使用排列结合TestFactory方法和DynamicTest对象以最少的编码工作来改进测试类。 在本文中,我将使用Java流ORM Speedment,因为它包含一个现成的Permutation类,从而帮助我节省了开发时间。…

东莞网站建设化工wordpress移动端适应

BAPI_PR_CREATE 技术指南 用途:通过 RFC 接口创建 SAP 采购申请(PR),支持自动化集成与批量处理。 一、功能概览 类别说明核心功能创建标准采购申请、预留转采购申请,支持多行项目及账户分配。集成场景与 MRP 系统、外…

注册建设网站的公司seo优化6个实用技巧

HTML详解连载(1) HTML定义HTML 超文本标记语言标签语法注意拓展 HTML基本骨架解释VS Code 快速生成骨架:标签的关系父子关系(嵌套关系)兄弟关系(并列关系) 代码格式注释 标题标签标签名:h1-h6(双…

东莞网站推广服务湖南省住房和建设厅网站

HBase 中设计 RowKey 在 HBase 中设计 RowKey 是非常重要的,它直接影响着数据的存储和检索效率。下面是一些设计 RowKey 的原则: 1. 唯一性(Uniqueness):RowKey 必须是唯一的,因为在 HBase 中,数…

公司网站模块制作自建网站做外贸

Q-learning、DQN算法是基于价值的算法,通过学习值函数、根据值函数导出策略;而基于策略的算法,是直接显示地学习目标策略,策略梯度算法就是基于策略的算法。 策略梯度介绍 将策略描述为带有参数 θ \theta θ 的连续函数&#…

响应式网站切图网上推广是什么意思

需求 基于ListView,创建一个列表视图,用于展示"BookInfo"表的信息要求提供分页提供对书名,作者,描述的查询功能 示例展示: 1. 数据模型 models.py class BookInfo(models.Model):titlemodels.CharField(verbose_name"书名",max_length100)authormode…

70 网站制作wordpress 5.1.1

发布时间:2017-09-25我的世界惊现全新无限刷物品bug 服主大大都要注意了.那今天给大家分享一个玩家无意间发现的新的无限刷物品bug,而且还是在服务器中哦!那感兴趣的玩家不妨进来看看哦! 在一个rpg服务器玩 开小号召唤boss的时候发现的. ...标签:我的世界…

朝阳双桥网站建设外贸网络推广专员

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言日常编码过程中,最重要的技能不是说你学会使用很多最新的编程技术或者做出一个高大上的系统。而是你在写代码过程中,对异常的处理,是否系统可以稳定,健壮。对于异…

网站搭建上海建设工程咨询网 首页

在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优化,是And…

wordpress只显示首页网站优化设计

复杂数据结构处理:Join 小技巧:提升数据的处理速度 本文是在原本sql闯关的基础上总结得来,加入了自己的理解以及疑问解答(by GPT4) 原活动链接 用到的数据:链接 提取码:l03e 目录 1. 课前小问…

浙江和海建设集团网站首页社区电商平台排行榜

非监督学习 1 什么是非监(unsupervised learning)督学习 无监督学习,就是不受监督的学习,一种自由的学习方式。该学习方式不需要先验知识进行指导,而是不断地自我认知,自我巩固,最后进行自我归纳,在机器学…

校园网站规划与建设心得甘肃兰州做网站

之前看到一个项目不能继承类SimpleTagSuppert类,而将jsp-api.jar(不知道servlet-api.jar能不能放)放入到了 jdk/jre/lib/ext包下面结果不仅正在写的jsp不能运行,以前的web应用也不能运行,会出现 java.lang.ClassNotFo…

株洲网站建设服务公司前端页面设计流程

简单工厂模式 简单工厂模式的概念 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负 责创建其他类的实例,被创建的实例通常都具有共同的父类。 具体分类 工厂(Creator)角色 简单工厂模式的核心&#xff0…

模板和网站可以分开吗利用店铺网站做灰色优化

目录 一、什么是字体反扒 二、Unicode编码 三、利用font包获取映射关系 一、什么是字体反扒 字体反爬是一种常见的反爬虫技术,它通过将网页中的文本内容转换为特殊的字体格式来防止爬虫程序直接获取和解析文本信息。字体反爬的原理是将常规的字符映射到特殊的字…

国外网站视频播放器如何做好网站seo优化

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

做网站公司需要什么资质自己接私单网站开发

TS223是触摸键检测IC,提供1个触摸键。触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。低功耗和宽工作电压是触摸键的DC和AC特点。采用SSOP16、SOT-23-6的封 装形式封装。 主要特点: ● 工作电压2.0V~5.5V ● 工作电流VDD3V, 无…

大安网站建设如何自己做网站一年赚一亿

使用函数实现数据大小端转换 题目描述 在数字芯片设计中,经常把实现特定功能的模块编写成函数,在需要的时候再在主模块中调用,以提高代码的复用性和提高设计的层次,分别后续的修改。 请用函数实现一个4bit数据大小端转换的功能。…

西安建设网站电话号码软文营销的五大注意事项

NovelD:一种简单而有效的探索准则 1、Motivation 针对稀疏奖励环境下的智能体探索问题,许多工作中采用各种内在奖励(Intrinsic Reward)设计来指导困难探索环境中的探索 ,例如: ICM:基于前向动力学模型的好奇心驱动探索RND&…

东莞塘厦网站建设平台网站建设预算表

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式(Observer Pattern),也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系, …