【Proteus仿真】【32单片机】DHT11温湿度检测系统设计
目录
一、主要功能
二、使用步骤
三、硬件资源
四、软件设计
五、实验现象
联系作者
一、主要功能
1、温湿度检测与LCD显示
2、超过上限,降温除湿模块启动
3、低于下限,升温增湿模块启动
4、温湿度阈值设置
5、超限报警
二、使用步骤
系统运行后,LCD1602显示传感器检测的温湿度值;
当温度或者湿度高于上限,降温除湿模块启动,报警器启动。
若温度或者湿度低于下限,升温增湿模块启动,报警器启动。
三、硬件资源
1、32单片机核心模块
2、按键模块
3、DHT11温湿度传感器模块
4、蜂鸣器模块
5、继电器模块
6、LCD1602显示模块
四、软件设计
//外部中断
void EXTI15_10_IRQHandler(void)
{
delay_ms(50);
if(KEY1 == 0)
{
Set_num++;//设置位增加
TIM_ITConfig( TIM2,TIM_IT_Update,DISABLE );//关闭定时器2
if(Set_num>4)
{
LcdWriteCom(0x0C);//取消光标闪烁
TIM_ITConfig( TIM2,TIM_IT_Update,ENABLE );//打开定时器2
Set_num=0;
}
while(KEY1 == 0);
}
if(KEY2 == 0)
{
if(Set_num==1)//设置温度阈值L
{
if(TL<TH-1)
TL++;
LcdWriteCom(0x80+9); //第一行
LcdWriteData(TL/10+0x30);
LcdWriteData(TL%10+0x30);
LcdWriteCom(0x80+10); //第一行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==2)//设置阈值H
{
if(TH<99)
TH++;
LcdWriteCom(0x80+14); //第一行
LcdWriteData(TH/10+0x30);
LcdWriteData(TH%10+0x30);
LcdWriteCom(0x80+15); //第一行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==3)//设置湿度阈值L
{
if(HL<HH-1)
HL++;
LcdWriteCom(0x80+0x40+9); //第二行
LcdWriteData(HL/10+0x30);
LcdWriteData(HL%10+0x30);
LcdWriteCom(0x80+0x40+10); //第二行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==4)//设置阈值H
{
if(HH<99)
HH++;
LcdWriteCom(0x80+0x40+14); //第二行
LcdWriteData(HH/10+0x30);
LcdWriteData(HH%10+0x30);
LcdWriteCom(0x80+0x40+15); //第二行
LcdWriteCom(0x0f); // 光标闪烁
}
while(KEY2 == 0);
}
if(KEY3 == 0)
{
if(Set_num==1)//设置温度阈值L
{
if(TL>0)
TL--;
LcdWriteCom(0x80+9); //第一行
LcdWriteData(TL/10+0x30);
LcdWriteData(TL%10+0x30);
LcdWriteCom(0x80+10); //第一行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==2)//设置阈值H
{
if(TH>TL+1)
TH--;
LcdWriteCom(0x80+14); //第一行
LcdWriteData(TH/10+0x30);
LcdWriteData(TH%10+0x30);
LcdWriteCom(0x80+15); //第一行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==3)//设置湿度阈值L
{
if(HL>0)
HL--;
LcdWriteCom(0x80+0x40+9); //第二行
LcdWriteData(HL/10+0x30);
LcdWriteData(HL%10+0x30);
LcdWriteCom(0x80+0x40+10); //第二行
LcdWriteCom(0x0f); // 光标闪烁
}
else if(Set_num==4)//设置阈值H
{
if(HH>HL+1)
HH--;
LcdWriteCom(0x80+0x40+14); //第二行
LcdWriteData(HH/10+0x30);
LcdWriteData(HH%10+0x30);
LcdWriteCom(0x80+0x40+15); //第二行
LcdWriteCom(0x0f); // 光标闪烁
}
while(KEY3 == 0);
}
if(EXTI_GetITStatus(EXTI_Line13) != RESET)//判断中断标志线是否13
{
EXTI_ClearITPendingBit(EXTI_Line13); //清除LINE13上的中断标志位
}
if(EXTI_GetITStatus(EXTI_Line14) != RESET)//判断中断标志线是否14
{
EXTI_ClearITPendingBit(EXTI_Line14); //清除LINE14上的中断标志位
}
if(EXTI_GetITStatus(EXTI_Line15) != RESET)//判断中断标志线是否15
{
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE15上的中断标志位
}
}
void display_data(void)///显示
{
LcdWriteCom(0x0C); //取消光标闪烁
LcdWriteCom(0x80+2); //第一行
LcdWriteData(temperature%100/10+0x30);
LcdWriteData(temperature%100%10+0x30);
LcdWriteCom(0x80+0x40+2); //第二行
LcdWriteData(humidity%100/10+0x30);
LcdWriteData(humidity%100%10+0x30);
}
void display_value(void)//显示阈值初始化
{
LcdWriteCom(0x80+9); //第一行
LcdWriteData(TL/10+0x30);
LcdWriteData(TL%10+0x30);
LcdWriteCom(0x80+14); //第一行
LcdWriteData(TH/10+0x30);
LcdWriteData(TH%10+0x30);
LcdWriteCom(0x80+0x40+9); //第二行
LcdWriteData(HL/10+0x30);
LcdWriteData(HL%10+0x30);
LcdWriteCom(0x80+0x40+14); //第二行
LcdWriteData(HH/10+0x30);
LcdWriteData(HH%10+0x30);
}
void Alarm(void)//警报函数
{
if(temperature<=TL||humidity<=HL)//温度过低或湿度过低
{
BEEP=0;
MOT1=0;
MOT2=1;
}
else if(temperature>=TH||humidity>=HH)//温度过高或湿度过大
{
BEEP=0;
MOT1=1;
MOT2=0;
}
else
{
BEEP=1;
MOT1=1;
MOT2=1;
}
}
int main()
{
delay_init(); //延时函数初始化
LCD1602_Init(); //lcd函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
EXTIX_Init();//外部中断初始化
DHT11_Init();
DHT11_Read_Data(&temperature,&humidity);//获取温湿度度
display_value(); //阈值函数初始化
TOOL_Init(); //工具初始化
while(1)
{
DHT11_Read_Data(&temperature,&humidity);//获取温湿度度
switch(Set_num)
{
case 0:display_data();Alarm();//警报函数
break;
case 1:
BEEP=1;MOT1=1;MOT2=1;//设置阈值关闭警报
LcdWriteCom(0x80+10); //第一行
LcdWriteCom(0x0f); // 光标闪烁
break;//温度阈值L
case 2:
LcdWriteCom(0x80+15); //第一行
LcdWriteCom(0x0f); // 光标闪烁
break;//温度阈值H
case 3:
BEEP=1;MOT1=1;MOT2=1;//设置阈值关闭警报
LcdWriteCom(0x80+0x40+10); //第二行
LcdWriteCom(0x0f); // 光标闪烁
break;//湿度阈值L
case 4:
LcdWriteCom(0x80+0x40+15); //第二行
LcdWriteCom(0x0f); // 光标闪烁
break;//湿度阈值H
}
}
}
五、实验现象
B站演示视频:基于32单片机温湿度检测DHT11_哔哩哔哩_bilibili本项目使用Proteus8仿真STM32单片机DHT11温湿度检测系统使用LCD1602液晶、按键、蜂鸣器、升温模块、降温、DHT11传感器等。系统运行后,LCD1602显示传感器检测的温湿度值;当温度或者湿度高于上限,降温除湿模块启动,报警器启动。若温度或者湿度低于下限,升温增湿模块启动,报警器启动。主要功能如下:1、温湿度检测与LCD显示2、超过上限降温除湿模块启动3、低于下限升温增湿模块启动, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 1, 视频作者 单片机设计室, 作者简介 Q:215138327 V:Kinpar 承接51,32单片机设计定做,51,32单片机protues仿真,实物,程序等。,相关视频:歼10C真的有听风的蚕讲得那么强吗?有一些细节之处需要补充,重型机械 | 世界上最令人惊叹的 60 台重型机械,航天飞机运输过程曝光,“大飞机”驮“小飞机”,这是什么操作?,采用全自动装弹机,七对轮底盘颜值爆表,05B型自行榴弹炮登场!,要回家了,最后带大家看看这1800转场,成飞公布垂直起降战机专利,垂直起降版歼35就要来了?,一口气下水5艘052DM,我国已有10艘055,为何仍大量造052D?,即使有图纸也做不出来,B2轰炸机为何难以仿制?B2制造难点在哪?,迷你快递里有“压缩手机!指甲盖一样大还能打游戏,为啥被偷了,运-20在南非举行的非洲航空航天展上展出
联系作者
作者B站链接:https://space.bilibili.com/3493294220773802
专注于51单片机、STM32、Proteus、物联网软件开发,PCB设计。
作者:qq_215138327