sysfunction.c
来自「用FreeScale 的MC9S08FL16RM MCU设计的一种家用空调控制器」· C语言 代码 · 共 2,177 行 · 第 1/4 页
C
2,177 行
void Heat_Mode(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End||F_SensorFault_P) return;
if(F_SysMode_Heat)
{
if(F_RunMode_Cool)
{
F_Comp1thRun = 0;
F_Diagnostic_End = 1;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
}
if(!F_RunMode_Heat)
{
OUT5_ODF = 0;
OUT6_COMP = 0;
F_Comp_On = 0;
SysTimerStr.Timer_60sCompOff = 60;
}
F_RunMode_Heat = 1;
F_RunMode_Cool = 0;
if(SysTimerStr.Timer_180sPowerOn==0||F_PowDn3Minu)
{
if(Set_Temper>=(Temp_Indoor+2)&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(F_Comp_On==0)
{
SysTimerStr.Timer_120sCompRun = 120; //comp 120s minimum run time
}
SysTimerStr.Timer_10minCompOff = 10;
F_Comp_On = 1; //comp run flag
}
if(Temp_Indoor>=(Set_Temper+3)&&SysTimerStr.Timer_120sCompRun==0)
{
if(F_Comp_On)
{
SysTimerStr.Timer_180sCompOff = 180; //comp 3min protect
//SysTimerStr.Timer_60sCompOff = 60;
SysTimerStr.Timer_10minCompOff = 10;
}
F_Comp_On = 0; //comp stop flag
}
}
}
}
/////////////////////////////////
void Cold_Draft(void)
{
if(!F_SysMode_On||F_Comp4WVFault) return;
if(F_SysMode_Heat)
{
FanSpeedBak &= 0b00001111;
/*if(Temp_Incoil==ICTTemp)
{
if(Temp_Incoil<=(31*2+80))
{
if(OUT0_LF) OUT0_LF = 0;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
F_ColdDraft = 1;
}
}*/
if(Temp_Incoil>ICTTemp)
{
ICTTemp = Temp_Incoil;
if((Temp_Incoil<=(31*2+80))&&Temp_Incoil!=0)
{
if(OUT0_LF) OUT0_LF = 0;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
F_ColdDraft = 1;
}
if(Temp_Incoil>(31*2+80)&&Temp_Incoil<=(38*2+80))
{
if(!OUT0_LF) OUT0_LF = 1;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
F_FanSpeed_Low = 1;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
F_ColdDraft = 1;
}
if(Temp_Incoil>(38*2+80))
{
FanSpeedBak &= 0b00001111;
if(FanSpeedBak==0x08) FanSpeed &= 0b11110000,F_FanSpeed_Low = 1;
if(FanSpeedBak==0x04&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_Mid = 1;
if(FanSpeedBak==0x02&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_High = 1;
if(FanSpeedBak==0x09) FanSpeed &= 0b11110000,F_FanSpeed_Low = 1,F_FanSpeed_Auto = 1;
if(FanSpeedBak==0x05&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_Mid = 1,F_FanSpeed_Auto = 1;
if(FanSpeedBak==0x03&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_High = 1,F_FanSpeed_Auto = 1;
F_ColdDraft = 0;
}
}
if(Temp_Incoil<ICTTemp)
{
ICTTemp = Temp_Incoil;
if(Temp_Incoil>=(37*2+80))
{
FanSpeedBak &= 0b00001111;
if(FanSpeedBak==0x08) FanSpeed &= 0b11110000,F_FanSpeed_Low = 1;
if(FanSpeedBak==0x04&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_Mid = 1;
if(FanSpeedBak==0x02&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_High = 1;
if(FanSpeedBak==0x09) FanSpeed &= 0b11110000,F_FanSpeed_Low = 1,F_FanSpeed_Auto = 1;
if(FanSpeedBak==0x05&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_Mid = 1,F_FanSpeed_Auto = 1;
if(FanSpeedBak==0x03&&OUT6_COMP) FanSpeed &= 0b11110000,F_FanSpeed_High = 1,F_FanSpeed_Auto = 1;
F_ColdDraft = 0;
}
if(Temp_Incoil<(37*2+80)&&Temp_Incoil>=(30*2+80))
{
if(!OUT0_LF) OUT0_LF = 1;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
F_FanSpeed_Low = 1;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
F_ColdDraft = 1;
}
if((Temp_Incoil<(30*2+80))&&Temp_Incoil!=0)
{
if(OUT0_LF) OUT0_LF = 0;
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
F_ColdDraft = 1;
}
}
}
}
/////////////////////////////////
void Ionizer_Run(void)
{
if(!F_SysMode_On) return;
if(F_Ionizer_Active)
{
if((OUT0_LF||OUT1_MF||OUT2_HF)&&(F_FanSpeed_Low||F_FanSpeed_Mid||F_FanSpeed_High))
{
if(!OUT3_ION) OUT3_ION = 1;
}
else
{
if(OUT3_ION) OUT3_ION = 0;
}
}
else
{
if(OUT3_ION) OUT3_ION = 0;
}
}
/////////////////////////////////
void FourWayValue_Run(void)
{
if(!F_SysMode_On) return;
if(F_Comp4WVFault)
{
if(OUT4_4WV&&SysTimerStr.Timer_40sComp4WVDiag==0)
{
OUT4_4WV = 0;
}
return;
}
if(F_SysMode_Heat)
{
/*if(F_Comp_On&&(OUT4_4WV==0))
{
//if(F_4WayValue_On==0)
//{
SysTimerStr.Timer_5sFourWayVOn = 5;
//}
F_4WayValue_On = 1;
OUT4_4WV = 1;
} */
if((F_Comp_On||F_PowDn3Minu)&&!OUT6_COMP&&!OUT4_4WV&&!OUT5_ODF&&SysTimerStr.Timer_60sCompOff==0)
{
OUT4_4WV = 1;
F_4WayValue_On = 1;
SysTimerStr.Timer_5sFourWayVOn = 5;
}
}
if((F_SysMode_Cool||F_SysMode_Fan||F_SysMode_Dry)&&!(F_RunMode_Heat&&F_SensorFault_P)) //debug
{
if(OUT4_4WV&&SysTimerStr.Timer_60sCompOff==0)
{
OUT4_4WV = 0;
F_4WayValue_On = 0;
}
}
}
/////////////////////////////////
void Comp_Run(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End||F_SensorFault_P) return;
if(F_SysMode_Heat&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(F_Comp_On&&!OUT6_COMP&&OUT4_4WV&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0
&&!F_BlnakingCHLed)
//&&F_RunMode_Heat==0)
{
OUT6_COMP = 1;
F_PowDn3Minu = 0;
if(F_Comp1thRun==0)
{
Ti_DSR = Temp_Incoil+2*2;
F_Comp1thRun = 1;
CompFault_Times = 0;
F_Diagnostic_End = 0;
SysTimerStr.Timer_15minCompLapsed = 15;
}
}
if(!OUT6_COMP||!F_Timer_180min) F_DT_Max = 0,SysTimerStr.Timer_15minCompRun = 15;
if(SysTimerStr.Timer_15minCompRun==0&&OUT6_COMP&&!F_DT_Max&&F_Timer_180min)
{
if(Temp_Incoil<Temp_Indoor)
{
DT_Max = 0;
}
else
{
DT_Max = Temp_Incoil-Temp_Indoor;
}
F_DT_Max = 1;
}
}
if(F_SysMode_Cool&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(F_Comp_On&&!OUT6_COMP&&OUT5_ODF&&SysTimerStr.Timer_2sOutFanRun==0&&
!F_BlnakingCHLed&&!F_FilterChoke)
{
OUT6_COMP = 1;
F_PowDn3Minu = 0;
SysTimerStr.Timer_10minCompRun = 10;
if(F_Comp1thRun==0)
{
Ti_DSR = Temp_Incoil-2*2;
F_Comp1thRun = 1;
CompFault_Times = 0;
F_Diagnostic_End = 0;
SysTimerStr.Timer_15minCompLapsed = 15;
}
}
}
if(!F_Comp_On&&OUT6_COMP&&!F_SysMode_Dry&&(SysTimerStr.Timer_120sCompRun==0))
{
OUT6_COMP = 0;
SysTimerStr.Timer_180sCompOff = 180; //comp 3min protect
SysTimerStr.Timer_60sCompOff = 60;
SysTimerStr.Timer_10minCompRun = 10;
}
}
/////////////////////////////////
void OutFan_Run(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End||F_SensorFault_P) return;
if(F_SysMode_Heat&&F_Comp_On&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(!OUT5_ODF&&!F_BlnakingCHLed&&OUT4_4WV&&SysTimerStr.Timer_5sFourWayVOn==0)
{
OUT5_ODF = 1;
F_OutFan_On = 1;
SysTimerStr.Timer_2sOutFanRun = 2;
}
}
if(F_SysMode_Cool&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu))
{
if(F_Comp_On&&!OUT5_ODF&&!F_BlnakingCHLed&&!F_FilterChoke)
{
OUT5_ODF = 1;
F_OutFan_On = 1;
SysTimerStr.Timer_2sOutFanRun = 2;
}
}
if((!F_Comp_On||F_Comp4WVFault)&&OUT5_ODF&&!F_SysMode_Dry&&!F_PowDn3Minu)
{
OUT5_ODF = 0;
}
}
/////////////////////////////////
void Off_Mode(void)
{
if(!F_SysMode_On)
{
if(OUT0_LF) OUT0_LF = 0,F_FanSpeed_Low = 0;
if(OUT1_MF) OUT1_MF = 0,F_FanSpeed_Mid = 0;
if(OUT2_HF) OUT2_HF = 0,F_FanSpeed_High = 0;
if(OUT3_ION) OUT3_ION = 0, F_Ionizer_Active = 0;
if(OUT5_ODF) OUT5_ODF = 0;
if(OUT6_COMP) OUT6_COMP = 0,SysTimerStr.Timer_60sCompOff = 60;
F_OutFan_On = 0;
F_Comp_On = 0;
if(SysTimerStr.Timer_60sCompOff==0&&OUT4_4WV)
{
OUT4_4WV = 0;
F_4WayValue_On = 0;
}
CompFault_Times = 0;
F_Disp_E4 = 0;
F_Comp4WVFault = 0;
F_BlnakingCHLed = 0;
F_Comp1thRun = 0;
F_Diagnostic_End = 1;
SysTimerStr.Timer_180sCompOff = 180;
Sleep_Time = 0;
SysTimerStr.Timer_5minSleepMode = 5;
if(F_SysHave_Off==0)
{
Steps_Time = 1;
Target_Steps=2000;
Current_Steps=3300;
}
F_SysHave_Off = 1;
return;
}
if(F_SysHave_Off)
{
if(EE_WTemp[3]==0&&EE_WTemp[4]>=1&&EE_WTemp[4]<=75)
{
Target_Steps_Bk = 3300-1260/10*(EE_WTemp[4]+1)/11;
Louver_Position = 0xff;
}
Steps_Time = 1;
Target_Steps=3300;
Current_Steps = 2000;
}
F_SysHave_Off = 0;
}
/////////////////////////////////
void UseData_Parse(void)
{
if(EE_WTemp[0]!=0x55)
{
uchar k;
for(k=0;k<10;k++)
{
EE_WTemp[k] = Factory_Data[k];
}
}
if(EE_WTemp[0]==0x55)
{
//Fan speed
FanSpeed &=0b11110000;
if(EE_WTemp[2]==0x01)
{
F_FanSpeed_Auto = 1;
F_FanSpeed_Low = 1;
FanSpeedBak = 0b00001001;
}
if(EE_WTemp[2]==0x02)
{
F_FanSpeed_High = 1;
FanSpeedBak = 0b00000010;
}
if(EE_WTemp[2]==0x04)
{
F_FanSpeed_Mid = 1;
FanSpeedBak = 0b00000100;
}
if(EE_WTemp[2]==0x08)
{
F_FanSpeed_Low = 1;
FanSpeedBak = 0b00001000;
}
if((FanSpeed&0b00001111)==0)
{
F_FanSpeed_High = 1;
FanSpeedBak = 0b00000010;
}
//stepper motor swing
if(EE_WTemp[3]>4&&EE_WTemp[3]!=15)
{
Louver_Position = 4;
}
else
{
Louver_Position = EE_WTemp[3];
}
if(EE_WTemp[3]==0)
{
if(EE_WTemp[4]>=1&&EE_WTemp[4]<=75)
{
Target_Steps_Bk = 3300-1260/10*(EE_WTemp[4]+1)/11;//3300-1260/11*(109-EE_WTemp[4])/10;
Louver_Position = 0xff;
Target_Steps=3300;
Current_Steps = 2000;
}
else
{
Target_Steps_Bk = 3300;
Louver_Position = 0xff;
}
}
//Ionizer
if(EE_WTemp[5]==0x05)
{
F_Ionizer_Active = 1;
}
if(EE_WTemp[5]==0)
{
F_Ionizer_Active = 0;
}
if(EE_WTemp[5]!=0x05&&EE_WTemp[5]!=0)
{
F_Ionizer_Active = 0;
}
//sleep status
if(EE_WTemp[6]==0x02)
{
F_SysFeature_Sleep = 1;
}
if(EE_WTemp[6]==0)
{
F_SysFeature_Sleep = 0;
}
if(EE_WTemp[6]!=0x02&&EE_WTemp[6]!=0)
{
F_SysFeature_Sleep = 0;
}
//set temperature
if(EE_WTemp[8]<112||EE_WTemp[8]>140)
{
EE_WTemp[8] = 128;
}
Disp_Temp[0] = Disp_Code[(EE_WTemp[8]-80)/2/10];
Disp_Temp[1] = Disp_Code[(EE_WTemp[8]-80)/2%10]&0b01111111;
Set_Temper = EE_WTemp[8];
SetTempBak = EE_WTemp[8];
if(Disp_Temp[1]==0x4f) Disp_Temp[1] = 0x79;
DispTemp0Bak = Disp_Temp[0];
DispTemp1Bak = Disp_Temp[1];
//Room temperature display option
if(EE_WTemp[9]==0x02)
{
F_RoomTemper_Disp = 1;
}
if(EE_WTemp[9]==0x01)
{
F_RoomTemper_Disp = 0;
}
if(EE_WTemp[9]!=0x02&&EE_WTemp[9]!=0x01)
{
F_RoomTemper_Disp = 0;
}
//Mode
SysRunMode &= 0b11100000;
if(EE_WTemp[7]==0x01)
{
F_SysMode_Dry = 1;
SysModeBak = 0b00000001;
}
if(EE_WTemp[7]==0x02)
{
F_SysMode_Cool = 1;
SysModeBak = 0b00000010;
}
if(EE_WTemp[7]==0x04)
{
F_SysMode_Fan = 1;
SysModeBak = 0b00000100;
}
if(EE_WTemp[7]==0x08&&F_Hard_Heatpump)
{
F_SysMode_Heat = 1;
SysModeBak = 0b00001000;
}
if(EE_WTemp[7]==0x0A)
{
F_SysMode_Auto = 1;
SysModeBak = 0b00001010;
}
if((SysRunMode&0b00011111)==0)
{
F_SysMode_Cool = 1;
SysModeBak = 0b00000010;
}
//System status
if(EE_WTemp[1]!=0x08&&EE_WTemp[1]!=0)
{
EE_WTemp[1] = 0;
}
if(EE_WTemp[1]==0x08&&!F_Hard_DefaultOff)
{
F_SysMode_On = 1; //system on
}
if(EE_WTemp[1]==0)
{
F_SysMode_On = 0; //system off
}
}
}
/////////////////////////////////
void OutdoorCoil_Defrost_Judge(void)
{
if(!F_SysMode_On||!F_SysMode_Heat||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End) return;
if(SysTimerStr.Timer_150sTiTemp==0) CompTimeTotal = 0;
if((CompTimeTotal>20)&&F_DT_Max) //debug CompTimeTotal>45
{
if(OUT2_HF)
{
if(((Temp_Incoil-Temp_Indoor)*100)<(DT_Max*75)&&
(Temp_Incoil<Temp_Indoor+20*2)&&
(Temp_Incoil<(43*2+80)))
{
F_Defrost_Start = 1;
return;
}
}
if(OUT1_MF)
{
if(((Temp_Incoil-Temp_Indoor)*100)<(DT_Max*75)&&
(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)*100)<(DT_Max*75)&&
(Temp_Incoil<Temp_Indoor+22*2)&&
(Temp_Incoil<(43*2+80)))
{
F_Defrost_Start = 1;
return;
}
}
}
if((CompTimeTotal>180)&&F_DT_Max)
{
if(OUT2_HF)
{
if((Temp_Incoil<Temp_Indoor+20*2)&&
(Temp_Incoil<(43*2+80)))
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?