基于STM32温湿度监测报警

(仿真+程序+原理图+PCB)

功能介绍

具体功能:

1.DHT11检测温湿度值;

2.LCD1602实时显示温湿度值及温湿度的上限值;

3.温度或湿度超过设定对应上限值,声光报警;

4.按键可以设置温湿度上限值;

添加图片注释,不超过 140 字(可选)

程序

#include <stdlib.h>
#include <string.h>
/***微信公众号:木子单片机****/
#include "main.h"
#include "lcd1602.h"
#include "timer.h"
#include "dht11.h"
#include "beep.h"
#include "key.h"
#include "delay.h"

void SystemClock_Config(void);

uint8_t temp_table[16] = {"T:   c "};
uint8_t humi_table[16] = {"H:   %"};

uint8_t tMax_table[16] = {"     c "};
uint8_t hMax_table[16] = {"     %"};

uint8_t temp_max = 28;
uint8_t humi_max = 68;

DHT11_Data_TypeDef DHT11_Data;

int main(void)
{
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* Configure the system clock */
  SystemClock_Config();
	delay_init(10);               		//初始化延时函数
  TIM3_Init(2400-1, 72-1); // 10ms
	
	Key_Init();
	Beep_Init();
	LCD_Init();
	DHT11_Init();
	
  while(1)
  {
		if(DHT11_Read_TempAndHumidity(&DHT11_Data) == SUCCESS)
		{
			temp_table[3] = DHT11_Data.temp_int / 10 + 0x30;
			temp_table[4] = DHT11_Data.temp_int % 10 + 0x30;
			temp_table[5] = 'c';
			
			humi_table[3] = DHT11_Data.humi_int / 10 + 0x30;
			humi_table[4] = DHT11_Data.humi_int % 10 + 0x30;

			
			tMax_table[3] = temp_max / 10 + 0x30;
			tMax_table[4] = temp_max % 10 + 0x30;
			tMax_table[5] = 'c';

			hMax_table[3] = humi_max / 10 + 0x30;
			hMax_table[4] = humi_max % 10 + 0x30;

			
			LCD_write_string(0,  0, (char*)temp_table);
			LCD_write_string(8,  0, (char*)humi_table);

			LCD_write_string(0,  1, (char*)tMax_table);
			LCD_write_string(8,  1, (char*)hMax_table);
		}
		if(DHT11_Data.temp_int >= temp_max || DHT11_Data.humi_int >= humi_max)
		{
			LED2_ON();
			BEEP_ON();
		}		
		else
		{
			LED2_OF();
			BEEP_OF();
		}		
		delay_ms(500);

  }
}

//定时器3中断服务函数
uint8_t led_temp = 0;
void TIM3_IRQHandler(void)
{		  
	 led_temp++;
	 if(led_temp > 10)
	 {
		 led_temp = 0;
		 LED1_TOG();
	 }
		
   HAL_TIM_IRQHandler(&TIM3_Handler);
}

/**
  * @brief System Clock Configuration
  * @retval None
**/
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

  /** Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
  }
	
	
  /** Initializes the CPU, AHB and APB busses 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_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
  }
	
	
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_ADC;
  PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  {
  }
}

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
********//完整资料
*******//***微信公众号:木子单片机****/
#include "timer.h"


TIM_HandleTypeDef TIM3_Handler;      //定时器句柄 

//通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!
void TIM3_Init(uint16_t arr, uint16_t psc)
{  
	TIM3_Handler.Instance=TIM3;                          //通用定时器3
	TIM3_Handler.Init.Prescaler=psc;                     //分频系数
	TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器
	TIM3_Handler.Init.Period=arr;                        //自动装载值
	TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子
	HAL_TIM_Base_Init(&TIM3_Handler);
	
	HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   
}

//定时器底册驱动,开启时钟,设置中断优先级
//此函数会被HAL_TIM_Base_Init()函数调用
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
  if(htim->Instance==TIM3)
	{
		__HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟
		HAL_NVIC_SetPriority(TIM3_IRQn,1,0);    //设置中断优先级,抢占优先级1,子优先级3
		HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断   
	}
}

硬件设计

使用元器件:

单片机:STM32F103C;

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus8.9版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02原理图

本系统原理图采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

03程序

本设计使用Keil5 MDK版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

04PCB

本系统PCB采用Altium Designer19设计,具体如图!

添加图片注释,不超过 140 字(可选)

05设计资料

全部资料包括仿真源文件 、程序、AD原理图、PCB等。具体内容如下,全网最全! !

添加图片注释,不超过 140 字(可选)

点赞分享一起学习成长。

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐