基于51单片机的温湿度系统
时间: 2023-07-26 12:52:17 浏览: 65
好的,您想了解基于51单片机的温湿度系统,这个系统主要由51单片机、温湿度传感器、LCD显示屏、以及其他相关的电子元器件组成。系统的主要功能是通过温湿度传感器采集环境温度和湿度数据,然后将数据通过51单片机进行处理和存储,并最终通过LCD显示屏进行展示。同时,该系统还可以根据设定的温湿度阈值进行报警提示。
相关问题
基于51单片机温湿度系统的硬件电路原理描述
基于51单片机的温湿度检测系统的硬件电路主要包括传感器模块、单片机模块以及显示模块。
传感器模块:传感器模块主要包括温度传感器和湿度传感器。温度传感器一般采用DS18B20,湿度传感器一般采用DHT11。这两种传感器的输出信号都是数字信号,可以直接与单片机通信。因此,传感器模块的主要作用是将温湿度信息转换为数字信号,并将其传送给单片机模块。
单片机模块:单片机模块主要包括51单片机、电源模块、数据存储模块以及通信模块。51单片机是整个系统的核心,它负责接收传感器模块传来的温湿度信息,并进行数据处理和控制。电源模块负责为整个系统提供稳定的电源。数据存储模块负责将采集到的温湿度信息保存到存储器中,以备后续使用。通信模块负责将采集到的温湿度信息通过串口或无线方式发送给上位机或其他设备。
显示模块:显示模块主要包括LCD液晶显示屏和LED指示灯。LCD液晶显示屏可以显示当前温湿度信息和系统状态信息,LED指示灯则可以指示系统的运行状态和故障信息。
总之,基于51单片机的温湿度检测系统的硬件电路主要包括传感器模块、单片机模块以及显示模块,通过它们的协调工作,可以实现对环境温湿度的实时监测,并将监测到的数据传输到上位机或其他设备。
基于51单片机温湿度系统的软件设计流程及程序代码
基于51单片机的温湿度系统软件设计流程及程序代码如下:
1. 硬件设计:通过传感器采集温湿度数据,通过51单片机将采集到的数据进行处理并显示在LCD显示屏上。
2. 软件设计流程:
(1)初始化:通过51单片机初始化各个寄存器及外设,包括串口、LCD显示屏等。
(2)温湿度采集:通过传感器采集温湿度数据,并将数据通过51单片机进行处理。
(3)数据处理:对采集到的温湿度数据进行处理,包括数据转换、校准等。
(4)数据显示:将处理后的温湿度数据显示在LCD显示屏上。
(5)数据传输:将采集到的温湿度数据通过串口传输给上位机进行处理。
3. 程序代码:
```c
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DHT11=P2^2; //DHT11数据线接P2.2口
uchar code table[]="Temp: 00 C, Humi: 00%"; //显示温湿度的字符串
uchar humi,tem; //存储温湿度的变量
void delay_us(uint us) //延时函数,us为延时时间
{
while(us--);
}
void delay_ms(uint ms) //延时函数,ms为延时时间
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void start_dht11(void) //开始信号
{
DHT11=1;
delay_us(5);
DHT11=0;
delay_ms(20);
DHT11=1;
}
uchar dht11_receive_bit(void) //接收一个位的数据
{
uchar i=0;
while(!DHT11 && i<200)
{
delay_us(1);
i++;
}
i=0;
while(DHT11 && i<200)
{
delay_us(1);
i++;
}
if(i>50)
return 1;
else
return 0;
}
uchar dht11_receive_byte(void) //接收一个字节的数据
{
uchar i,dat=0;
for(i=0;i<8;i++)
{
dat<<=1;
dat|=dht11_receive_bit();
}
return dat;
}
void dht11_receive_data(void) //接收温湿度数据
{
uchar humi_h,humi_l,tem_h,tem_l,check;
start_dht11(); //发送开始信号
if(!DHT11) //等待DHT11响应
{
while(!DHT11);
while(DHT11);
humi_h=dht11_receive_byte(); //接收湿度高位
humi_l=dht11_receive_byte(); //接收湿度低位
tem_h=dht11_receive_byte(); //接收温度高位
tem_l=dht11_receive_byte(); //接收温度低位
check=dht11_receive_byte(); //接收校验位
if(check==humi_h+humi_l+tem_h+tem_l) //校验
{
humi=humi_h;
tem=tem_h;
}
}
}
void lcd1602_wcmd(uchar cmd) //写指令到LCD1602
{
P0=cmd;
RS=0;
RW=0;
EN=1;
delay_us(5);
EN=0;
delay_ms(3);
}
void lcd1602_wdat(uchar dat) //写数据到LCD1602
{
P0=dat;
RS=1;
RW=0;
EN=1;
delay_us(5);
EN=0;
delay_ms(3);
}
void lcd1602_init(void) //LCD1602初始化
{
lcd1602_wcmd(0x38);
lcd1602_wcmd(0x0c);
lcd1602_wcmd(0x06);
lcd1602_wcmd(0x01);
}
void lcd1602_disp_str(uchar x,uchar y,uchar *s) //LCD1602显示字符串
{
uchar i;
if(y==0)
{
lcd1602_wcmd(0x80+x);
}
else
{
lcd1602_wcmd(0xc0+x);
}
for(i=0;s[i]!='\0';i++)
{
lcd1602_wdat(s[i]);
}
}
void main(void)
{
TMOD=0x20; //定时器设置
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
lcd1602_init(); //LCD1602初始化
while(1)
{
dht11_receive_data(); //接收温湿度数据
table[6]=tem/10+'0'; //更新温度值
table[7]=tem%10+'0'; //更新温度值
table[15]=humi/10+'0'; //更新湿度值
table[16]=humi%10+'0'; //更新湿度值
lcd1602_disp_str(0,0,table); //在LCD1602上显示温湿度
}
}
```
以上是基于51单片机温湿度系统的软件设计流程及程序代码,希望对你有所帮助。