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

📄 swing.c

📁 一个很好的完整的空调控制器程序
💻 C
字号:
/**************** (c) 2005   佛山菱电 *****************************************
PROJECT  : AUX VRV
COMPILER : AVR GCC/ICC
MODULE   : swing.c
VERSION  : 1.0.0
DATE     : 2005/12/31
AUTHOR   : 朱坤
DESCRIPTION :    扫风控制

MODIFICATIONS :
******************************************************************************/
#include "swing.h"
#include "ports.h"
#include "main.h"
#include "timer.h"
#include "fan.h"

#ifdef EnSWING

u8 FDoorUnit;              /* 扫风模式 */
u8 StepSpeed;              /* 扫风速度 */
u8 StepSpeedSet;
#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 2)||(NJTYPE == 3)||(NJTYPE == 4))
/* AUX30/70吸顶 / 挂机 */
u8 MotorCnt;               /* 风门电机步计数 */
TwoBytes BjSave;           /* 风门电机位置记忆 */
TwoBytes BjStep;           /* 风门电机位置 */
TwoBytes BjSetup;          /* 风门电机设定位置 */
const u8 SwingPhase_Tab[] = {0x10,0x30,0x20,0x60,0x40,0x0C0,0x80,0x90};
#endif

void Swing_Sub(void)
{
#if (NJTYPE == 0)||(NJTYPE == 5)               /* 30吸顶/柜机 */
   //if (!ValBit(Sysflag1,fStepMotor)){          /* 1: 步进电机驱动风门 */
     if ((ValBit(RunMode,fSysOn)||               /* 系统开机,风门开 */
         (ClrHotCnt != 0)) &&                    /* 吹余热计时(2分钟) */
         (!ValBit(OutDevStu[0],fOutDeforst)) &&  /* 化霜时,风门停止 */
         ValBit(FanStatus,fFanCtrlBit) &&        /* 1:内风机运行标志 */
         //((!ValBit(Sysflag2,fMAuto))||
         // (AutoCnt == 0)) &&       /* 自动模式没有确定模式时,风门停止 */
         ((u8)(FDoorUnit & SWINGMASK) != SWINGFIXED)){
       /* 风摆状态-00:自然风 */
       /* 风摆状态-01:扫风   */
       SetBit(pSwing,pbSwing);
     } else {
       /* 风摆状态-10:固定风  */
       ClrBit(pSwing,pbSwing);
     }
   //}
#endif

   //if (ValBit(Sysflag1,fStepMotor)){  /* 1: 步进电机驱动风门 */
#if (NJTYPE == 0)||(NJTYPE == 1)
     if (!ValBit(Sysflag,fSetupBj)){  /* 上电或关机,风门往关的方向转 */
       ClrBit(Sysflag,fResetBj);
       SetBit(Sysflag,fSetupBj);
       StepSpeedSet = 1;
       BjStep.w_form = 0;
       BjSetup.w_form = cFDCloseMaxNum;
     } else if (ValBit(RunMode,fSysOn)||  /* 系统开机 */
                (ClrHotCnt != 0)){        /* 吹余热计时(2分钟) */
       if (!ValBit(Sysflag,fResetBj)){    /* 1:已完成开机动作 */
         ClrBJ();
         if (BjStep.w_form == BjSetup.w_form){
           SetBit(Sysflag,fResetBj);       /* 开机时,风门往开的方向 */
           ClrBit(Sysflag2,fPosition);
           BjSetup.w_form = 0;
           BjStep.w_form = cFDOpenMaxNum;
         }
       } else if (StepSpeedSet == 4){
         if (ValBit(OutDevStu[0],fOutDeforst) ||  /* 化霜时 */
             ((ValBit(Sysflag2,fMAuto) ||
               ((u8)(RunMode & MODEMASK) == MODEAUTO)) &&
              (AutoCnt != 0))){           /* 自动模式没有确定模式时 */
           BjSetup.w_form = cFDFixedNum;  /* 风门停止在30度处 */
           ClrBJ();
         } else if (!ValBit(FanStatus,fFanCtrlBit)){ /* 1:内风机运行标志 */
           BjSetup.w_form = BjStep.w_form;           /* 内风机停,风门停在当前位置处 */
           ClrBJ();
         } else if ((u8)(FDoorUnit & SWINGMASK) == SWINGFIXED){ /* 风摆-10:固定风 */
           if (BjSave.w_form > cFDFixedNum){
             BjSave.w_form = cFDFixedNum;
           } else if (BjSave.w_form == 0){
             BjSave.w_form = cFDFixedNum;
           }
           BjSetup.w_form = BjSave.w_form;
           ClrBJ();
         } else if (BjSetup.w_form == BjStep.w_form){
           if (((FDoorUnit & SWINGMASK) == SWINGAUTO) && /* 00:自然风 */
               ((FDoorUnit & SWINGMASK) == SWINGSWING)){ /* 01:扫风   */
             ClrBJ();
             if (ValBit(Sysflag2,fPosition)){
               ClrBit(Sysflag2,fPosition);
               BjSetup.w_form = cFDSwingHNum;
             } else {
               SetBit(Sysflag2,fPosition);
               BjSetup.w_form = cFDSwingLNum;
             }
           }
         }
       } else if (BjStep.w_form == BjSetup.w_form){
         StepSpeedSet = 4;
       }
     } else if (ValBit(Sysflag,fResetBj)){
        ClrBit(Sysflag,fSetupBj);
     }
#elif (NJTYPE == 2)||(NJTYPE == 3)||(NJTYPE == 4)
     if (ValBit(RunMode,fSysOn)||         /* 系统开机 */
         (ClrHotCnt != 0)){               /* 吹余热计时(2分钟) */
       if (!ValBit(Sysflag,fResetBj)){    /* 1:已完成开机动作 */
         ClrBit(Sysflag,fSetupBj);
         SetBit(Sysflag,fResetBj);        /* 开机时,风门往开的方向 */
         ClrBit(Sysflag2,fPosition);
         BjSetup.w_form = 0;
         BjStep.w_form = cFDOpenMaxNum;
         StepSpeedSet = 1;
       } else if (StepSpeedSet == 4){
         if (ValBit(OutDevStu[0],fOutDeforst) ||  /* 化霜时 */
             ((ValBit(Sysflag2,fMAuto) ||
               ((u8)(RunMode & MODEMASK) == MODEAUTO)) &&
              (AutoCnt != 0))){           /* 自动模式没有确定模式时 */
           BjSetup.w_form = cFDFixedNum;  /* 风门停在固定位置 2 处 */
         } else if ((u8)(FDoorUnit & SWINGMASK) == SWINGFIXED){ /* 风摆-10:固定风 */
           if (BjSave.w_form == 0){
             if ((u8)(RunMode & MODEMASK) == MODEHEAT){
               BjSetup.w_form = hFDFixedNum;
             } else {
               BjSetup.w_form = cFDFixedNum;
             }
           } else {
             BjSetup.w_form = BjSave.w_form;
           }
         } else if (BjSetup.w_form == BjStep.w_form){
           if (((FDoorUnit & SWINGMASK) == SWINGAUTO) || /* 风摆-00:自然风 */
               ((FDoorUnit & SWINGMASK) == SWINGSWING)){ /* 风摆-01:扫风   */
             if (ValBit(Sysflag2,fPosition)){
               ClrBit(Sysflag2,fPosition);
               if ((u8)(RunMode & MODEMASK) == MODEHEAT){
                 BjSetup.w_form = hFDSwingHNum;
               } else {
                 BjSetup.w_form = cFDSwingHNum;
               }
             } else {
               SetBit(Sysflag2,fPosition);
               if ((u8)(RunMode & MODEMASK) == MODEHEAT){
                 BjSetup.w_form = hFDSwingLNum;
               } else {
                 BjSetup.w_form = cFDSwingLNum;
               }
             }
           }
         }
       } else if (BjStep.w_form == BjSetup.w_form){
         StepSpeedSet = 4;
       }
     } else if (!ValBit(Sysflag,fSetupBj)){
       StepSpeedSet = 1;                  /* 上电或关机,风门往关的方向转 */
       if (ValBit(Sysflag,fResetBj)){
         BjSetup.w_form = cFDCloseMaxNum; /* 关 */
         ClrBit(Sysflag,fResetBj);
         SetBit(Sysflag,fSetupBj);
       } else {
         //if (BjStep.w_form == 0){
         //  BjSetup.w_form = 0;
         //  BjStep.w_form = cFDCloseMaxNum;  /* 开 */
         //}
         if (BjStep.w_form == BjSetup.w_form){
           SetBit(Sysflag,fResetBj);
         }
       }
     }
#endif
   //}
}

#if ((NJTYPE == 0)||(NJTYPE == 1)||(NJTYPE == 2)||(NJTYPE == 3)||(NJTYPE == 4))
void Swing_Output(void)
{
   //if (ValBit(Sysflag1,fStepMotor)){    /* 1: 步进电机驱动风门 */
     if (BjStep.w_form == BjSetup.w_form){
       pStepMotor &= (u8)pSWINGMASK;    /* 不输出 */
       MotorCnt |= 0x80;                /* 输出状态 */
     } else if (StepSpeed-- == 0){
       StepSpeed = StepSpeedSet;
       if (!ValBit(MotorCnt,7)){
         if (BjStep.w_form > BjSetup.w_form){
           BjStep.w_form--;
#ifdef CLOCKWISE
           MotorCnt++;
#else
           MotorCnt--;
#endif
         } else {
           BjStep.w_form++;
#ifdef CLOCKWISE
           MotorCnt--;
#else
           MotorCnt++;
#endif
         }
       }
       pStepMotor = (u8)((pStepMotor & pSWINGMASK)
                      |SwingPhase_Tab[MotorCnt &= 0x07]);
     }
   //}
}
#endif

void Swing_Init(void)
{
#if ((NJTYPE == 0)||(NJTYPE == 1))
  /* 吸顶 */
  MotorCnt = 0x80;
  //ClrBit(Sysflag,fResetBj);
  //ClrBit(Sysflag,fSetupBj);
  //pStepMotor &= (u8)pSWINGMASK;   /* 不输出 */
#elif ((NJTYPE == 2)||(NJTYPE == 3)||(NJTYPE == 4))
  /* 挂机 */
  MotorCnt = 0x80;
  BjStep.w_form = cFDCloseMaxNum;  /* 开 */
  //ClrBit(Sysflag,fResetBj);
  //ClrBit(Sysflag,fSetupBj);
  //pStepMotor &= (u8)pSWINGMASK;   /* 不输出 */
#elif (NJTYPE == 5)
  /* 柜机 */
  //ClrBit(pSwing,pbSwing);
#endif
}

#endif

/*** (c) 2005  佛山菱电 **************************** END OF FILE *************/

⌨️ 快捷键说明

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