资讯详情

基于单片机的温湿度监测系统设计(程序)

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect --------------------------------------------------------------------------------------------------------------------------

#include <reg52.h> #include "1602.h" #include "dht.h" #include "2402.h"  //定义三个LED灯 sbit Led_qushi=P1^6;        //去湿灯 sbit Led_jiangwen=P1^5;        //降温灯 sbit Led_shengwen=P1^4;        //升温灯 sbit Key_TH1 = P3^2; sbit Key_TH2 = P3^3; 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 temperature, humidity; S16 idata TH, HH;  ///温度和湿度的上限 char * pSave; U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2;  //定义变量 U16 RHCounter;   ///数据初始化 void Data_Init() {    RHCounter = 0;    Led_qushi = 1;    Led_jiangwen = 1;    Led_shengwen = 1;    TH = 40;    HH = 85;    keyvalue = 0;    keyTH1 = 1;    keyTH2 = 1;    keyHH1 = 1;    keyHH2 = 1;  }  ///定时器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 *)&TH;      //低地址对应低8位,高对应高8位    wrteeprom(0, *pSave);      ///储存温度上限值TH低8位    DELAY(500);    pSave   ;    wrteeprom(1, *pSave);      ///储存温度上限值TH高8位    DELAY(500);    pSave =  (char *)&HH;    wrteeprom(2, *pSave);      //存湿度上限值RH低8位    DELAY(500);    pSave   ;    wrteeprom(3, *pSave);      //存湿度上限值RH高8位    DELAY(500); }  //载入设定值, void Load_Setting() {    pSave =  (char *)&TH;    *pSave   = rdeeprom(0);    *pSave = rdeeprom(1);    pSave = (char *)&HH;    *pSave   = rdeeprom(2);    *pSave = rdeeprom(3);    if ((TH>99)||(TH<0)) TH = 40;    if ((HH>99)||(HH<0)) HH = 85; }  void KeyProcess(uint num) {    switch (num)    {       case 1:          if (TH<99) TH  ;          L1602_char(1, 15, TH/10 48);          L1602_char(1, 16, TH 48);          break;       case 2:          if (TH>1) TH--;          L1602_char(1, 15, TH/10 48);          L1602_char(1, 16, TH 48);          break;       case 3:          if (HH<99) HH  ;          L1602_char(2, 15, HH/10 48);          L1602_char(2, 16, HH 48);          break;       case 4:          if (HH>1) HH--;          L1602_char(2, 15, HH/10 48);          L1602_char(2, 16, HH 48);          break;       default:          break;    }    Save_Setting(); }  /******************************************************************** * 名称 : Main() * 功能 : 主函数 ***********************************************************************/ void main() {     U16 i, j, testnum;      EA = 0;      Timer0_Init();  ///定时器0初始化      Data_Init();     EA = 1;      L1602_init();     L1602_string(1,1," Welcome to T&H   ");     L1602_string(2,1," Control System!  ");     //延时     for (i=0;i<500;i  )        for (j=0;j<1000;j  )        {;}     //清屏     L1602_string(1,1,"                ");     L1602_string(2,1,"                ");     L1602_string(1,1,"Tem:    C  TH:");     L1602_string(2,1,"Hum:    %  HH:");          ///载入温度和湿度的上限     Load_Setting();     L1602_char(1, 15, TH/10 48);     L1602_char(1, 16, TH 48);     L1602_char(2, 15, HH/10 48);     L1602_char(2, 16, HH 48);       while(1)     {        ///检查温湿度转换标志          if (FlagStartRH == 1)          {              TR0 = 0;              testnum = RH();               FlagStartRH = 0;              TR0 = 1;              ///读温湿度,只取整数部分              humidity = U8RH_data_H;              temperature = U8T_data_H;               //显示温湿度              L1602_int(1,5,temperature);              L1602_int(2,5,humidity);             }         //温湿度控制         if (temperature > TH) Led_jiangwen = 0;         else Led_jiangwen = 1;                    //降温         if (humidity > HH) Led_qushi = 0;         else Led_qushi = 1;                        //去湿                   ///键盘查询,弹起时响应         if ((Key_TH1)&&(keyTH1==0)) {FlagKeyPress = 1; keyvalue = 1;}         else if ((Key_TH2)&&(keyTH2==0)) {FlagKeyPress = 1; keyvalue = 2;}         else if ((Key_HH1)&&(keyHH1==0)) {FlagKeyPress = 1; keyvalue = 3;}         else if ((Key_HH2)&&(keyHH2==0)) {FlagKeyPress = 1; keyvalue = ;}
        if (FlagKeyPress == 1)
        {
           KeyProcess(keyvalue);
           FlagKeyPress = 0;           
        }
        if (!Key_TH1) keyTH1 = 0;
        else keyTH1 = 1;
        if (!Key_TH2) keyTH2 = 0;
        else keyTH2 = 1;
        if (!Key_HH1) keyHH1 = 0;
        else keyHH1 = 1;
        if (!Key_HH2) keyHH2 = 0;
        else keyHH2 = 1;
    }    
}

 

标签: 温湿度传感器ee375

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台