实现功能:

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;

}

}

}

资料内容:

需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

基于51单片机的温度湿度采集系统相关推荐

  1. 51单片机TTS温度湿度语音播报系统 DHT11 LCD1602

    实践制作DIY- GC0049-TS温度湿度语音播报系统 一.功能说明: 基于51单片机设计-TS温度湿度语音播报系统 功能介绍: 1.STC89C52单片机(STC89C51/52 AT89C51/ ...

  2. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc

    基于51单片机ds18b20温度检测----设计报告 课程名称: 微机原理课程设计 题 目: 温度检测课程设计 摘要 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为 ...

  3. 基于51单片机1602温度显示时钟

    基于51单片机LCD1602温度显示时钟 要在1602上显示时间和温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 :时间显示可以用时钟芯片DS1302,但是此次我 ...

  4. 基于51单片机的温度报警系统(程序分装)

    文章目录 目录 前言 一.程序结构 1.1.1 全局变量 1.1.2 静态本地变量 1.2 预处理命令 1.3.1 函数原型 1.3.2 头文件 标准头文件结构. 1.4  *声明和定义* 二.错误示 ...

  5. 基于51单片机的温度检测报警系统

    目录 具体实现功能 设计背景 硬件设计 软件设计 原理图 程序 仿真实现 全部资料 具体实现功能 系统由STC89C51单片机+液晶1602显示+DS18B20温度传感器+按键模块+报警模块构成. 具 ...

  6. 基于51单片机多路温度检测proteus仿真 ds18b20

    本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0042 ...

  7. 基于51单片机的温度报警系统

    目录 前言 一.温控系统是什么? 二.设计目的 1.环境需求 2.设计基础 三.设计 1.C51程序设计 2.Proteus仿真 (1).元器件如下 (2).原理图. 总结 前言 微型计算器自20世纪 ...

  8. 基于51单片机LCD1602温度显示(DS18B20测温)

    基于51单片机DS18B20测温 要在1602上显示温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 DS18B20是美国DALLAS半导体公司推出的第一片支持&q ...

  9. 基于51单片机的温度采集与报警系统】

    引言 单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将设计一种基于单片机控制的温度器,本温度计属于多功能温度计,可以利用温度传感器对环境温度进行监测和显示,可以通 ...

最新文章

  1. 论文|记忆网络之Memory Networks
  2. Quicker--文件搜索工具介绍
  3. 高性能自旋锁 MCS Spinlock 的设计与实现(来自IBM)
  4. linux每日命令(1):which
  5. C ++中的初始化程序列表– std :: initializer_list
  6. 基于HyperVID数据集训练自己的车型识别系统
  7. WS2812B全彩灯板
  8. android 滚动条 惯性,Android ScrollView取消惯性滚动的方法
  9. 推荐Arduino更深入学习:《新概念51单片机C语言教程》-郭天祥(文章内含学习资料供下载)
  10. 颈椎前路caspar撑开器_Caspar撑开器和颈椎带锁钢板治疗下颈椎骨折脱位
  11. OV7670 FIFO 30W摄像头介绍(三) --- STM32F103驱动OV7670代码介绍
  12. [游泳] 游泳学习课程
  13. 手把手教你制作炫酷的PCB板3D效果图
  14. 字典(python学习)
  15. 入门学习Linux常用必会命令实例详解
  16. Word——图表如何交叉引用-插入题注-交叉引用
  17. xshell6、Xshell7最新版使用
  18. 嵌入式系统的数据结构与算法
  19. 水表读数图解_水表读数怎么正确看 水表怎么读?
  20. 从零开始编写一个上位机(串口助手)QT Creator + Python

热门文章

  1. 虚假宣传!和基外汇伪造保险信息七大铁证!
  2. qq解冻显示服务器开小差了是什么意思,腾讯内容开放平台
  3. 基于AD Event日志实时检测GPO后门
  4. “独立站+私域”的DTC直客模式电商,是告别互联网内卷唯一有效方式
  5. 神经网络neural network
  6. 机器学习平台系列——XGB feature_names mismatch 问题解决方案
  7. 大物笔记(顺便记记)
  8. Charles的基本使用及教程
  9. java【猴子吃桃问题】
  10. 中国哪里的大米最好吃?这几个地区最出名,网友为此吵翻了