加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的温度湿度采集系统

09/06 10:47
1031
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

实现功能:

1、对温度、湿度进行采集
2、可以警报提示、修改温度、湿度上下限值
3、lcd显示相关信息

原理图

部分程序:

#include <reg52.h>

#define uint unsigned int

#define uchar unsigned char

#include <intrins.h>

typedef bit BOOL  ;

sbit io = P1^1 ;//(口线定义)

sbit bee=P1^0;

sbit rs = P2^5 ;

sbit rw = P2^6 ;

sbit ep = P2^7 ;

bit flag_300ms ;

sbit K1=P1^2;

sbit K2=P1^3;

sbit K3=P1^4;

uchar yemian=0;//(定义变量)

uchar flat=1;

uchar data_byte;

uchar RH,RL,TH,TL;

uchar WenDu,ShiDu;//报警的温度和湿度

#include "eeprom52.h"

/****************************延时程序****************************/

void delay(uchar ms)

{       // 延时子程序

uchar i ;

while(ms--)

{

for(i = 0 ; i<250;i++) ;

}

}

void delay1()//延时10us

{

uchar i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void longdelay(uchar s) //长延时

{

while(s--)

{

delay(20) ;

}

}

/******************把数据保存到单片机内部eeprom中******************/

void write_eeprom()

{

SectorErase(0x2000);

byte_write(0x2000, WenDu);

byte_write(0x2001, ShiDu);

byte_write(0x2060, a_a);

}

/******************把数据从单片机内部eeprom中读出来*****************/

void read_eeprom()

{

WenDu   = byte_read(0x2000);

ShiDu = byte_read(0x2001);

a_a      = byte_read(0x2060);

}

/**************开机自检eeprom初始化*****************/

void init_eeprom()

{

read_eeprom();               //先读

if(a_a != 2)               //新的单片机初始单片机内问eeprom

{

WenDu   = 30;

ShiDu   = 80;

a_a = 2;

write_eeprom();

}

}

/********************报警程序部分*******************/

void warn()  //报警函数

{

if(TH>=WenDu)  //检测的温度高于设定温度报警值

{

bee=0; //报警

}

if(RH>=ShiDu)  //检测的湿度高于设定的湿度值

{

bee=0; //报警

}

if( TH<WenDu  &&  RH<ShiDu )

{

bee=1; //停止报警

}

}

/************************LCD模块******************************************/

BOOL lcd_bz()//测试LCD忙碌状态

{

BOOL result ;

rs = 0 ;

rw = 1 ;

ep = 1 ;

result = (BOOL)(P0 & 0x80) ;

ep = 0 ;

return result ;

}

void write_cmd(uchar cmd)// 写指令

{

while(lcd_bz()) ;

rs = 0 ;

rw = 0 ;

ep = 0 ;

P0 = cmd ;

ep = 1 ;

ep = 0 ;

}

void write_addr(uchar addr)//写地址

{

write_cmd(addr|0x80) ;

}

void write_byte(uchar dat)//写字节

{

while(lcd_bz()) ;

rs = 1 ;

rw = 0 ;

ep = 0 ;

P0 = dat ;

ep = 1 ;

ep = 0 ;

}

void lcd_init()// 初始化

{

write_cmd(0x38) ;

delay(1);

write_cmd(0x08) ;

delay(1);

write_cmd(0x01) ;

delay(1);

write_cmd(0x06) ;

delay(1);

write_cmd(0x0c) ;

delay(1);

}

void display(uchar addr, uchar q)//在某一地址上显示一字节

{

delay(1) ;

write_addr(addr) ;

write_byte(q) ;

delay(1) ;

}

/*********************** DHT11测试模块***************************************/

void start()//开始信号

{

io=1;

delay1();

io=0;

delay(20);//>18ms

io=1;

delay1();//20-40us

delay1();

delay1();

delay1();

delay1();

}

uchar receive_byte()//接收一个字节

{

uchar i,temp,count;

for(i=0;i<8;i++)

{

temp=0;

delay1();delay1();delay1();delay1();

if(io==1)temp=1;

count=2;

while((io)&&count++);

if(count==1)break;

data_byte<<=1;

data_byte|=temp;

}

return data_byte;

}

void receive()//接收数据

{

uchar T_H,T_L,R_H,R_L,check,num_check;

uchar count;

start();//开始信号

io=1;

if(!io)//读取DHT11响应信号

{

while((io)&&count++);

R_H=receive_byte();

R_L=receive_byte();

T_H=receive_byte();

T_L=receive_byte();

check=receive_byte();

io=0;//拉低延时50us

delay1();delay1();delay1();delay1();delay1();

io=1;

num_check=R_H+R_L+T_H+T_L;

if(num_check=check)

{

RH=R_H;

RL=R_L;

TH=T_H;

TL=T_L;

check=num_check;

}

}

}

 

  • 有需要资料的可了解一下.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
HFBR-1414MZ 1 Foxconn Transmitter, 792nm Min, 865nm Max, 160Mbps, ST Connector, DIP, Panel Mount, Through Hole Mount, ROHS COMPLIANT PACKAGE
$26.38 查看
KSZ8863FLL 1 Microchip Technology Inc DATACOM, LAN SWITCHING CIRCUIT, PQFP48
$5.57 查看
H11L1SM 1 Intersil Corporation H11L1SM
$1.12 查看

相关推荐

电子产业图谱