Advertisement

STM32F407单片机DS18B20温度传感器读写及串口屏显示DEMO源码.zip

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本资源提供了一套使用STM32F407单片机与DS18B20温度传感器进行通信的示例代码,包括通过串口屏显示温度数据。适合初学者学习和参考。 STM32F407单片机读取并显示DS18B20温度传感器数据的示例程序源码可以作为学习参考。 ```c int main(void) { uint8_t DS18B20ID[8]; float temperature; /* 初始化所有外设,Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); while(DS18B20_Init()) { printf(DS18B20温度传感器不存在\n); HAL_Delay(1000); } printf(检测到DS18B20温度传感器,并初始化成功\n); DS18B20_ReadId(DS18B20ID); /* 无限循环 */ while (1) { temperature = DS18B20_GetTemp_MatchRom(DS18B20ID); printf(获取该序列号器件的温度:%.1f\n,temperature); HMI_value_setting(page1.gross.val,temperature * 10); HAL_Delay(1000); } } /** 函数功能: 向串口屏发送数据 * 输入参数: val_str - 字符串指针,value - 要发送的整数值 * 返回值: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30] = {0}; uint8_t i; sprintf((char *)tmp_str, %s=%d, val_str,value); for(i=0; iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR = 0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI,UART_FLAG_TXE) == RESET); } /** 函数功能: 向串口屏发送浮点数据 * 输入参数: val_str - 字符串指针,value - 要发送的整数值 * 返回值: 无 */ void HMI_string_setting(const char *val_str, int32_t value) { uint8_t tmp_str[50] = {0}; uint8_t i; float temp=(float)value; sprintf((char *)tmp_str, %s=%.1f, val_str,temp); for(i=0; iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI,UART_FLAG_TXE) == RESET); } HMI_USARTx->DR = 0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • STM32F407DS18B20DEMO.zip
    优质
    本资源提供了一套使用STM32F407单片机与DS18B20温度传感器进行通信的示例代码,包括通过串口屏显示温度数据。适合初学者学习和参考。 STM32F407单片机读取并显示DS18B20温度传感器数据的示例程序源码可以作为学习参考。 ```c int main(void) { uint8_t DS18B20ID[8]; float temperature; /* 初始化所有外设,Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); while(DS18B20_Init()) { printf(DS18B20温度传感器不存在\n); HAL_Delay(1000); } printf(检测到DS18B20温度传感器,并初始化成功\n); DS18B20_ReadId(DS18B20ID); /* 无限循环 */ while (1) { temperature = DS18B20_GetTemp_MatchRom(DS18B20ID); printf(获取该序列号器件的温度:%.1f\n,temperature); HMI_value_setting(page1.gross.val,temperature * 10); HAL_Delay(1000); } } /** 函数功能: 向串口屏发送数据 * 输入参数: val_str - 字符串指针,value - 要发送的整数值 * 返回值: 无 */ void HMI_value_setting(const char *val_str,uint32_t value) { uint8_t tmp_str[30] = {0}; uint8_t i; sprintf((char *)tmp_str, %s=%d, val_str,value); for(i=0; iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR = 0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI,UART_FLAG_TXE) == RESET); } /** 函数功能: 向串口屏发送浮点数据 * 输入参数: val_str - 字符串指针,value - 要发送的整数值 * 返回值: 无 */ void HMI_string_setting(const char *val_str, int32_t value) { uint8_t tmp_str[50] = {0}; uint8_t i; float temp=(float)value; sprintf((char *)tmp_str, %s=%.1f, val_str,temp); for(i=0; iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI,UART_FLAG_TXE) == RESET); } HMI_USARTx->DR = 0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } ```
  • STM32F407与DHT11湿软件工程.zip
    优质
    本资源提供基于STM32F407单片机通过I/O接口读取DHT11温湿度传感器数据,并将采集的信息传输至串口屏进行实时显示的完整软件工程源代码。 STM32F407单片机读取并显示OneWire_DHT11温湿度传感器数据(通过串口屏)的软件工程源码可以作为学习设计参考。 ```c int main(void){ /* 初始化所有外设、Flash接口和系统滴答定时器 */ HAL_Init(); /* 配置系统时钟 */ SystemClock_Config(); /* 初始化串口并配置串口中断优先级 */ MX_DEBUG_USART_Init(); HMI_USARTx_Init(); DHT11_Init(); /* 无限循环 */ while (1) { if(DHT11_Read_TempAndHumidity(&DHT11_Data)==SUCCESS){ HMI_value_setting(page1.gross.val,DHT11_Data.humidity*10); HMI_value_setting(page1.net.val,DHT11_Data.temperature*10); printf(读取DHT11成功!-->湿度为%.1f %RH ,温度为 %.1f℃ \n, DHT11_Data.humidity,DHT11_Data.temperature); } else { printf(读取DHT11信息失败\n); } HAL_Delay(1000); } } /** 函数功能: 向串口屏发送数据 * 输入参数: 无 * 返 回 值: 无 */ void HMI_value_setting(const char *val_str,uint32_t value){ uint8_t tmp_str[30]={0}; uint8_t i; sprintf((char *)tmp_str,%s=%d,val_str,value); for(i=0;iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); HMI_USARTx->DR=0xFF; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } /** 函数功能: 向串口屏发送浮点数据 * 输入参数: 无 * 返 回 值: 无 */ void HMI_string_setting(const char *val_str,int32_t value){ uint8_t tmp_str[50]={0}; uint8_t i; float temp=(float)value; sprintf((char *)tmp_str,%s=\%.1f\,val_str,temp/100); for(i=0;iDR=tmp_str[i]; while(__HAL_UART_GET_FLAG(&husartx_HMI, UART_FLAG_TXE) == RESET); } HMI_USARTx->DR=0xFF; } ```
  • STM32DS18B20程序.zip
    优质
    本资源包含STM32单片机配合DS18B20温度传感器进行温度读写的完整程序源代码,适用于需要实现精准测温功能的项目开发。 STM32单片机读写DS18B20温度传感器的例程软件源码可以作为学习设计参考。该程序的功能如下: 1. 程序先打印出例程LOGO。 2. 打印 DS18B20 的 ROM ID。 3. 显示温度寄存器数值与摄氏度之间的对应关系,以验证数值转换函数的正确性。 4. 循环输出 DS18B20 测得的温度数据(包括寄存器原始数据和换算成十进制有符号数后的摄氏度值)。 在主程序中: ```c int main(void) { // 因为ST固件库启动文件已经完成了CPU系统时钟初始化,因此无需再次配置。启动文件设置了CPU的主频率、内部Flash访问速度及可选外部SRAM FSMC初始化。 bsp_Init(); // 初始化硬件平台相关的设置 PrintfLogo(); // 打印例程LOGO到串口1 bsp_InitDS18B20(); // 配置GPIO以用于与DS18B20通信 } ```
  • STC15W4K32S4DS18B20调试助手实验例程KEIL.zip
    优质
    本资源包含STC15W4K32S4单片机与DS18B20温度传感器通信的完整实验例程,附带Keil C语言源代码和串口调试助手显示设置。 STC15W4K32S4单片机 DS18B20温度传感器 串口调试助手显示实验例程KEIL源码 ```c int main(){ unsigned char strTemp[6]; unsigned char ucTemp; // 高阻态,需将这些端口设置为准双向或强推挽模式方可正常使用 // 相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5 P0M1 = 0; P0M0 = 0; // 设置P0端口为准双向模式 P1M1 = 0; P1M0 = 0; // 设置P1端口为准双向模式 P2M1 = 0; P2M0 = 0; // 设置P2端口为准双向模式 } ``` 注意:原文中没有提及`P3M`的配置,可能需要根据具体硬件需求进行设置。
  • DS18B20与51LCD1602连接
    优质
    本项目介绍如何使用DS18B20温度传感器通过51单片机读取环境温度,并将数据实时显示在LCD1602液晶屏上,适用于基础物联网温控系统开发。 标题中的“DS18B20温度传感 51的单片机 lcd1602”指的是一个基于51系列单片机的项目,该项目使用了DS18B20数字温度传感器来获取环境温度,并通过LCD1602液晶显示屏进行数据显示。下面将详细解释这三个关键组件及其在项目中的应用。 **DS18B20温度传感器**:这是由达拉斯半导体(现被Maxim Integrated收购)生产的数字温度传感器,能够提供9位到12位的温度分辨率,并且可以直接通过单线接口与微控制器通信。这意味着只需要一根数据线就可以完成数据传输,大大简化了硬件连接。DS18B20的测量范围通常为-55°C到+125°C,适用于各种环境监测应用。 **51单片机**:这是Intel公司开发的一系列8位微处理器,由于其结构简单、易于学习和广泛应用的特点,成为了许多初学者和嵌入式系统开发者的首选。它包括多个型号如AT89C51等,并通常内置RAM、ROM、定时器计数器以及IO端口,可以方便地进行各种控制任务。在这个项目中,51单片机作为主控制器负责接收DS18B20发送的温度数据并处理这些信息。 **LCD1602液晶显示屏**:这是一种常见的字符型液晶显示器,拥有16个字符宽度和两行显示高度,总计可显示32个字符。它通常用于展示简单的文本信息如温度读数。通过并行接口与单片机连接时需要4条数据线及若干控制线(例如RS、RW、E)。在项目中LCD1602的作用是实时显示DS18B20测量的温度值,为用户提供直观的读数。 实现该项目的关键步骤可能包括: **硬件连接**:将DS18B20单线接口与51单片机的一个IO口相连,并确保电源和地线正确。同时,将LCD1602的数据线及控制线连接到单片机相应引脚上。 **固件编程**: 编写用于初始化DS18B20和LCD1602、设置温度传感器分辨率以及周期性读取并显示温度信息的程序代码。 **调试与测试**: 运行编写好的程序,检查LCD1602上的数据显示是否正常,并根据需要调整温度传感器的位置以验证其准确性和响应速度。 通过完成这个项目,参与者不仅可以掌握基本硬件接口技术的应用知识,还能更深入理解嵌入式系统的工作原理。
  • STM32F407与SW-420振动模块DEMO.zip
    优质
    本资源包包含STM32F407单片机与SW-420振动模块之间的通信示例代码,适用于传感器数据的读取和处理。 STM32F407单片机读取SW-420震动模块传感器的DEMO软件例程源码可以作为学习设计参考。 ```c int main(void) { uint32_t lcdid; // 初始化所有外设,配置Flash接口和系统滴答定时器 HAL_Init(); // 配置系统时钟 SystemClock_Config(); // 初始化串口并设置串口中断优先级 MX_DEBUG_USART_Init(); // 模块初始化 SW420_GPIO_Init(); // 初始化3.5寸TFT液晶模组,一般在调试串口之前进行初始化 lcdid = BSP_LCD_Init(); // 打印输出数据到控制台 printf(LCD ID=0x%08X\n,lcdid); LCD_Clear(0, 0, LCD_DEFAULT_WIDTH, LCD_DEFAULT_HEIGHT, BLACK); HAL_Delay(1000); // 延迟一秒 // 开启背光 LCD_BK_ON(); // 显示字符串在液晶屏上 LCD_DispString_EN_CH(70, 50,(uint8_t *)YS-F4Pro开发板,BLACK,BLUE,USB_FONT_24); LCD_DispString_EN_CH(20,100,(uint8_t *)SW-420 震动模块实验,BLACK,YELLOW,USB_FONT_24); // 显示震动状态 LCD_DispString_EN_CH(105, 200,震动,BLACK,WHITE,USB_FONT_24); while (1) { if(SW420_StateRead() == SW420_HIGH) { LED1_ON; // 显示有振动 LCD_DispString_EN_CH(80, 200,有,BLACK,RED,USB_FONT_24); } else { LED1_OFF; // 显示无振动 LCD_DispString_EN_CH(80, 200,无,BLACK,RED,USB_FONT_24); } HAL_Delay(1000); // 延迟一秒 } } ```
  • 《STM32结合MAX30102心率血氧DS18B20和OLED
    优质
    本项目展示了如何使用STM32微控制器与多种传感器(包括MAX30102心率/血氧、DS18B20温度)协同工作,并将数据通过OLED屏幕显示,提供完整的软件实现。 随着科技的不断进步,智能健康监测设备逐渐成为了人们生活中不可或缺的一部分。本段落介绍的是一个基于STM32单片机的智能健康监测手环设计项目,该项目结合了MAX30102心率血氧传感器、DS18B20温度传感器以及OLED屏幕,实现了一系列健康监测功能。 在本项目中采用的STM32单片机是一种广泛应用于嵌入式系统的高性能微控制器。它具备处理能力强、功耗低和系统可扩展性强等特点,非常适合用于各类智能设备开发。STM32系列单片机拥有丰富的外设接口,可以方便地与各种传感器及显示设备进行连接。 MAX30102是一款集成了心率和血氧检测功能的传感器模块,它通过光学传感技术检测血液中血红蛋白对光吸收的变化来推算出血氧饱和度和心率等生理参数。该款传感器因其小尺寸、低功耗及高精度而受到开发者的青睐。 DS18B20温度传感器是一个数字式温度感应器,能够提供9位至12位的摄氏温度测量值,并具有体积小、测量精度高以及使用方便等特点,在医疗健康领域有着广泛的应用前景。特别适合用于人体体温监测。 OLED屏幕作为现代显示技术之一,以其轻薄自发光、高对比度和广视角等特性成为移动设备及可穿戴设备显示屏的首选。在本项目中,OLED屏幕被用来实时显示心率、血氧饱和度以及体温等健康参数信息,为用户提供直观的数据展示。 整个系统的工作流程大致如下:STM32单片机作为核心控制单元负责处理来自MAX30102传感器和DS18B20传感器的数据,并通过OLED屏幕展示结果。用户可以通过手环监测自身生理状态包括心率、血氧饱和度以及体温等信息。此外,系统还可以将收集到的健康数据通过串口通信发送至电脑端进行进一步分析与存储。 该项目不仅可作为成品应用于日常健康监控中,也可以作为一个定制化的开发平台供学生根据个人需求和兴趣扩展功能创新设计。例如增加蓝牙模块以实现无线传输,并在智能手机上展示和分析数据等便捷操作方式。 此外,此项目亦可以为STM32单片机课程教学提供实践案例,帮助学生们更好地理解与掌握嵌入式系统开发的关键技术如传感器数据采集、数据分析处理、通信协议及用户界面设计等方面知识技能。 《基于STM32单片机的智能健康监测手环》展示了现代可穿戴设备在健康管理领域的应用潜力,并为电子工程专业学生提供了一个实践操作和创新发展的良好平台。
  • 利用DS18B20和51在OLED上实时
    优质
    本项目采用DS18B20温度传感器与51单片机相结合,实现对环境温度的精确测量,并通过OLED显示屏实时、直观地展示温度数据,适用于各种温控应用场景。 DS18B20温度传感器能够实时采集温度数据,并通过STC89C52RC微控制器将数据显示在OLED屏幕上,用户可以随时了解当前的温度情况。基于这一组合的应用不仅可以用于显示温度信息,还可以作为其他应用的基础,例如温度控制系统和环境监测系统等。希望这对大家有所帮助。
  • STC51DS18B20与LCD1602液晶
    优质
    本项目介绍了如何使用STC51单片机通过DS18B20温度传感器采集环境温度数据,并将数据显示在LCD1602液晶屏上,实现简易的温度监测系统。 STC51单片机与DS18B20温度传感器结合使用,并通过LCD1602液晶屏显示温度读数。这一项目展示了如何利用STC51单片机读取DS18B20的温度数据并通过LCD进行直观地展示,为用户提供了实时监控环境温度的功能。
  • DS18B20与STM32F103/F407/F767/F743DEMO软件合集.zip
    优质
    本资源包包含DS18B20温度传感器与STM32不同型号(F103、F407、F767、F743)单片机构成的开发演示程序和完整源代码,适合嵌入式系统学习者使用。 DS18B20温度传感器与STM32F103、F407、F767及F743单片机的DEMO软件例程源码合集包括了详细的文档,如《DS18B20.pdf》和《DS18B20与STM32系列开发板引脚连接说明.xlsx》,以及多个开发板的具体配置信息。这些开发板涵盖了F103_MINI、F103_指南者、F103_霸道等型号。 以下是主函数的代码示例: ```c int main(void) { float temperature; uint8_t uc, ucDs18b20Id[ 8 ]; uint8_t DS18B20Id_str[20]; // 配置SysTick定时器为每微秒中断一次 SysTick_Init(); // 初始化LCD显示模块 ILI9341_Init() ILI9341_GramScan(6); // 设置屏幕方向,模式6为默认方向 ILI9341_Clear(0, 0, LCD_X_LENGTH, LCD_Y_LENGTH); // 清屏 LED_GPIO_Config(); USART_Config(); if (DS18B20_Init()) { ILI9341_DispStringLine_EN(LINE(1),no ds18b20 exit); } else { ILI9341_DispStringLine_EN(LINE(1), ds18b20 ok); DS18B20_ReadId (ucDs18b20Id); // 读取DS18B20的序列号 for ( uc = 0; uc < 8; uc++ ) { // 打印DS18B20的序列号 sprintf((char *)&DS18B20Id_str[uc * 2], %.2x, ucDs18b20Id[uc]); } sprintf((char*)dis_buf, DS18B20 serial num: 0x%s, DS18B20Id_str); ILI9341_DispStringLine_EN(LINE(2), dis_buf); while (true) { temperature = DS18B20_GetTemp_MatchRom(ucDs18b20Id); // 获取温度 sprintf((char*)dis_buf, T:%.3f degree Celsius, temperature); ILI9341_DispStringLine_EN(LINE(5), dis_buf); Delay_ms(1000); } } ``` 这段代码初始化了DS18B20温度传感器,并通过LCD显示模块实时更新读取到的温度值。