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 + -
显示快捷键?