51单片机实现温湿度传感器实时监控并LCD显示的解决方案
简介:
51单片机STC89C52RC是本方案的选用芯片,以其8位处理和极低的价格来看,是很适合进行本次实验。LCD显示屏本次选用的型号是1602A。
在实现51单片机实现温湿度传感器实时监控并LCD显示的基础功能后,还可以通过单片机的串口通信和WIFI模块或者Zigbee模块进行物联网连接,使设备连接互联网,再通过TCP连接进行物联网的一整套方案,包括手机APP实时监控数据,也可以是手机APP远程开启风扇来调节温度或者湿度,但这些不在本次方案中细说,本人已经实现上述功能,只是技术不完善,所以不在此公布。
Protues8仿真图:
51单片机完整程序(代码很长,但是完整,可以直接复制使用):
//****************************************************************//
//
//
//
//
//
//****************************************************************//
#include <reg52.h>
#include <intrins.h>
#include <lcd.c>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//
typedef unsigned char U8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef signed char S8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
typedef unsigned int U16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
typedef signed int S16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedef unsigned long U32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
typedef signed long S32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
typedef float F32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
typedef double F64; /* double precision floating point variable (64bits) 双精度浮点数(64位长度) */
//
#define uchar unsigned char
#define uint unsigned int
#define Data_0_time 4
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit P2_0 = P2^0 ;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数
U8 indata[5];
U8 count, count_r=0;
U8 str[5]={"RS232"};
U16 U16temp1,U16temp2;
U8 a[]={"Temperature: "};
U8 b[]={"Humidity: "};
U8 wd_sw,wd_gw,sd_sw,sd_gw;
void Delay(U16 j)
{
U8 i;
for(;j>0;j--)
{
for(i=0;i<27;i++);
}
}
void Delay_10us(void)
{
U8 i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void COM(void)
{
U8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!P2_0)&&U8FLAG++);
Delay_10us();
Delay_10us();
Delay_10us();
U8temp=0;
if(P2_0)U8temp=1;
U8FLAG=2;
while((P2_0)&&U8FLAG++);
//超时则跳出for循环
if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1
U8comdata<<=1;
U8comdata|=U8temp; //0
}//rof
}
//--------------------------------
//-----湿度读取子程序 ------------
//--------------------------------
//----以下变量均为全局变量--------
//----温度高8位== U8T_data_H------
//----温度低8位== U8T_data_L------
//----湿度高8位== U8RH_data_H-----
//----湿度低8位== U8RH_data_L-----
//----校验 8位 == U8checkdata-----
//----调用相关子程序如下----------
//---- Delay();, Delay_10us();,COM();
//--------------------------------
void RH(void)
{
//主机拉低18ms
P2_0=0;
Delay(180);
P2_0=1;
//总线由上拉电阻拉高 主机延时20us
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
//主机设为输入 判断从机响应信号
P2_0=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!P2_0) //T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!P2_0)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((P2_0)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P2_0=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
void main()
{
U8 i,j;
LcdInit();
Delay(1); //延时100US(12M晶振)
while(1)
{
RH();//调用温湿度读取子程序
str[0]=U8T_data_H;
str[1]=U8T_data_L;
str[2]=U8RH_data_H;
str[3]=U8RH_data_L;
str[4]=U8checkdata;
wd_sw=U8T_data_H/10%10+0x30;
wd_gw=U8T_data_H%10+0x30;
sd_sw=U8RH_data_H/10%10+0x30;
sd_gw=U8RH_data_H%10+0x30;
a[12]=wd_sw;
a[13]=wd_gw;
a[14]=0xdf;
a[15]='C';
a[16]='\0';
LcdWriteCom(0x00+0x80);
for(i=0;i<16;i++)
{
LcdWriteData(a[i]);
}
b[9]=sd_sw;
b[10]=sd_gw;
b[11]='\%';
b[12]='\0';
LcdWriteCom(0x42+0x80);
for(i=0;i<12;i++)
{
LcdWriteData(b[i]);
}
//读取模块数据周期不易小于 2S
Delay(30000);
}
}
基于STM32单片机大棚温湿度检测无线蓝牙APP控制设计
1、功能
毕业设计的任务是基于STM32单片机,结合风扇控制电路、温湿度传感器电路、1602液晶显示电路和蓝牙模块电路,设计一套大棚环境参数监测系统。此系统旨在实时监测大棚内的温湿度情况,通过蓝牙技术将数据传输到手机APP上,并实现远程控制风扇的开启和关闭。
以下是该设计的详细功能描述:
温湿度检测及实时显示: 通过STM32单片机与温湿度传感器电路的协同工作,实时获取大棚内的温度和湿度数据。这一功能对STM32的模拟信号输入、传感器数据采集、数据处理等方面进行了考察。通过1602液晶显示电路,将实时的温湿度数据以易读的方式展示在液晶屏上,进一步锻炼了嵌入式系统的数据显示与处理能力。
湿度异常报警功能: 当监测到大棚内湿度超过设定阈值(75%)时,系统将通过蓝牙模块电路发送报警信息到手机APP。这部分功能考察了STM32的条件判断、蓝牙通信协议的使用以及异常处理等方面的知识。
手机APP远程控制风扇: 通过手机APP发送指令,用户可以远程控制大棚内的风扇。当接收到指令“O”时,系统启动风扇;而接收到指令“C”时,系统则关闭风扇。这一功能要求在STM32单片机中实现蓝牙指令的解析和对应风扇控制的动作,涉及到串口通信、状态机设计、以及对外部设备的控制等知识点。
电源电路设计: 为了保证整个系统的稳定运行,需要合理设计电源电路,以满足各个模块的电源需求。这一部分任务考察了对电源管理的理解,包括电源稳定性、功耗优化、电源保护等方面的知识。
2、源代码
3、原理图
4、PCB
5、赠送的资料
6、资料下载链接
关注后发送资料下载链接
相关问答
温湿度传感器 接线方式是怎样的_住范儿家装官网传感器接线方式介绍对于许多客户在传感器/变送器的接线问题上都很纠结,担心接错以后,会导致传感器/变送器损坏,影响测量的准确性。本篇文章介绍就...
湿度 检测仪多少钱?[回答]电容传感器湿度传感器是湿度传感器中常见的一种仪器设备,它是以高分子材料湿度湿敏电力电容器为基础感湿元器件,运用单片机设计对测量結果开展剖析...
温湿度传感器 接线的方法是怎样的?_土巴兔装修问答温湿度传感器接线方式:温湿度传感器是和单片机连接的,它们采集的数据都是先传给单片机,再由单片机控制传给电脑的,单片机与电脑之间的数据传输需要...
RS485 温湿度传感器 多少钱?RS485温湿度传感器好不好?RS485温...RS485温湿度传感器怎么用?主板盈通盈通RS485讨论回答(9)RS-485传输的温湿度传感器可以方便的组件成监测系统,传输距离能达到1200米,距离长。LTM8901DC就...
温湿度传感器 接线方式是怎样的- 一起装修网一起装修网问答平台为您提供温湿度传感器接线方式是怎样的的相关答案,并为您推荐了关于温湿度传感器接线方式是怎样的的相关问题,一起装修网问答平台:装修问题...
dht11 传感器 由哪几部分组成?DHT11传感器由一个温湿度传感器元件、一个信号调理电路和一个8位单片机芯片组成。温湿度传感器元件主要用于检测环境的温度和湿度信息,信号调理电路则负责对传...
什么品牌的 单片机 开发板比较好?软件简介:KeilMDKuVision4是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,C语言在功能上...
孵化场的电脑温度控制器是由什么组成的?温湿度控制器以先进的单片机为控制核心,采用进口高性能温湿度传感器,可同时对温度、湿度信号进行测量控制,并实现液晶数字显示,还可通过按键对温、湿度分别进...
th500 温湿度 控制器价格是多少?_土巴兔装修问答¥5000.0本仪表以先进的单片机为控制核心,采用进口高性能温湿度传感器,可同时对温度、湿度信号进行测量控制,并实现液晶数字显示,还可通过按键对温...
正泰 温湿度 控制器原理是什么?_住范儿家装官网主要功能编辑1、正常工作时,流入保护器的电流不超过0.1mA,不影响CT正常工作。2、当A(或B、C),N两端电压超过150V时,BT-CTB短接A(或B、C)与N。3、...