40 基于单片机的温湿度检测判断系统

news/2024/12/5 18:49:50/

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于STC89C52单片机,采用dht11温湿度传感器检测温湿度,
通过lcd1602显示屏各个参数,四个按键分别可以增加温湿度的阈值,
如果超过阈值,则电机启动打开风扇

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

三、程序编程

#include <REGX52.H>#include<intrins.h>#include<stdio.h>#include "Delay.h"#include "LCD1602.h"#define uchar unsigned char#define uint unsigned  intsbit beep=P3^4;
sbit key1=P3^6; // sbit key2=P3^5; // 减少sbit key3=P1^0; // 增加sbit key4=P1^1; // 增加sbit jdq = P3^3;//继电器sbit Temp\_data=P2^6;  //DHT11unsigned char rec\_dat\_lcd0\[6\];unsigned char rec\_dat\_lcd1\[6\];unsigned char rec\_dat\_lcd2\[6\];unsigned char rec\_dat\_lcd3\[6\];unsigned int rec\_dat\[4\];static uchar wd,sd;static int wdyz=40,sdyz=80;void DHT11\_delay\_us(unsigned char n);void DHT11\_delay\_ms(unsigned int z);void DHT11\_start();unsigned char DHT11\_rec\_byte();void DHT11\_receive();void beep\_warning();void cshq();void xxpxs();void ajjc();//延时msvoid DHT11\_delay_ms(unsigned int z){    unsigned int i,j;    for(i=z; i>0; i--)        for(j=110; j>0; j--);
}//延时us   --2*n+5usvoid DHT11\_delay\_us(unsigned char n){    while(--n);
}//DHT11起始信号void DHT11_start(){Temp\_data=1;    DHT11\_delay_us(10);Temp\_data=0;    DHT11\_delay_ms(50);//这个延时不能过短,18ms以上,实际在仿真当中要想读到数据延时要在延时参数要在40以上才能出数据Temp\_data=1;    DHT11\_delay\_us(30);//这个延时不能过短}//接收一个字节unsigned char DHT11\_rec_byte(){    unsigned char i,dat=0;    for(i=0; i<8; i++){        while(!Temp\_data);        DHT11\_delay_us(8);dat <<=1;        if(Temp_data==1){dat +=1;}        while(Temp_data);}    return dat;
}//接收温湿度数据void DHT11\_receive(){    unsigned int R\_H,R\_L,T\_H,T\_L;    unsigned char RH,RL,TH,TL,revise;    DHT11\_start();Temp\_data=1;    if(Temp\_data==0){        while(Temp_data==0);   //等待拉高DHT11\_delay\_us(40);  //拉高后延时80usR\_H=DHT11\_rec_byte();    //接收湿度高八位R\_L=DHT11\_rec_byte();    //接收湿度低八位T\_H=DHT11\_rec_byte();    //接收温度高八位T\_L=DHT11\_rec_byte();    //接收温度低八位revise=DHT11\_rec\_byte(); //接收校正位DHT11\_delay\_us(25);    //结束if((R\_H+R\_L+T\_H+T\_L)==revise)      //校正{RH=R_H;RL=R_L;TH=T_H;TL=T_L;}        /*数据处理,方便显示*/rec_dat\[0\]=RH;rec_dat\[1\]=RL;rec_dat\[2\]=TH;rec_dat\[3\]=TL;}}void dht11(){	      DHT11\_delay\_ms(150);        DHT11\_receive();	      sprintf(rec\_dat\_lcd0,"%d",rec\_dat\[0\]);        sprintf(rec\_dat\_lcd1,"%d",rec\_dat\[1\]);        sprintf(rec\_dat\_lcd2,"%d",rec\_dat\[2\]);        sprintf(rec\_dat\_lcd3,"%d",rec\_dat\[3\]);        DHT11\_delay_ms(100);wd = rec\_dat\[3\]*10 + rec\_dat\[2\];sd = rec\_dat\[1\]*10 + rec\_dat\[0\];}void beep_warning()//蜂鸣器警报并且电机转动{	if(wd>wdyz){beep = 1;jdq  = 0;}		if(sd>sdyz){beep = 1;jdq  = 0;}  if(wd<=wdyz && sd<=sdyz  )	{beep = 0;jdq  = 1;}
}void main()					  //主函数{	LCD_Init();         //显示屏初始化beep = 0;jdq = 1;	do{		dht11(); //温湿度获取ajjc();   //按键检测xxpxs();  //显示屏显示beep_warning();    //状态判断}  while(1);
}void ajjc()  //按键检测{	if(!key1){wdyz++;		while(!key1);}	if(!key2){wdyz--;		while(!key2);}	if(!key3){sdyz++;		while(!key3);}	if(!key4){sdyz--;		while(!key4);}
}void xxpxs()  //显示屏显示{	LCD_ShowString(1,1,"wd:");	LCD_ShowString(1,8,"sd:");	LCD_ShowNum(1,4,wdyz,3); //LCD_ShowNum(1,11,sdyz,3);//LCD\_ShowString(2,1,"wd:");			LCD\_ShowNum(2,4,wd,3);//LCD_ShowString(2,8,"sd:");	LCD_ShowNum(2,11,sd,3);//}

四、实现现象

具体动态效果看B站演示视频:

B站演示视频

基于单片机的温湿度检测判断系统

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘资料下载https://pan.baidu.com/s/18PGaT3zZnxxZ4rCKRd5m-w?pwd=ue8b


http://www.ppmy.cn/news/1551349.html

相关文章

数据安全与隐私保护:大数据时代的挑战与机遇

数据安全与隐私保护&#xff1a;大数据时代的挑战与机遇 在21世纪的信息化浪潮中&#xff0c;大数据已成为推动社会进步和经济发展的重要力量。它像一座宝藏&#xff0c;蕴含着无限的价值和潜力&#xff0c;为企业决策、科学研究、公共服务等领域提供了前所未有的洞察力。然而…

【docker】安装数据库脚本

mysql5.7 Docker启动mysql7并挂载文件关闭大小写敏感&#xff0c;【docker】安装mysql-CSDN博客 docker run \--name mysql -d -p 3306:3306 \-v /docker/data/mysql/data:/var/lib/mysql \-v /docker/data/mysql/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD密码 \-e TZ…

2024算法基础公选课练习五(DFS2)

一、前言 因为此次题目较多&#xff0c;我也不想分成两篇博客来发&#xff0c;我就直接给代码了&#xff0c;如果题目有需要强调的地方再特殊说明 二、题目总览 三、具体题目 3.1 问题 A: 勘探油田 我的代码 8方向的flood fill模型 #include <bits/stdc.h> using i6…

平安科技Java面试题及参考答案

多个线程 a++,单个线程不管别的线程怎么改变 a 的值,只管自己的 a 的值,但是只有一个对象 在 Java 中,当多个线程对同一个对象的共享变量 a 进行 a++ 操作时,如果不进行适当的同步处理,就会出现数据不一致的问题。因为 a++ 操作并非原子操作,它实际上包含了读取 a 的值、…

OpenAI:2025年ChatGPT将成为“企业大脑”,并向Agent过渡

刚刚OpenAI 的销售总监在接受《The Information》采访时透露了 ChatGPT 的2025年商业化重点——企业级应用&#xff0c;并设定了一个雄心勃勃的目标&#xff1a;到 2029 年实现年收入 1000 亿美元&#xff01; OpenAI销售总监 Giancarlo "GC" Lionetti 认为企业人工智…

8款Pytest插件助力Python自动化测试

当测试用例变得复杂&#xff0c;或者需要处理大量测试数据时&#xff0c;插件通过使测试更加简洁和结构化而变得非常有用。Python凭借其简洁性和多功能性&#xff0c;成为自动化测试的热门选择&#xff0c;而pytest是最广泛使用的测试框架之一。虽然pytest本身功能强大&#xf…

无人机油气领域应用详解!

一、油气田巡检 自动化巡检&#xff1a;无人机能够搭载高清摄像头、红外热像仪等多种传感器&#xff0c;在高空对油气田进行全方位、无死角的监测。这不仅可以快速发现油气井、管道等设备的表面腐蚀、破损、泄露等安全隐患&#xff0c;还能通过数据分析预测潜在风险区域。 精…

图解人工智能:从规则到深度学习的全景解析

&#x1f31f;作者简介&#xff1a;热爱数据分析&#xff0c;学习Python、Stata、SPSS等统计语言的小高同学~&#x1f34a;个人主页&#xff1a;小高要坚强的博客&#x1f353;当前专栏&#xff1a;Python之机器学习&#x1f34e;本文内容&#xff1a;图解人工智能&#xff1a;…