环境温湿度监控系统(51+DHT11+1602液晶)
使用模块:
DHT11 Datasheet:https://www.alldatasheetcn.com/datasheet-pdf/pdf/1132088/ETC2/DHT11.html
SMC1602 Datasheet: https://www.alldatasheetcn.com/datasheet-pdf/pdf/106031/ETC/SMC1602A.html
89C52 Datasheet: https://www.alldatasheet.com/datasheet-pdf/pdf/240685/ATMEL/AT89C52.html
一.原理图
二.1602显示模块
模块头文件:引脚定义,接口定义。
#ifndef _1602_H_
#define _1602_H_
#include <reg51.h>
#include <intrins.h>
#define LCD_Bus P2 //LCD1602数据总线
sbit RS = P0^7; // LCD数据/命令选择端
sbit RW = P0^6; // LCD读写选择端
sbit EN = P0^5; // LCD使能端,高脉冲有效
sbit busy_led1 = P1^0; //LCD忙指示灯
extern void Lcd_Init(void); //1602初始化函数
extern void Lcd_WriteData(unsigned char Data); //写数据
extern void Lcd_WriteCmd(unsigned char Cmd); //写指令
extern void Lcd_WriteStr(unsigned char *Str); //写一串字符串
#endif
函数实现见GIT仓库
或参考SMC1602 Datasheet
编写。
三.DHT11模块
模块头文件:引脚定义,接口定义。
#ifndef _DHT11_H_
#define _DHT11_H_
#include <reg51.h>
#include <intrins.h>
sbit DHT11_Data = P0^4; //dht11数据端口
sbit NOresponse_led2 = P1^1;
sbit start_led3 = P1^2;
sbit ERRORREVISE_LED4 = P1^3;
sbit test_led5 = P1^4;
sbit ASK_LED6 = P1^5;
sbit rec_byte_led7 = P1^6;
sbit rec_40_led8 = P1^7;
/* DHT11 测量范围 20~90%RH(5%RH) 0~50C(2C) 工作电压3~ 5.5V*/
extern unsigned char rec_dat[16]; //全局变量 用于显示的接收数据数组
extern unsigned char RH,TH;
//extern void DHT11_delay_us(unsigned char us); //11.0592大概每次循环延时4.3us
extern void DHT11_delay_ms(unsigned int ms); //ms延时
extern void DHT11_rec_40(void); //接收40位全部数据
#endif
函数实现见GIT仓库
或参考DHT11 Datasheet
编写。
四.功能模块
主函数
#include <reg51.h>
#include <intrins.h>
#include "1602.h"
#include "DHT11.h"
#define uchar unsigned char
#define uint unsigned int
/*------------按键引脚---------------*/
sbit ok_SW1 = P3^5; //确定-SW1
sbit add_SW2 = P3^4;//增加-SW2
sbit sub_SW3 = P3^3;//减少-SW3
sbit sw_SW4 = P3^2; //选择-SW4
/*------------蜂鸣器引脚---------------*/
sbit bell = P3