sysfunction.c
来自「用FreeScale 的MC9S08FL16RM MCU设计的一种家用空调控制器」· C语言 代码 · 共 2,177 行 · 第 1/4 页
C
2,177 行
{
F_Defrost_Start = 1;
return;
}
}
if(OUT1_MF)
{
if((Temp_Incoil<Temp_Indoor+21*2)&&
(Temp_Incoil<(43*2+80)))
{
F_Defrost_Start = 1;
return;
}
}
if(OUT0_LF||(OUT0_LF==0&&OUT1_MF==0&&OUT2_HF==0))
{
if((Temp_Incoil<Temp_Indoor+22*2)&&
(Temp_Incoil<(43*2+80)))
{
F_Defrost_Start = 1;
return;
}
}
}
if((CompTimeTotal==20)&&F_DT_Max) //debug CompTimeTotal==45
{
if((Temp_Incoil<=Temp_Indoor)&&(Temp_Incoil<(43*2+80)))
{
F_Defrost_Start = 1;
return;
}
}
F_Defrost_Start = 0;
}
/////////////////////////////////
void Defrost_Entry(void)
{
if(!F_SysMode_On||!F_Defrost_Start||F_Defrost_End||F_Comp4WVFault) return;
if((OUT5_ODF||OUT6_COMP||OUT0_LF||OUT1_MF||OUT2_HF)&&F_Defrost_End==0)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_60sDefrost = 60;
}
if(SysTimerStr.Timer_60sDefrost==0&&OUT6_COMP==0)
{
if(OUT4_4WV)
{
OUT4_4WV = 0;
SysTimerStr.Timer_5sDefrost = 5;
}
}
if(SysTimerStr.Timer_5sDefrost==0&&OUT4_4WV==0)
{
if(OUT6_COMP==0)
{
OUT6_COMP = 1;
SysTimerStr.Timer_10minDefrost = 10;
}
}
if((SysTimerStr.Timer_60sDefrostEnd==0||SysTimerStr.Timer_10minDefrost==0)&&OUT6_COMP)
{
F_Defrost_Start = 0;
F_Defrost_End = 1;
}
}
/////////////////////////////////
void Defrost_Termination(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||!F_Defrost_End) return;
if(F_Defrost_End&&F_Defrost_Start==0)
{
if(OUT6_COMP)
{
OUT6_COMP = 0;
SysTimerStr.Timer_30sDefrostComp = 30;
}
if(SysTimerStr.Timer_30sDefrostComp==0&&!OUT6_COMP)
{
if(!OUT5_ODF)
{
OUT5_ODF = 1;
SysTimerStr.Timer_30sDefrostOutFan = 30;
}
}
if(SysTimerStr.Timer_30sDefrostOutFan==0&&OUT5_ODF)
{
if(!OUT4_4WV)
{
OUT4_4WV = 1;
SysTimerStr.Timer_4sDefrost4WV = 4;
}
}
if(SysTimerStr.Timer_4sDefrost4WV==0&&OUT4_4WV)
{
if(!OUT6_COMP)
{
OUT6_COMP = 1;
F_Defrost_End = 0;
}
}
}
}
/////////////////////////////////
void Comp4WV_Failure(void)
{
if(!F_SysMode_Heat&&!F_SysMode_Cool) return;
if(!F_SysMode_On||F_Diagnostic_End) return;
if(OUT6_COMP&&SysTimerStr.Timer_15minCompLapsed==0)
{
Ti_Temper = Temp_Incoil;
//-------------------------------
if(CompFault_Times>=3)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
F_RunMode_Heat = 0;
F_RunMode_Cool = 0;
F_Comp_On = 0;
CompFault_Times = 0;
F_Disp_E4 = 1;//display E4
F_BlnakingCHLed = 0;
F_Comp4WVFault = 1;
if(F_SysMode_Heat)
{
F_4WayValue_On = 0;
SysTimerStr.Timer_40sComp4WVDiag = 40;
}
//F_SysMode_Fan = 1;
//F_SysMode_Cool = 0;
//F_SysMode_Heat = 0;
F_Diagnostic_End = 1;
return;
}
//-------------------------------
if((F_RunMode_Heat&&F_SysMode_Heat==0)||(F_RunMode_Cool&&F_SysMode_Cool==0)||F_FilterChoke)
{
F_RunMode_Heat = 0;
F_RunMode_Cool = 0;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
F_Diagnostic_End = 1;
return;
}
//-------------------------------
if(F_SysMode_Heat&&(Ti_Temper<Ti_DSR)&&OUT6_COMP&&(SysTimerStr.Timer_5minCompDiag==0))
{
F_RunMode_Heat = 1;
OUT5_ODF = 0;
OUT6_COMP = 0;
SysTimerStr.Timer_3minCompDiag = 3;
//F_SysMode_Fan = 1;
//F_SysMode_Cool = 0;
CompFault_Times++;
F_BlnakingCHLed = 1;//cool and heat led blanking
F_Disp_E4 = 0;
}
else
{
if(F_SysMode_Heat&&(Ti_Temper>=Ti_DSR))
{
F_RunMode_Heat = 0;
F_RunMode_Cool = 0;
CompFault_Times = 0;
F_SysMode_Cool = 0;
F_SysMode_Fan = 0;
F_SysMode_Heat = 1;
OUT5_ODF = 1;
OUT6_COMP = 1;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
F_Diagnostic_End = 1;
return;
}
}
if(F_SysMode_Heat&&SysTimerStr.Timer_3minCompDiag==0&&OUT6_COMP==0)
{
F_RunMode_Heat = 1;
OUT5_ODF = 1;
OUT6_COMP = 1;
F_SysMode_Fan = 0;
F_SysMode_Cool = 0;
F_SysMode_Heat = 1;
F_BlnakingCHLed = 0;
SysTimerStr.Timer_5minCompDiag = 5;
}
//-------------------------------
if(F_SysMode_Cool&&(Ti_Temper>Ti_DSR)&&OUT6_COMP&&(SysTimerStr.Timer_5minCompDiag==0))
{
F_RunMode_Cool = 1;
OUT5_ODF = 0;
OUT6_COMP = 0;
SysTimerStr.Timer_3minCompDiag = 3;
//F_SysMode_Fan = 1;
//F_SysMode_Heat = 0;
CompFault_Times++;
F_BlnakingCHLed = 1;
F_Disp_E4 = 0;
//cool and heat led blanking
}
else
{
if(F_SysMode_Cool&&(Ti_Temper<=Ti_DSR))
{
F_RunMode_Cool = 0;
F_RunMode_Heat = 0;
CompFault_Times = 0;
OUT5_ODF = 1;
OUT6_COMP = 1;
F_SysMode_Cool = 1;
F_SysMode_Fan = 0;
F_SysMode_Heat = 0;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
F_Diagnostic_End = 1;
return;
}
}
if(F_SysMode_Cool&&SysTimerStr.Timer_3minCompDiag==0&&OUT6_COMP==0&&OUT5_ODF==0)
{
F_RunMode_Cool = 1;
OUT5_ODF = 1;
OUT6_COMP = 1;
F_SysMode_Fan = 0;
F_SysMode_Cool = 1;
F_SysMode_Heat = 0;
F_BlnakingCHLed = 0;
SysTimerStr.Timer_5minCompDiag = 5;
}
}
//-------------------------------
if((!F_Comp_On&&F_Comp1thRun)||
(F_SysMode_Cool&&(Ti_Temper<=Ti_DSR))||(F_SysMode_Heat&&(Ti_Temper>=Ti_DSR)))
{
F_RunMode_Cool = 0;
F_RunMode_Heat = 0;
CompFault_Times = 0;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
F_Diagnostic_End = 1;
}
}
/////////////////////////////////
void Auto_CoolHeat(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End) return;
if(F_SysMode_Auto)
{
if(!F_SysMode_Heat&&!F_SysMode_Cool)
{
if(F_RunMode_Heat) F_SysMode_Heat = 1;
if(F_RunMode_Cool) F_SysMode_Cool = 1;
if(!F_RunMode_Heat&&!F_RunMode_Cool)
{
if(Temp_Indoor<Set_Temper) F_SysMode_Heat = 1;
if(Temp_Indoor>Set_Temper) F_SysMode_Cool = 1;
}
}
if(Temp_Indoor<(Set_Temper-2*2)&&SysTimerStr.Timer_10minCompOff==0)
{
F_SysMode_Heat = 1;
F_SysMode_Cool = 0;
}
if(Temp_Indoor>(Set_Temper+2*2)&&SysTimerStr.Timer_10minCompOff==0)
{
F_SysMode_Heat = 0;
F_SysMode_Cool = 1;
}
}
}
/////////////////////////////////
void Dry_Mode(void)
{
if(!F_SysMode_On||F_SensorFault_P) return;
if(F_SysMode_Dry)
{
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
if(!OUT0_LF) F_FanSpeed_Low = 0;
else F_FanSpeed_Low = 1;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
if(OUT3_ION) OUT3_ION = 0;
//if(OUT4_4WV) OUT4_4WV = 0;
if(!F_Dry1thRun&&!F_RunMode_Cool)
{
if(OUT4_4WV&&F_RunMode_Heat)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
F_RunMode_Heat = 0;
SysTimerStr.Timer_60sCompOff = 60;
}
if(!OUT6_COMP&&OUT4_4WV&&SysTimerStr.Timer_60sCompOff==0)
{
OUT4_4WV = 0;
}
if(!OUT0_LF) OUT0_LF = 1;
F_FanSpeed_Low = 1;
if(!OUT4_4WV&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(!OUT5_ODF) OUT5_ODF = 1,SysTimerStr.Timer_2sOutFanRun = 2;
if(!OUT6_COMP&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0)
{
OUT6_COMP = 1;
F_PowDn3Minu = 0;
SysTimerStr.Timer_120sCompRun = 120;
SysTimerStr.Timer_12minCompRunDry = 12;
}
}
else
{
SysTimerStr.Timer_12minCompRunDry = 12;
}
//return;
}
F_RunMode_Cool = 0;
F_RunMode_Heat = 0;
if(!F_Dry1thRun&&(F_RunMode_Cool||SysTimerStr.Timer_12minCompRunDry==0||(Temp_Indoor<=Set_Temper-2)))
{
F_Dry1thRun = 1;
SysTimerStr.Timer_30sLowFanDry = 30;
SysTimerStr.Timer_12minCompRunDry = 12;
return;
}
if(F_Dry1thRun)
{
SysRunStatus3 &= 0b11100001;
if(Temp_Indoor>=(Set_Temper+2*2))
{
F_DryZoneA = 1;
}
if(Temp_Indoor>Set_Temper&&Temp_Indoor<=(Set_Temper+1*2))
{
F_DryZoneB = 1;
}
if(Set_Temper>=(Temp_Indoor+1*2)&&Set_Temper<=(Temp_Indoor+2*2))
{
F_DryZoneC = 1;
}
if(Set_Temper>=(Temp_Indoor+2*3))
{
F_DryZoneD = 1;
}
//return;
}
if(F_DryZoneA)
{
if(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu)
{
if(!OUT0_LF) OUT0_LF = 1;
F_FanSpeed_Low = 1;
if(!OUT5_ODF) OUT5_ODF = 1,SysTimerStr.Timer_2sOutFanRun = 2;
if(!OUT6_COMP&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0)
{
OUT6_COMP = 1;
SysTimerStr.Timer_120sCompRun = 120;
F_PowDn3Minu = 0;
SysTimerStr.Timer_12minCompRunDry = 12;
}
_asm nop;
}
if(OUT6_COMP&&OUT0_LF&&SysTimerStr.Timer_12minCompRunDry==0)
{ _asm nop;
//F_DryZoneA = 0;
SysTimerStr.Timer_30sLowFanDry = 30;
}
return;
}
if(F_DryZoneB)
{
if((!F_DryCompRun&&SysTimerStr.Timer_30sLowFanDry==0)&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(!OUT5_ODF) OUT5_ODF = 1,SysTimerStr.Timer_2sOutFanRun = 2;
if(!OUT6_COMP&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0)
{
OUT6_COMP = 1;
F_PowDn3Minu = 0;
SysTimerStr.Timer_120sCompRun = 120;
SysTimerStr.Timer_8minCompRunDry = 8;
F_DryCompRun = 1;
}
_asm nop;
}
else
{
if(!F_DryCompRun)
{
if(!OUT0_LF) OUT0_LF = 1;
/*if(OUT5_ODF) OUT5_ODF = 0;
if(OUT6_COMP&&SysTimerStr.Timer_120sCompRun==0)
{
OUT6_COMP = 0;
SysTimerStr.Timer_180sCompOff = 180;
}*/
F_FanSpeed_Low = 1;
_asm nop;
}
}
if(F_DryCompRun)
{
if(OUT6_COMP&&SysTimerStr.Timer_8minCompRunDry==0&&SysTimerStr.Timer_120sCompRun==0)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
SysTimerStr.Timer_180sCompOff = 180;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
if(!OUT6_COMP&&OUT0_LF&&!F_DryFanRun&&SysTimerStr.Timer_30sLowFanDry==0)
{
OUT0_LF = 0;
F_FanSpeed_Low = 0;
SysTimerStr.Timer_3minLowFanDry = 3;
_asm nop;
}
if(!OUT0_LF&&SysTimerStr.Timer_3minLowFanDry==0)
{
OUT0_LF = 1;
F_FanSpeed_Low = 1;
F_DryFanRun = 1;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
if(F_DryFanRun&&SysTimerStr.Timer_30sLowFanDry==0)
{
//F_DryZoneB = 0;
F_DryCompRun = 0;
F_DryFanRun = 0;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
}
return;
}
if(F_DryZoneC)
{
if((!F_DryCompRun&&SysTimerStr.Timer_30sLowFanDry==0)&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(!OUT5_ODF) OUT5_ODF = 1,SysTimerStr.Timer_2sOutFanRun = 2;
if(!OUT6_COMP&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0)
{
OUT6_COMP = 1;
F_PowDn3Minu = 0;
SysTimerStr.Timer_120sCompRun = 120;
SysTimerStr.Timer_8minCompRunDry = 6;
F_DryCompRun = 1;
}
_asm nop;
}
else
{
if(!F_DryCompRun)
{
if(!OUT0_LF) OUT0_LF = 1;
/*if(OUT5_ODF) OUT5_ODF = 0;
if(OUT6_COMP&&SysTimerStr.Timer_120sCompRun==0)
{
OUT6_COMP = 0;
SysTimerStr.Timer_180sCompOff = 180;
}*/
F_FanSpeed_Low = 1;
_asm nop;
}
}
if(F_DryCompRun)
{
if(OUT6_COMP&&SysTimerStr.Timer_8minCompRunDry==0&&SysTimerStr.Timer_120sCompRun==0)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
SysTimerStr.Timer_180sCompOff = 180;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
if(!OUT6_COMP&&OUT0_LF&&!F_DryFanRun&&SysTimerStr.Timer_30sLowFanDry==0)
{
OUT0_LF = 0;
F_FanSpeed_Low = 0;
SysTimerStr.Timer_3minLowFanDry = 5;
_asm nop;
}
if(!OUT0_LF&&SysTimerStr.Timer_3minLowFanDry==0)
{
OUT0_LF = 1;
F_FanSpeed_Low = 1;
F_DryFanRun = 1;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
if(F_DryFanRun&&SysTimerStr.Timer_30sLowFanDry==0)
{
//F_DryZoneC = 0;
F_DryCompRun = 0;
F_DryFanRun = 0;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
}
return;
}
if(F_DryZoneD)
{
if((OUT0_LF||OUT6_COMP)&&!F_DryFanRun&&SysTimerStr.Timer_120sCompRun==0)
{
if(OUT0_LF) OUT0_LF = 0;
if(OUT5_ODF) OUT5_ODF = 0;
if(OUT6_COMP) OUT6_COMP = 0,SysTimerStr.Timer_180sCompOff = 180;
SysTimerStr.Timer_3minLowFanDry = 11;
F_FanSpeed_Low = 0;
F_DryFanRun = 1;
_asm nop;
}
if(!OUT0_LF&&F_DryFanRun&&SysTimerStr.Timer_3minLowFanDry==0)
{
OUT0_LF = 1;
SysTimerStr.Timer_30sLowFanDry = 30;
F_FanSpeed_Low = 1;
_asm nop;
}
if(OUT0_LF&&SysTimerStr.Timer_30sLowFanDry==0)
{
//F_DryZoneD = 0;
F_DryFanRun = 0;
SysTimerStr.Timer_30sLowFanDry = 30;
_asm nop;
}
}
}
else
{
F_Dry1thRun = 0;
}
}
/////////////////////////////////
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?