基于STM32F103RCT6的MLX90614体温检测TFT彩屏显示代码
时间: 2023-06-12 12:03:05 浏览: 167
m003STM32F103C8T6加TM1637数码管显示MLX90614红外测温完整 源代码.zip
由于您没有提供具体的需求和环境,下面提供一个基于Keil MDK和STM32CubeMX的示例代码,可以实现读取MLX90614的温度数据,并在TFT彩屏上显示。请根据您的实际情况进行修改和调整。
首先,使用STM32CubeMX配置STM32F103RCT6的GPIO和I2C外设,并使能HAL库。具体步骤如下:
1. 打开STM32CubeMX软件,选择“New Project”新建一个工程。
2. 选择STM32F103RCT6作为芯片型号,并选择对应的库和工具链。
3. 在“Pinout & Configuration”选项卡中配置GPIO和I2C外设。例如,将SCL和SDA引脚分别配置为PB6和PB7,并使能I2C1。
4. 在“Project Manager”选项卡中生成代码并打开Keil MDK。
接下来,根据MLX90614的通信协议,编写读取温度数据的代码。示例代码如下:
```c
#include "main.h"
#include "stdio.h"
#include "stdbool.h"
#define MLX90614_ADDR 0x5A
#define MLX90614_TA 0x06
#define MLX90614_TOBJ1 0x07
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef huart1;
TFT_HandleTypeDef htft;
float readTemp(uint8_t reg);
int main(void)
{
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
MX_TFT_Init();
MX_USART1_UART_Init();
/* Initialize TFT */
TFT_FillScreen(&htft, TFT_BLACK);
TFT_SetFont(&htft, &FreeMonoBold9pt7b, TFT_WHITE);
/* Display temperature readings */
while (true)
{
float ta = readTemp(MLX90614_TA);
float tobj1 = readTemp(MLX90614_TOBJ1);
char buf[32];
sprintf(buf, "TA: %.1f C", ta);
TFT_Text(&htft, buf, 0, 0, TFT_WHITE, TFT_BLACK);
sprintf(buf, "TOBJ1: %.1f C", tobj1);
TFT_Text(&htft, buf, 0, 20, TFT_WHITE, TFT_BLACK);
HAL_Delay(1000);
}
}
float readTemp(uint8_t reg)
{
uint8_t buf[3];
HAL_I2C_Mem_Read(&hi2c1, MLX90614_ADDR, reg, 1, buf, 3, HAL_MAX_DELAY);
int16_t temp = (buf[1] << 8) | buf[0];
return temp * 0.02 - 273.15;
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Supply configuration update enable */
HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
/** Configure the main internal regulator output voltage */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY))
{
}
/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
```
代码中的readTemp函数通过I2C读取MLX90614的温度寄存器,并将读取到的数据转换为温度值。在主函数中,调用readTemp函数读取TA和TOBJ1的温度值,并将其显示在TFT彩屏上。为了简化代码,这里使用了一个死循环来不断读取和显示温度值,实际应用中需要根据具体需求进行修改。
最后,编译并下载代码到STM32F103RCT6上,接上MLX90614和TFT彩屏,即可实现体温检测并在彩屏上显示温度数据。
阅读全文