基于STM32单片机的大棚温度测控系统
功能:
1.通过LCD屏幕显示温湿度值和上限阈值
2.通过按键完成阈值加减功能
3.通过DHT11完成温湿度采集
4.若实时数据不满足条件,则进行降温或者除湿操作
一、原理图
二、部分代码
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd1602.h"
#include "key.h"
#include "dht11.h"
#include "stdio.h"
#define BEEP_ON GPIO_ResetBits(GPIOA, GPIO_Pin_6)
#define BEEP_OFF GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define RELAY_ON GPIO_SetBits(GPIOA, GPIO_Pin_7)
#define RELAY_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_7)
#define LED_ON GPIO_SetBits(GPIOA, GPIO_Pin_8)
#define LED_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_8)
unsigned int Temp_L = 30;
unsigned int Hum_L = 60;
unsigned int key_value;
unsigned char buffer1[15];
unsigned char buffer2[15];
DHT11_Data_TypeDef DHT11_Data;
void BEEP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
BEEP_OFF;
}
void Relay_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RELAY_OFF;
}
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
LED_OFF;
}
int main(void)
{
LED_Init();
LCD_init();
BEEP_Init();
KEY_Init();
BEEP_Init();
Relay_Init();
DHT11_Init();
while(1)
{
DHT11_Read_TempAndHumidity(&DHT11_Data);
sprintf((char*)buffer1, "Hum:%d%% Temp:%dC", DHT11_Data.humi_int, DHT11_Data.temp_int );
LCD_write_string(0, 0, (char*)buffer1);
sprintf((char*)buffer2, "H_L:%d%% T_L:%dC", Hum_L, Temp_L);
LCD_write_string(0, 1, (char*)buffer2);
key_value = KEY_Scan(0);
if(key_value == 1)
{
Hum_L++;
}
else if(key_value == 2)
{
Hum_L--;
}
else if(key_value == 3)
{
Temp_L++;
}
else if(key_value == 4)
{
Temp_L--;
}
if(DHT11_Data.humi_int >= Hum_L || DHT11_Data.temp_int >= Temp_L)
{
BEEP_ON;
}
else
{
BEEP_OFF;
}
if(DHT11_Data.temp_int >= Temp_L)
{
RELAY_ON;
}
else
{
RELAY_OFF;
}
if(DHT11_Data.humi_int >= Hum_L)
{
LED_ON;
}
else
{
LED_OFF;
}
}
}