标题:
单片机DHT11+AT24C02湿度控制电风扇报警程序
[打印本页]
作者:
mengyuan
时间:
2019-1-22 11:33
标题:
单片机DHT11+AT24C02湿度控制电风扇报警程序
花了几个小时做了一个湿度报警,做了一个湿度报警现在分享给大家.引脚定义,已经存在制作前阅读里面了
编写环境Keil5
引脚定义
湿度计引脚定义
蜂鸣器 P2^0
LED报警灯 P1^6
风扇 P1^5
按键1 P3^4
按键2 P3^5
Dht11数据线 P1^7
AT24C02:
SCL P1^0
SDA P1^1
LCD1602
E P2^7
RW P2^6
RS P2^5
数据线 P0
编写时间2019.1.22
湿度上限+AT24C02+蜂鸣器+风扇+LCD1602
单片机源程序如下:
#include <reg52.h>
#include "1602.h"
#include "dht.h"
#include "2402.h"
sbit speaker=P2^0;
//定义LED灯
sbit Led_qushi=P1^6; //去湿灯
sbit fan=P1^5;
sbit Key_HH1 = P3^4;
sbit Key_HH2 = P3^5;
//定义标识
volatile bit FlagStartRH = 0; //开始温湿度转换标志
volatile bit FlagKeyPress = 0; //有键按下
//定义温湿度传感器用外部变量
extern U8 U8FLAG,k;
extern U8 U8count,U8temp;
extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
extern U8 U8comdata;
extern U8 count, count_r;
U16 temp;
S16 humidity;
S16 idata HH; //湿度上限
char * pSave;
//定义变量
U16 RHCounter;
//数据初始化
void Data_Init() {
RHCounter = 0;
Led_qushi = 1;
HH = 85;
}
//定时器0初始化
void Timer0_Init() {
ET0 = 1; //允许定时器0中断
TMOD = 1; //定时器工作方式选择
TL0 = 0x06;
TH0 = 0xf8; //定时器赋予初值
TR0 = 1; //启动定时器
}
//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0 {
TL0 = 0x06;
TH0 = 0xf8; //定时器赋予初值
//每2秒钟启动一次温湿度转换
RHCounter ++;
if (RHCounter >= 1000) {
FlagStartRH = 1;
RHCounter = 0;
}
}
//存入设定值、
void Save_Setting() {
pSave = (char *)&HH;
wrteeprom(2, *pSave); //存湿度上限值RH低8位
DELAY(500);
pSave ++;
wrteeprom(3, *pSave); //存湿度上限值RH高8位
DELAY(500);
}
//载入设定值、
void Load_Setting() {
pSave = (char *)&HH;
*pSave++ = rdeeprom(2);
*pSave = rdeeprom(3);
if ((HH>99)||(HH<0)) HH = 99;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
***********************************************************************/
void main() {
U16 i, j, testnum;
EA = 0;
Timer0_Init(); //定时器0初始化
Data_Init();
EA = 1;
L1602_init();
// L1602_string(1,1," Welcome to H ");
//延时
for (i=0; i<500; i++)
for (j=0; j<1000; j++)
{;}
//清屏
L1602_string(1,1,"Sd: % H: % ");
//载入湿度上限设定值
Load_Setting();
L1602_char(1, 13, HH/10+48);
L1602_char(1, 14, HH%10+48);
while(1) {
//温湿度转换标志检查
if (FlagStartRH == 1) { //定时器
TR0 = 0;
testnum = RH();
FlagStartRH = 0;
//读出湿度,只取整数部分
TR0 = 1;
humidity = U8RH_data_H;
//显示湿度
L1602_int(1,2,humidity);
}
if (!Key_HH1) { //上下限处理
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
if (!Key_HH1) {
if(HH>0)
HH--;
else HH=0;
L1602_char(1, 13, HH/10+48);
L1602_char(1, 14, HH%10+48);
Save_Setting();
}
}
if (!Key_HH2) {
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
DELAY(5000);
if (!Key_HH2) {
if(HH>99)
HH=99;
else HH++;
L1602_char(1, 13, HH/10+48);
L1602_char(1, 14, HH%10+48);
Save_Setting();
}
}
if (humidity > HH) {
fan=0;
Led_qushi = 1; //湿度灯打开
speaker=0;
DELAY(5000);
Led_qushi = 0; //湿度灯打开
speaker=1;
DELAY(5000);
} else {
fan=1;
}
}
}
复制代码
所有资料51hei提供下载:
湿度上限 AT24C02 蜂鸣器 风扇 LCD6022019.1.22.rar
(58.7 KB, 下载次数: 32)
2019-1-22 11:38 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1