蓝桥杯嵌入式国赛笔记(3):其他拓展板程序设计(温、湿度传感器、光敏电阻等)

目录

1、DS18B20读取 

2、DHT11

2.1 宏定义 

2.2 延时 

2.3 设置引脚输出 

2.4 设置引脚输入

2.5 复位

2.6 检测函数 

2.7 读取DHT11一个位 

2.7.1 数据位为0的电平信号显示

2.7.2 数据位为1的电平信号显示 

2.8 读取DHT11一个字节 

2.9 DHT11初始化 

2.10 读取DHT11一次数据

3、光敏电阻

3.1 光敏电阻DO

3.1.1 CubeMx配置 

3.1.2 初始化光敏电阻DO 

3.2 光敏电阻AO 

3.2.1 CubeMx配置

3.2.2 初始化光敏电阻AO 


1、DS18B20读取 

int16_t ds18b20_read(void)
{uint8_t Val[2];int16_t x;ow_reset();ow_byte_wr(OW_SKIP_ROM);ow_byte_wr(DS18B20_CONVERT);delay_us(750000);ow_reset();ow_byte_wr(OW_SKIP_ROM);ow_byte_wr(DS18B20_READ);int i;for(i=0;i<2;i++){Val[i] = ow_byte_rd();}x = Val[1];x <<= 8; x |= Val[0];return x;
}

2、DHT11

2.1 宏定义 

#define	DHT11_PIN_PORT       GPIOA
#define	DHT11_PIN        GPIO_PIN_7
#define	DHT11_PIN_CLOCK  __HAL_RCC_GPIOA_CLK_ENABLE()
#define	DHT11_PIN_OUT_H   HAL_GPIO_WritePin(DHT11_PIN_PORT, DHT11_PIN, GPIO_PIN_SET)
#define	DHT11_PIN_OUT_L   HAL_GPIO_WritePin(DHT11_PIN_PORT, DHT11_PIN, GPIO_PIN_RESET)
#define	DHT11_PIN_IN      HAL_GPIO_ReadPin(DHT11_PIN_PORT, DHT11_PIN)

2.2 延时 

#define Delay_us(X)  delay((X)*80/5)void delay(unsigned int n)
{while(n--);
}

2.3 设置引脚输出 

void DHT11_PIN_OUT(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/**/GPIO_InitStruct.Pin = DHT11_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//高速HAL_GPIO_Init(DHT11_PIN_PORT, &GPIO_InitStruct);
}

2.4 设置引脚输入

void DHT11_PIN_INPUT(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};DHT11_PIN_CLOCK;/**/GPIO_InitStruct.Pin = DHT11_PIN;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;//输入GPIO_InitStruct.Pull = GPIO_PULLUP;//上拉HAL_GPIO_Init(DHT11_PIN_PORT, &GPIO_InitStruct);
}

2.5 复位

//复位DHT11
void DHT11_Rst(void)
{DHT11_PIN_OUT(); 	//设置为输出DHT11_PIN_OUT_L; 	//低电平HAL_Delay(20);	//拉低至少18msDHT11_PIN_OUT_H; 	//高电平Delay_us(60);     	//主机拉高20~40us
}

2.6 检测函数 

//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
uint8_t DHT11_Check(void)
{uint8_t re = 0;DHT11_PIN_INPUT();      //设置为输入while (DHT11_PIN_IN && re < 100) //DHT11会拉低40~80us{re++;Delay_us(1);};if(re >= 100)return 1;else re = 0;while (!DHT11_PIN_IN && re < 100) //DHT11拉低后会再次拉高40~80us{re++;Delay_us(1);};if(re >= 100)return 1;return 0;
}

2.7 读取DHT11一个位 

2.7.1 数据位为0的电平信号显示

2.7.2 数据位为1的电平信号显示 

//从DHT11读取一个位
uint8_t DHT11_Read_Bit(void)
{uint8_t re = 0;while(DHT11_PIN_IN && re < 110) //等待变为低电平{re++;Delay_us(1);}re = 0;while(!DHT11_PIN_IN && re < 110) //等待变高电平{re++;Delay_us(1);}Delay_us(80);//等待40usif(DHT11_PIN_IN)return 1;else return 0;
}

2.8 读取DHT11一个字节 

//从DHT11读取一个字节
uint8_t DHT11_Read_Byte(void)
{uint8_t i, dat;dat = 0;for (i = 0; i < 8; i++){dat <<= 1;dat |= DHT11_Read_Bit();}return dat;
}

2.9 DHT11初始化 

//初始化DHT11的IO口,同时检测DHT11的存在
uint8_t DHT11_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};DHT11_PIN_CLOCK;;GPIO_InitStruct.Pin = DHT11_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//告诉HAL_GPIO_Init(DHT11_PIN_PORT, &GPIO_InitStruct);DHT11_Rst();//复位return DHT11_Check();
}

2.10 读取DHT11一次数据

//从DHT11读取一次数据
uint8_t DHT11_Read_Data(uint8_t *temp, uint8_t *humi)
{uint8_t buf[5];uint8_t i;DHT11_Rst();if(DHT11_Check() == 0){for(i = 0; i < 5; i++){buf[i] = DHT11_Read_Byte();}if((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4]){*humi = buf[0];*temp = buf[2];}}else return 1;return 0;
}

3、光敏电阻

3.1 光敏电阻DO

3.1.1 CubeMx配置 

 

3.1.2 初始化光敏电阻DO 

void Photo_DO_Init()
{/* USER CODE BEGIN ADC2_Init 0 *//* USER CODE END ADC2_Init 0 */ADC_ChannelConfTypeDef sConfig = {0};/* USER CODE BEGIN ADC2_Init 1 *//* USER CODE END ADC2_Init 1 *//** Common config*/hadc2.Instance = ADC2;hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV2;hadc2.Init.Resolution = ADC_RESOLUTION_12B;hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc2.Init.GainCompensation = 0;hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE;hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;hadc2.Init.LowPowerAutoWait = DISABLE;hadc2.Init.ContinuousConvMode = DISABLE;hadc2.Init.NbrOfConversion = 1;hadc2.Init.DiscontinuousConvMode = DISABLE;hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;hadc2.Init.DMAContinuousRequests = DISABLE;hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED;hadc2.Init.OversamplingMode = DISABLE;if (HAL_ADC_Init(&hadc2) != HAL_OK){Error_Handler();}/** Configure Regular Channel*/sConfig.Channel = ADC_CHANNEL_17;sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;sConfig.SingleDiff = ADC_SINGLE_ENDED;sConfig.OffsetNumber = ADC_OFFSET_NONE;sConfig.Offset = 0;if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK){Error_Handler();}/* USER CODE BEGIN ADC2_Init 2 *//* USER CODE END ADC2_Init 2 */}
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(adcHandle->Instance==ADC2){/* USER CODE BEGIN ADC2_MspInit 0 *//* USER CODE END ADC2_MspInit 0 *//* ADC2 clock enable */__HAL_RCC_ADC12_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/**ADC2 GPIO ConfigurationPA4     ------> ADC2_IN17*/GPIO_InitStruct.Pin = GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* USER CODE BEGIN ADC2_MspInit 1 *//* USER CODE END ADC2_MspInit 1 */}
}

3.2 光敏电阻AO 

3.2.1 CubeMx配置

3.2.2 初始化光敏电阻AO 

void Photo_AO_Init()
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOF_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();/*Configure GPIO pin : PA3 */GPIO_InitStruct.Pin = GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

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

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

相关文章

配置本地 apt 源

挂载iso镜像文件 注意&#xff1a;文章中的挂载方法是临时挂载&#xff0c;重启服务器失效 我是使用iBMC的虚拟控制台将我的iso文件以设备的形式挂载到服务器上&#xff0c;我的iso文件是设备&#xff1a;/dev/sr0 也可以直接将iso文件上传到服务器某个目录。 将 /dev/sr0 进…

【竞技宝】欧洲杯:德国被乌克兰逼平,27脚射门仍难得分!

欧洲杯前的热身赛已经全面开启,东道主德国队算是打响了热身赛的第一枪,只可惜他们在主场0比0被乌克兰逼平。整场比赛,德国队都占据明显优势,全场比赛轰出27脚射门,可是却无法实现破门。这个时候德国球迷似乎回想到了前两届世界大赛,球队被“锋无力”支配的恐惧。 本场比赛德国队…

拓扑排序详解

目录 一、拓扑排序前置知识 1.1 定义&#xff1a; 1.2 AOV网&#xff1a; 二、如何拓扑排序 2.1 运用 kahn 算法&#xff1a; 2.2 实现拓扑排序&#xff1a; 2.3 拓扑排序的应用&#xff1a; 2.4 拓扑排序编写模板&#xff1a; 三、例题练习 3.1 例题1&#xff1a;课…

虚拟机安装 RockyLinux为例

目录 一、VMWare、Xshell、Xftp、LinuxISO资料下载 二、VMWare安装 三、创建虚拟机 四、虚拟机安装过程的问题 一、VMWare、Xshell、Xftp、LinuxISO资料下载 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;6666 二、VMWare安装 三、创建虚拟机 四、虚拟机安装…

工具类产品一定适合走简洁路线,不接受反驳。

工具类产品通常适合走简洁路线。这是因为工具类产品的主要目标是解决用户的问题或提供某种功能&#xff0c;因此用户更关注产品的实用性和易用性&#xff0c;而不是过多的装饰和复杂的功能。 以下是为什么工具类产品适合走简洁路线的一些原因&#xff1a; 用户体验&#xff1…

【iOS】didReceiveMemoryWarning实例方法

iPhone下每个App可用的内存是被限制的&#xff0c;如果一个App使用的内存超过20M&#xff0c;则系统会向该App发送Memory Warning&#xff08;内存警告&#xff09;消息&#xff0c;收到此消息后&#xff0c;App必须正确处理&#xff0c;否则可能出错或出现内存泄漏。 目录 流程…

回归现实:无需复杂假设即可轻松评估过程能力的简单方法

Cpk 和 Ppk 等过程能力指标能够测量您的过程相对于客户规格要求的执行情况。我们先回顾一些能力分析基础知识&#xff0c;再深入了解另一个能力估计值 Cnpk&#xff0c;该估计值很可能在您的能力分析库中非常有用。 能力统计指标分析 能力统计指标使用单个数字&#xff0c;是一…

Linux命令 netstat -anp | grep 的用法

文章目录 1、第一种解释2、第二种解释3、第三种解释4、第四种解释5、第五种解释6、netstat --help 在Windows中&#xff0c;杀死端口占用的博客链接 1、第一种解释 在Unix和Linux系统中&#xff0c;netstat -anp 命令用于显示所有的网络连接&#xff08; -a 表示所有&#xff…

OpenCv之简单的人脸识别项目(登录页面)

人脸识别 一、项目准备二、登录页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.运行脚本3.1定义识别脚本3.2定义提取脚本3.3定义标注脚本3.4定义人脸比对脚本3.5定义动态处理脚本3.6定义属性判断脚本 4.创建一个退出…

浏览器阻止屏幕息屏,js阻止浏览器息屏,Web网页阻止息屏

场景: 比如打开一个浏览器页面(比如大屏),想让它一直显示着,而不是过几分钟不操作就屏幕黑了.(电脑有设置电脑不操作就会多长时间就会息屏睡眠,如果要求每个客户都去操作一下电脑设置一下从不睡眠,这很不友好和现实.而且我也只想客户在大屏的时候才这样,其他页面就正常,按电脑设…

如何从 Android 中恢复误删除的照片

尝试恢复 Android 智能手机上误删的文件、照片和视频可能非常麻烦&#xff0c;但无论如何&#xff0c;这是可以做到的。根据您用于删除照片的应用程序&#xff0c;方法可能因设备而异。但是&#xff0c;如果删除时间不长&#xff0c;您可能能够恢复它。在本文中&#xff0c;我们…

使用element的小弹框并修改css

使用el-popover来做弹框&#xff1a; 滑动或点击元素要加插槽slot"reference"来展示弹框&#xff1b; <el-popoverplacement"top"width"166"trigger"hover"popper-class"popover"><div><div><div>…

Docker中布置Jenkins实现Android项目的自动化构建

因项目需要&#xff0c;要在服务器上使用Jenkins完成Android项目的自动化构建&#xff0c;但服务器上登录的账户没有管理员权限&#xff0c;无法用sudo命令&#xff0c;因此需要把相应环境布置在docker中。 环境搭建 docker容器相关命令 创建容器 docker create -it contai…

防爆气象站解析

TH-FBCQX2&#xff08;FB02&#xff09;随着工业领域的快速发展&#xff0c;安全生产问题日益受到重视。特别是在石油化工、煤矿、烟花爆竹等易燃易爆环境中&#xff0c;准确、及时地获取气象数据对于预防事故、保障人员安全具有重要意义。防爆气象站作为这些特殊环境中不可或缺…

C#WPF数字大屏项目实战01--开发环境与项目创建

1、学习目标 -界面布局 &#xff0c;- 模板调整&#xff0c;- 控件封装&#xff0c;- 图表&#xff0c;- 通信对接&#xff0c;- 动态更新 2、开发环境 开发工具&#xff1a;Visual Studio-2022-17.8.6-Community 运行时框架&#xff1a;.Net 6或Framework 4.5以上 UI框…

QT入门知识回顾

1 QT简介 1.1 Qt模块: Qt Core模块: 是QT类库的核心&#xff0c;所有其他模块都依赖这个模块 Qt Gui模块: 提供GUI程序的基本功能 Qt Network模块:提供跨平台的网络功能 Qt Widgets模块:提供创建用户界面的功能 1.2Qt的signal/slot机制 任何一个类只要类体前部书写 Q_OBJ…

动手学深度学习4.8 数值稳定性和模型初始化-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;14 数值稳定性 模型初始化和激活函数【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址&…

网易云音乐格式在线转换

应用分享&#xff1a;众所周知网易云下载的格式为 .NCM&#xff0c;只能在网易云音乐里播放。 今天提供在线转换为MP3格式 NCM TO MP3&#xff0c;无需安装&#xff0c;转换后就能在任意播放器使用。 使用地址&#xff1a; https://ncm.worthsee.com/ 网络研究观 数据泄露…

E: Unable to locate package ros-kinetic-usb-cam

mkdir -p USB/src && cd USB/src catkin_init_workspace git clone https://github.com/bosch-ros-pkg/usb_cam.git cd .. catkin_make source devel/setup.bash echo "source ~/USB/devel/setup.bash" >> ~/.bashrc source ~/.bashrc 编译过程报错&…

【机器学习】机器学习在深度学习领域中的作用:半监督学习的视角

&#x1f440;时空之门&#x1f440; &#x1f50d;引言&#x1f388;半监督学习概述&#x1f69d;机器学习在深度学习领域中的作用☘特征提取与表示学习&#x1f340;复杂任务建模❀结合半监督学习提升性能 &#x1f680;半监督学习在深度学习中的应用场景&#x1f4d5;图像识…