⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 空调控制程序
💻 C
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : AUX VRV 挂机/柜机
COMPILER : AVR GCC/ICC
MODULE   : main.c
VERSION  : 1.0.0
DATE     : 2006/01/02
AUTHOR   : 朱坤
DESCRIPTION :   Main Routine

MODIFICATIONS :
******************************************************************************/
#include "main.h"
#include "ports.h"
#include "timer.h"
#include "adc.h"
#include "pump.h"
#include "i2c.h"
#include "fan.h"
#include "buz.h"
#include "led.h"
#include "swing.h"
#include "eheat.h"
#include "rem.h"
#include "scom.h"
#include "rscom.h"
#include "pzf.h"

u8 RunMode;           /* 运行模式 */
u8 SysConfig;         /* 配置 */
u8 Errorflg;          /* 内机故障 */
u8 Errorflg2;         /* 内机故障 */
u8 Sysflag;
u8 Sysflag1;
u8 Sysflag2;
u8 SetupTp;           /* 设定温度,加偏移 0x80 */
u8 SysOkDly;          /* 压缩机停机延时 5分钟 */
u8 PowerConst;        /* 内机设定功率 */
u8 StartUt;
u16 OutSideValve;     /* 外机请求开度  */

#ifdef EnSTYLE5
u8 WJ_NJNo;           /* 内机 ID */
u8 WJType;            /* 1: 定频外机系统,0:变频外机系统 */
u8 SetOn;             /* 制热膨胀阀常开开度*/
u8 SetOnCool;         /* 制冷调阀零点 +0x80*/
u8 SetOnHeat;         /* 制热调阀零点 +0x80*/
u8 SetUnacc;          /* 非调节温度        */
u8 SysSetPow;         /* 系统最大额定制冷量(500W) */
u8 SysTotPow;         /* 系统当前总制冷量(500W)   */
u8 OutDevStu[3];      /* 室外机工作/设备状态(3字节) */
u8 OutSideErr[6];     /* 室外机故障状态(6字节) */
#else
u8 OutDevStu[1];      /* 室外机工作/设备状态 */
u8 OutSideErr[1];     /* 室外机故障状态 */
#endif

#ifdef ChigoXG1
#ifndef ChigoXG1Set
u8 SetOffset;         /* 制热温度补偿 +0x80*/
#endif
#endif

/* 复位标志 */
u16 ResetID;

int main(void)
{
  DisableInterrupts();
  TIMSK = 0x00;             /* 禁止所有中断 */
  TIFR  = 0x0FF;
  PORTS_Init();             /* 初始化 I/O */
  PORTS_Ref();              /* 刷新I/O */

  if (ResetID != 0x5A7D){
    ResetID = 0x5A7D;
    Swing_Init();           /* 初始化风门控制模块 */
    V_Init();               /* 初始化膨胀阀系统,关到位 */
    Buz_Init();             /* 蜂鸣器初始化 */
    I2C_Init();             /* 初始化 i2c 模块 */
    Pump_Init();            /* 水泵控制模块初始化*/
    Led_Init();             /* LED 显示初始化 */
    ADC_Init();             /* A/D 模快初始化 */
    GetFromEEPROM();        /* 从 EEPROM 中恢复记忆的参数*/
  }
  PG_Init();                /* PG 风机初始化 */
  Init_Timer();             /* 计时模块初始化 */
  Init_TIMA();              /* TA 初始化 */
  Init_TIMB();              /* TB 初始化 */
  WWD_Init();               /* 初始化看门狗 */
  EnableInterrupts();
  while (1){
    PORTS_Ref();            /* 刷新I/O */
    Swing_Sub();            /* 风门控制   */
    ValveCont_Sub();        /* 膨胀阀控制 */
    Timer_Sub();            /* 4mS 计时 */
    LcCom_Sub();            /* 遥控器/线控器接收数据处理,同时生成发送数据 */
#ifdef DISDRYCONTINUE       /* 除湿时不允许连续 */
    if ((u8)(RunMode & MODEMASK) == MODEDRY){   /* 除湿模式  */
      ClrBit(Sysflag,fContinue);                /* 1: 连续 */
    }
#endif
    IfDisHeat();            /* 单冷不允许制热  */
    ScCom_Sub();            /* 外机通信接收数据处理,同时生成发送数据 */
    WWD_Refresh();          /* 刷新看门狗 */
    SleepSub();             /* 睡眠控制 */
    TimerOnOff();           /* 定开定关 */
    /* 功率控制 */
    if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEHEAT) ){
      CHKMode(MODEHEAT);   /* 由其它模式进入制热 */
      Heat_Power();
    } else if (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODECOOL) ){
      Cool_Power(SetupTp,MODECOOL);
    } else if  (RunMode == ((1<<fSysOn)|(1<<fSysOnOff)|MODEDRY) ){
      Cool_Power(0x90,MODEDRY);
    } else {
      StartUt = 0;
      //ClrBit(Sysflag2,fDelay);
      ClrBit(Sysflag2,fRequest);
      ClrBit(Sysflag,fPower);     /* 关压缩机 */
    }
    WorkStu_Sub();          /* 风机控制 */
    PG_FeedBack();          /* PG 风机反馈 */
    Pump_Sub();             /* 水泵控制 */
    FanCont_Sub();          /* 风机输出 */
    Eheat_Sub();            /* 电热控制 */
    Buz_Sub();              /* 蜂鸣器处理 */
    SaveToEEPROM();         /* 更新EEPROM中的参数 */
    IfPowerUp();            /* 功率检测 */
  }//while(1);
}

void CHKMode(u8 ModeSet)
{
   if (StartUt != ModeSet){
     StartUt = ModeSet;                  /* 由其它模式进入 */
     ClrBit(Sysflag,fModeflag);
     ClrBit(Sysflag2,fRequest);
     ClrBit(OutDevStu[0],fRunEnable);    /* 1:外机工作允许标志 */
   }
}

void CHKTemp(u8 TempTr, u8 TempTs)
{
   if (ValBit(Sysflag,fContinue)||(TempTr > TempTs)){
     ClrBit(Sysflag2,fDelay);        /* 1:停压缩机延时 */
     SetBit(Sysflag,fPower);         /* 开压缩机 */
   } else if (TempTr == TempTs){
     //if (ValBit(Sysflag2,fDelay) && (SysOkDly == 0) ){
     //  ClrBit(Sysflag,fPower);     /* 关压缩机 */
     //} else {
     //  ClrBit(Sysflag2,fDelay);
     //  SetBit(Sysflag,fPower);     /* 开压缩机 */
     //}
   } else {
     if (!ValBit(Sysflag2,fDelay)){
       SetBit(Sysflag2,fDelay);      /* 1:停压缩机延时    */
       SysOkDly = 0x96;              /* 停压缩机延时 5分钟 */
     }
     if (SysOkDly == 0) {
       ClrBit(Sysflag,fPower);       /* 关压缩机 */
     //} else {
     //  SetBit(Sysflag,fPower);     /* 开压缩机 */
     }
   }
}

void Cool_Power(u8 TempSet,u8 ModeSet)
{
   CHKMode(ModeSet);
   if (!ValBit(OutDevStu[0],fRunEnable)  /* 1:外机工作允许标志 */
        && (!ValBit(Sysflag,fContinue))  /* 1:连续运行 */
        && (AmbientTp <= TempSet)){      /* Tr <= Ts */
     //SetBit(Sysflag2,fDelay);          /* 1:停压缩机延时 */
     //SysOkDly = 0;
     SetBit(Sysflag2,fRequest);          /* */
     ClrBit(Sysflag,fPower);             /* 关压缩机 */
   } else {
     ClrBit(Sysflag2,fRequest);
     if (ValBit(Sysflag2,fProtFrost)){   /* 1: 室内换热器防结霜保护 */
       //SetBit(Sysflag2,fDelay);        /* 1:停压缩机延时 */
       //SysOkDly = 0;
       ClrBit(Sysflag,fPower);           /* 关压缩机 */
     } else {
       CHKTemp(AmbientTp,TempSet);
     }
   }
}

void Heat_Power(void)
{
   if (!ValBit(OutDevStu[0],fRunEnable)  /* 1:外机工作允许标志 */
        && (!ValBit(Sysflag,fContinue))  /* 1:连续运行 */
        && (TempOffset >= SetupTp)){     /* Tr - Toff >= Ts */
     //SetBit(Sysflag2,fDelay);          /* 1:停压缩机延时 */
     //SysOkDly = 0;
     SetBit(Sysflag2,fRequest);          /* */
     ClrBit(Sysflag,fPower);             /* 关压缩机 */
   } else {
     ClrBit(Sysflag2,fRequest);
     if (!ValBit(Sysflag2,fOverHeat))    /* 1: 室内换热器过热保护 */
       ClrBit(Sysflag,fEndNoPower);
     if (TubeMidTp >= OVERSUPHEAT)
       SetBit(Sysflag,fEndNoPower);      /* 1: 室内换热器超热,关压机 */
     if (ValBit(Sysflag,fEndNoPower)){
       //SetBit(Sysflag2,fDelay);        /* 1: 停压缩机延时 */
       //SysOkDly = 0;
       ClrBit(Sysflag,fPower);           /* 关压缩机 */
     } else {
       CHKTemp(SetupTp,TempOffset);
     }
   }
}

/* 检测单冷机是否是制热,若是,改为通风模式 */
void IfDisHeat(void)
{
  if (((u8)(RunMode & MODEMASK) == MODEHEAT)  /* 制热模式  */
       && ValBit(SysConfig,fDisHeat)){        /* 1: 单冷机 */
    RunMode = (u8)((RunMode & ~MODEMASK)|MODEFAN);
  }
}

void IfPowerUp(void)
{
#ifdef EnSTYLE5
  if ((!ValBit(RunMode,fSysOn)) &&   /* 仅关机时判断系统总功率是否超过设定 */
     (SysSetPow != 0)){              /* 系统最大额定制冷量(500W) */
    if (ValBit(Sysflag1,fEnPowCHK)){
      if (((u8)(SysTotPow + PowerConst) < SysTotPow)||  /* 检测溢出 */
          ((u8)(SysTotPow + PowerConst) > SysSetPow)){  /* 功率过大 */
        if (ValBit(RunMode,fSysOnOff)){
          SetBit(Errorflg,fSysPowErr);
        }
        ClrBit(RunMode,fSysOn);             /* 故障关机 */
      } else {
        ClrBit(Errorflg,fSysPowErr);
        if ((!ValBit(RunMode,fLtdSwOn)) &&  /* 系统被锁定,不开机 */
            ValBit(RunMode,fSysOnOff)){     /* 系统请求开机 */
          SetBit(RunMode,fSysOn);           /* 同意开机 */
        }
      }
      ClrBit(Sysflag1,fRoPowCHK);   /* 1: 请求功率检测 */
      ClrBit(Sysflag1,fEnPowCHK);   /* 1: 允许功率检测 */
    } else {
      SetBit(Sysflag1,fReqPowCHK);  /* 1: 请求功率检测 */
    }
  } else {
    ClrBit(Sysflag1,fReqPowCHK);    /* 1: 请求功率检测 */
    ClrBit(Sysflag1,fRoPowCHK);     /* 1: 请求功率检测 */
    ClrBit(Sysflag1,fEnPowCHK);     /* 1: 允许功率检测 */
  }
#else
  if (ValBit(RunMode,fSysOnOff) &&  /* 系统请求开机 */
      (!ValBit(RunMode,fSysOn)) &&
      (!ValBit(RunMode,fLtdSwOn))){ /* 系统被锁定,不开机 */
      SetBit(RunMode,fSysOn);       /* 同意开机 */
  }
#endif
}

void SetMode(u8 nMode)
{
  if (nMode != (u8)(ValBit(Sysflag2,fMAuto)? MODEAUTO : (RunMode & MODEMASK))){
    RunMode = (u8)((RunMode & ~MODEMASK)| nMode);
    ClrBit(Sysflag2,fDelay);        /* 1:停压缩机延时 */
    ClrBit(Sysflag2,fMAuto);        /* 自动模式清除 */
    IfDisHeat();
  }
}
/*** (c) 2005  佛山菱电 **************************** END OF FILE *************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -