|
本帖最后由 Zzboy 于 2020-6-26 11:52 编辑
#include <reg52.h>
#include "1602.h"
#include "dht.h"
#include "2402.h"
sbit buzzer=P2^0;
//定义LED灯
sbit Led=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 = 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 = 85;
}
/********************************************************************
* 名称 : 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,"Hum: % 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 = 0; //灯打开
buzzer=0;
DELAY(5000);
Led = 1; //湿度灯关
buzzer=1;
DELAY(5000);
} else {
fan=1;
}
}
}
|
|