单片机温湿度传感器 51单片机实现温湿度传感器实时监控并LCD显示的解决方案
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);
}
}
使用8位单片机设计温湿度测量电路
当设计一个测量温湿度电路时,使用8位单片机是一种常见的选择。下面是一个概述电路组成部分的简单示例:
MCU(Microcontroller Unit):选择一个适合的8位单片机,如ATmega系列或PIC系列。MCU将负责读取温湿度传感器的数据,执行控制算法,并根据需要控制执行设备(如风扇、加热器等)。温湿度传感器:选择合适的温湿度传感器,如DHT11、DHT22或SHT系列传感器。这些传感器可以提供准确的温度和湿度测量值。显示器:在电路中添加一个LCD显示屏或OLED显示器,用于显示当前的温湿度数值和其他相关信息。控制执行设备:根据你的需求,可以选择添加风扇、加热器或其他执行设备。MCU通过控制IO口或外围接口来控制这些设备的开关状态,以维持目标温湿度。用户界面:如果需要用户交互,可以添加按钮、旋钮或触摸屏作为用户输入设备,以便用户可以设置目标温湿度或进行其他操作。电源管理:确保为单片机和其他组件提供稳定的电源,可以使用稳压器、电池或其他电源管理模块来实现。连接与通信:如果需要将温湿度数据传输到外部设备或平台,可以添加串口、无线模块(如Wi-Fi或蓝牙)或其他通信接口。以上是一个基本的电路设计框架。具体实现方法取决于你的需求和硬件平台选择。在设计过程中,请确保参考相关的数据手册、技术规范和电气安全标准,以确保电路的正常工作和安全性。
请注意,对于确保温湿度的精确性和准确性,可能需要进行校准和校验。此外,为了适应不同环境和使用场景,可能需要对算法进行优化和调整。
相关问答
DHT11 温湿度传感器 怎样给 单片机 传输数据?DHT11是一个温湿度传感器,根据DHT11的引脚图,将DHT11数据线DATA接到单片机的IO口,并将DHT11的电源供电3.3-5V,地线与单片机共地,NC脚悬空。然后软件部分,...
am2301 温湿度传感器 原理?回答如下:AM2301温湿度传感器是一种数字式温湿度传感器。它通过集成数字信号输出技术,将温湿度信号转化为数字信号输出。其原理如下:1.温度测量原理:AM2301...
温湿度传感器 接线的方法是怎样的?_住范儿家装官网从总体角度来说这个设计主要涉及有温度、湿度的测量,显示以及简单的控制。分为三个部分,即AT89C51单片机为主控部分、SHT11温湿度传感器部分、LCD16...
求基于AT89C51 单片机 和DS18B20温度传感器和HS1101 湿度传感器 ...[最佳回答]A_BITEQU20HB_BITEQU21HFLAGEQU38HDQEQUP3.3MAIN:ACALLRE_TEMPACALLTURNACALLDISPLAYJM...
dht11 温湿度传感器 电路原理是什么?_土巴兔装修问答声表面波湿敏元件等。湿敏元件的线性度及抗污染性差,在检测环境湿度时,湿敏元件要长期暴露在待测环境中,很容易被污染而影响其测量精度及长期稳定性...
温湿度 监测仪的用途?[回答]传感“漏点”的湿度感测器则应用在轿车的全自动防雾水、空调通风设备内的避免起霜系统软件。感应器是智能产品、物联网技术甚至人工智能技术等行业...
单片机 智能家居需要哪些配件?智能家居需要若干传感器(温湿度传感器、红外线传感器、烟雾传感器、有害气体传感器等)、智能开关、照明设备、智能门锁、电动窗帘、卫浴马桶、厨房电器、扫地...
一体化 温湿度传感器 是什么- 一起装修网一起装修网问答平台为您提供一体化温湿度传感器是什么的相关答案,并为您推荐了关于一体化温湿度传感器是什么的相关问题,一起装修网问答平台:装修问题,因我而止...
老师们!求指教:高精度 温湿度 控制器多少钱, 温湿度 控制器如何...[回答]温控仪通过温度传感器对环境温度自动进行采样、即时监控,当环境温度高于控制设定值时控制电路启动,可以设置控制回差。如温度还在升,当升到设定的超...
单片机 一般配合什么使用?单片机一般配合各种外围设备和模块使用,以实现特定的功能。常见的配合使用的外围设备有显示器、键盘、鼠标等输入输出设备,用于与用户进行交互;还有各种传感器...