sysfunction.c

来自「用FreeScale 的MC9S08FL16RM MCU设计的一种家用空调控制器」· C语言 代码 · 共 2,177 行 · 第 1/4 页

C
2,177
字号
#include 	"derivative.h"
#include	"Predefine.h"
#include  "systimer.h"
#include  "motorun.h"

/////////////////////////////////
void OnBoard_Button_Judge(void)
{
  if(ButtnPrss)
  {
		F_HaveButtnPrss = 0;
    if(F_HaveButtnPrssd&&SysTimerStr.Timer_60sPowerOn==0&&SysTimerStr.Timer_5sKey2On==0&&F_3sProgKey==0)
      {
       	F_5sKey = 1;
      	ButtnPrss_Cnt = 0;
       	F_ButtnFuctOn = 0;
       	F_HaveButtnPrss = 0;
       	F_HaveButtnPrssd = 0;
       	return;
      }
    if((F_HaveButtnPrssd)&&(SysTimerStr.Timer_60sPowerOn!=0)&&(SysTimerStr.Timer_3sKey==0))
    {
    	F_3sProgKey = 1;
      ButtnPrss_Cnt = 0;
      F_ButtnFuctOn = 0;
      F_HaveButtnPrss = 0;
      F_HaveButtnPrssd = 0;
      return;
    }
    if(F_3sProgKey&&F_HaveButtnPrssd&&(SysTimerStr.Timer_3sKey==0))
    {
    	F_3sKey = 1;
      ButtnPrss_Cnt = 0;
      F_ButtnFuctOn = 0;
      F_HaveButtnPrss = 0;
      F_HaveButtnPrssd = 0;
      return;
    }
   	if(F_HaveButtnPrssd)
   	{
   		ButtnPrss_Cnt++;
   		F_HaveButtnPrss = 0;
   		F_HaveButtnPrssd = 0;
     	F_ButtnFuctOn = 1;
     	return; 
   	}
   	if(F_HaveButtnPrssd==0)
   	{
   		SysTimerStr.Timer_5sKey2On = 5;
      SysTimerStr.Timer_3sKey = 3;
   	}
  }
  if(ButtnPrss==0)
  {
    if(F_HaveButtnPrss)
    {
      if(SysTimerStr.Timer_20msButtnPrss == 0)
      {
        if(ButtnPrss==1)
        {
          F_HaveButtnPrss = 0;
          F_HaveButtnPrssd = 0;
          F_ButtnFuctOn = 0;
          SysTimerStr.Timer_5sKey2On = 5;
          SysTimerStr.Timer_3sKey = 3;
          return;
        } 
        else
        {
          if(F_HaveButtnPrssd==0)
          {
            F_HaveButtnPrssd = 1;
            F_Buzzer = 1;
            BuzzerTime = 400;
            SysTimerStr.Timer_3sKey = 3;
            SysTimerStr.Timer_5sKey2On = 5;
          }
        }
      }
      else
      {
        return;
      }
    }
    else
    {
      SysTimerStr.Timer_20msButtnPrss = 4;
      F_HaveButtnPrss = 1;
    }
  }
}
//===============================
void OnBoard_Button_Function(void)
{
  if(F_5sKey&&F_ButtnFuctOn)
  {
  	F_ButtnFuctOn = 0;
  	F_5sKey = 0;
  	Disp_Temp[0] = DispTemp0Bak;
	  Disp_Temp[1] = DispTemp1Bak;
  }
  if(F_3sProgKey&&F_ButtnFuctOn)
  {
  	F_ButtnFuctOn = 0;
  	F_3sProgKey = 0;
  	if(Disp_Temp[0]==0xA4)	EE_WTemp[9] = 2;
  	if(Disp_Temp[1]==0xF9)	EE_WTemp[9] = 1; 
  	F_UseData_Update = 1;
    SysTimerStr.Timer_2sUserdataUpdate = 2;
    Disp_Temp[0] = DispTemp0Bak;
	  Disp_Temp[1] = DispTemp1Bak;
  }
  if(F_ButtnFuctOn==0)   return;
  	F_ButtnFuctOn = 0;
  if((F_Hard_Coolonly)&&(ButtnPrss_Cnt!=0))
  {
    if(ButtnPrss_Cnt>3) ButtnPrss_Cnt = 1;
    SysRunMode &= 0b11100000;
    FanSpeed &= 0b11110000;
    switch(ButtnPrss_Cnt)
    {
      case  1:
        //F_SysMode_Cool = 1;	//Cool mode
        SysModeBak = 0b00100001;
        SysRunMode = 0b00100001;
        Set_Temper = 22*2+80;
        if(F_SysFeature_Sleep)	Set_Temper+=SetTempSleep;
        SetTempBak = Set_Temper;
    		Disp_Temp[0] = Disp_Code[2];
    		Disp_Temp[1] = Disp_Code[2]&0b01111111;
    		DispTemp0Bak = Disp_Temp[0];
  			DispTemp1Bak = Disp_Temp[1];
      	F_Blanking_SetTemp = 1;
    		F_FanSpeed_Auto = 1;	//Fan speed--Auto
    		F_FanSpeed_Low = 1;
    		FanSpeedBak = 0b00001001;
    		Louver_Position = 15;	//DC swing ON
    		EE_WTemp[1] = 0x08;	//system on or off status
    		EE_WTemp[2] = 0x01;	//Fan speed
    		EE_WTemp[3] = 15;		//stepper motor swing
    		EE_WTemp[7] = 0x02;	//mode
    		EE_WTemp[8] = Set_Temper;	//set temperature
    		Sleep_Time = 0;
    		SysTimerStr.Timer_5minSleepMode = 5;
        break;
      case  2:
        //F_SysMode_Fan = 1;	//Fan mode
        SysModeBak = 0b00000010;
        SysRunMode = 0b00100010;
    		Louver_Position = 15;	//DC swing ON
    		F_FanSpeed_High = 1; //Fan speed--High
    		FanSpeedBak = 0b00000010;
    		EE_WTemp[1] = 0x08;	//system on or off status
    		EE_WTemp[2] = 0x02;	//Fan speed
    		EE_WTemp[3] = 15;		//stepper motor swing
    		EE_WTemp[7] = 0x04;	//mode
    		EE_WTemp[8] = 24*2+80;	//set temperature
    		Sleep_Time = 0;
    		SysTimerStr.Timer_5minSleepMode = 5;	
        break;
    	default:
        F_SysMode_On = 0;		//Off mode
    		EE_WTemp[1] = 0x00;	//system on or off status
    		//EE_WTemp[2] = 0x02;	//Fan speed
    		//EE_WTemp[3] = 0;		//stepper motor swing
    		//EE_WTemp[7] = 0x04;	//mode
    		//EE_WTemp[8] = 24*2+80;	//set temperature
    		break;
    }
    EE_WTemp[0] = 0x55;	//head data
    F_OnTimer_Active = 0;
    F_OffTimer_Active = 0;
    F_UseData_Update = 1;
    SysTimerStr.Timer_2sUserdataUpdate = 2;
  }
  if((F_Hard_Heatpump)&&(ButtnPrss_Cnt!=0))
  {
    if(ButtnPrss_Cnt>4) ButtnPrss_Cnt = 1;
    SysRunMode &= 0b11100000;
    FanSpeed &= 0b11110000;
    switch(ButtnPrss_Cnt)
    {
      case  1:
        //F_SysMode_Cool = 1;		//Cool mode
        SysModeBak = 0b00000001;
        SysRunMode = 0b00100001;
        Set_Temper = 22*2+80;
        if(F_SysFeature_Sleep)	Set_Temper+=SetTempSleep;
        SetTempBak = Set_Temper;
    		Disp_Temp[0] = Disp_Code[2];
    		Disp_Temp[1] = Disp_Code[2]&0b01111111;
    		DispTemp0Bak = Disp_Temp[0];
  			DispTemp1Bak = Disp_Temp[1];
      	F_Blanking_SetTemp = 1;
    		F_FanSpeed_Auto = 1;	//Fan speed--Auto
    		F_FanSpeed_Low = 1;
    		FanSpeedBak = 0b00001001;
    		Louver_Position = 15;	//DC swing ON
    		EE_WTemp[1] = 0x08;	//system on or off status
    		EE_WTemp[2] = 0x01;	//Fan speed
    		EE_WTemp[3] = 15;		//stepper motor swing
    		EE_WTemp[7] = 0x02;	//mode
    		EE_WTemp[8] = Set_Temper;	//set temperature
    		Sleep_Time = 0;
    		SysTimerStr.Timer_5minSleepMode = 5;
        break;
      case  2:
        //F_SysMode_Fan = 1;		//Fan mode
        SysModeBak = 0b00000010;
        SysRunMode = 0b00100010;
    		Louver_Position = 15;	//DC swing ON
    		F_FanSpeed_High = 1; //Fan speed--High
    		FanSpeedBak = 0b00000010;
    		EE_WTemp[1] = 0x08;	//system on or off status
    		EE_WTemp[2] = 0x02;	//Fan speed
    		EE_WTemp[3] = 15;		//stepper motor swing
    		EE_WTemp[7] = 0x04;	//mode
    		EE_WTemp[8] = 24*2+80;	//set temperature
    		Sleep_Time = 0;
    		SysTimerStr.Timer_5minSleepMode = 5;
        break;
      case  3:
        //F_SysMode_Heat = 1;	//Heat mode
        SysModeBak = 0b00001000;
        SysRunMode = 0b00101000;
				Set_Temper = 24*2+80;
				if(F_SysFeature_Sleep)	Set_Temper-=SetTempSleep;
				SetTempBak = Set_Temper;
    		Disp_Temp[0] = Disp_Code[2];
    		Disp_Temp[1] = Disp_Code[4]&0b01111111;
    		DispTemp0Bak = Disp_Temp[0];
  			DispTemp1Bak = Disp_Temp[1];
      	F_Blanking_SetTemp = 1;
    		F_FanSpeed_Auto = 1;	//Fan speed--Auto
    		F_FanSpeed_Low = 1;
    		FanSpeedBak = 0b00001001;
    		Louver_Position = 15;	//DC swing ON
    		EE_WTemp[1] = 0x08;	//system on or off status
    		EE_WTemp[2] = 0x01;	//Fan speed
    		EE_WTemp[3] = 15;		//stepper motor swing
    		EE_WTemp[7] = 0x08;	//mode
    		EE_WTemp[8] = Set_Temper;	//set temperature
    		Sleep_Time = 0;
    		SysTimerStr.Timer_5minSleepMode = 5;
        break;
    	default:
        F_SysMode_On = 0;
        EE_WTemp[1] = 0x00;	//system on or off status
    		//EE_WTemp[2] = 0x02;	//Fan speed
    		//EE_WTemp[3] = 0;		//stepper motor swing
    		//EE_WTemp[7] = 0x04;	//mode
    		//EE_WTemp[8] = 24*2+80;	//set temperature
    		break;
    }
    EE_WTemp[0] = 0x55;	//head data
    F_OnTimer_Active = 0;
    F_OffTimer_Active = 0;
    F_UseData_Update = 1;
    SysTimerStr.Timer_2sUserdataUpdate = 2;
  }       																	
}
//===============================
//===============================
void Timer_OnOff(void)
{
	if(SysTimerStr.Timer_60sRTCCnt==0)
	{
		SysTimerStr.Timer_60sRTCCnt = 60;
		RTC_Minu++;
		if(RTC_Minu>=60)	RTC_Minu = 0,RTC_Hour++;
		if(RTC_Hour>=24)  RTC_Hour = 0;
	}
	if(F_OnTimer_Active&&SysTimerStr.Timer_60sTimeDelay==0)
	{
		if(OnTimer_Hour==RTC_Hour&&OnTimer_Minu==RTC_Minu)
		{
			F_SysMode_On = 1;
			SysTimerStr.Timer_60sTimeDelay = 60;
		}
	}
	if(F_OffTimer_Active&&SysTimerStr.Timer_60sTimeDelay==0)
	{
		if(OffTimer_Hour==RTC_Hour&&OffTimer_Minu==RTC_Minu)
		{
			F_SysMode_On = 0;
			SysTimerStr.Timer_60sTimeDelay = 60;
		}
	}
}
//===============================
//===============================
void	Sleep_Mode(void)
{
	if(F_SysFeature_Sleep)
	{
		if(Sleep_Time==0)	SetTempSleep = 0;
		if(F_SysMode_Cool&&!F_SysMode_Auto)
		{
			if(SysTimerStr.Timer_60sSleep==0)
			{
				SysTimerStr.Timer_60sSleep = 60;
				Sleep_Time++;
				if(Sleep_Time==60&&Set_Temper==SetTempBak)  Set_Temper+=2,SetTempSleep+=2; 
				if(Sleep_Time>60&&Sleep_Time<120&&Set_Temper!=SetTempBak)	SetTempBak = Set_Temper;
				if(Sleep_Time==120&&Set_Temper==SetTempBak)  Set_Temper+=2,SetTempSleep+=2;
				if(Sleep_Time>120&&Set_Temper!=SetTempBak)	SetTempBak = Set_Temper;
			}
			return;
		}
		if(F_SysMode_Heat&&!F_SysMode_Auto)
		{
			if(SysTimerStr.Timer_60sSleep==0)
			{
				SysTimerStr.Timer_60sSleep = 60;
				Sleep_Time++;
				if(Sleep_Time==60&&Set_Temper==SetTempBak)	Set_Temper-=2,SetTempSleep+=2;
				if(Sleep_Time>60&&Sleep_Time<120&&Set_Temper!=SetTempBak)	SetTempBak = Set_Temper;
				if(Sleep_Time==120&&Set_Temper==SetTempBak)	Set_Temper-=2,SetTempSleep+=2;
				if(Sleep_Time>120&&Set_Temper!=SetTempBak)	SetTempBak = Set_Temper;
			}
			return;
		}
		else
		{
			SetTempSleep = 0;
			F_SysFeature_Sleep = 0;
		}
	} 
	else
	{
	  SetTempSleep = 0;
	  SysTimerStr.Timer_5minSleepMode = 5;
	}
}
//===============================
//===============================
void	Comp_Protect(void)  //comp protect
{
	if(!F_SysMode_On)	return;
	if(F_SysMode_Cool)
	{
	  if(OUT6_COMP&&SysTimerStr.Timer_60sFChoke==0&&SysTimerStr.Timer_10minCompRun==0)
	  {
	    OUT6_COMP = 0;
	    OUT5_ODF = 0;
	    F_FilterChoke = 1;
	    F_Blanking_Frost = 1;
	    F_Comp_On = 0;
	  }
	  if(F_FilterChoke&&OUT6_COMP==0&&SysTimerStr.Timer_60sFChokeST==0)
	  {
	    OUT6_COMP = 1;
	    OUT5_ODF = 1;
	    F_FilterChoke = 0;
	    F_Blanking_Frost = 0;
	    F_Comp_On = 1;
	  }
	}
}
/////////////////////////////////
void Sensor_Fault(void)
{
	if(!F_SysMode_On||F_Defrost_Start||F_Defrost_End) return;	//in defrost cycle bypass checking sensor fault
	if(F_Incoil_Fault||F_Indoor_Fault)
	{
		//OUT5_ODF = 0;
		//OUT6_COMP = 0;
		F_SensorFault_P = 1;
		SysRunMode &= 0b11100000;
		F_SysMode_Fan = 1; //force to run fan mode
		F_FanSpeed_Low = 1;
		F_FanSpeed_Mid = 0;
		F_FanSpeed_High = 0;
		if(F_Incoil_Fault) F_Disp_E2 = 1;
		if(F_Indoor_Fault) F_Disp_E1 = 1;
	}
	if((!F_Incoil_Fault||!F_Indoor_Fault)&&F_SensorFault_P)
	{
		if(!F_Incoil_Fault&&!F_Indoor_Fault)
		{
			F_SensorFault_P = 0;
			F_FanSpeed_Low = 0;
			if((FanSpeedBak&0b00000001)!=0)	FanSpeed |= 0b00001000;	
			FanSpeed |= (FanSpeedBak>>1);
			SysRunMode &= 0b11100000;
			if(SysModeBak==0x01)	F_SysMode_Dry = 1;
			if(SysModeBak==0x02)  F_SysMode_Cool = 1;
			if(SysModeBak==0x04)  F_SysMode_Fan = 1;
			if(SysModeBak==0x08)  F_SysMode_Heat = 1;
			if(SysModeBak==0x0A)  F_SysMode_Auto =1;
			SysTimerStr.Timer_180sCompOff = 180;
 			F_Disp_E2 = 0;
 			F_Disp_E1 = 0;
		}
		if(!F_Incoil_Fault) F_Disp_E2 = 0;
		if(!F_Indoor_Fault) F_Disp_E1 = 0;
	}
}
//===============================
//===============================
void  IRRun(void)
{
  if(F_IRLcdEnd&&F_3sProgKey)
  {
    F_IRLcdErr = 1;
    Set_Temper = (IRLcdTempH*10+IRLcdTempL)*2+80;
    if(IRLcdFeature&0x08) 
    {
    	F_3sProgKey = 0;
    	DispTemp0Bak = Disp_Temp[0];
  		DispTemp1Bak = Disp_Temp[1];
    }											 	
   	goto _IRLcdErr;
  }
  if(F_IRLcdEnd)
  {
  	F_IRLcdErr = 1;
  	
    //check
    if((IRLcdIDL!=6)||(IRLcdIDH!=1)) goto _IRLcdErr;
    IRLcdCkSumBuf = IRLcdIDL + IRLcdIDH + IRLcdMode + IRLcdFanSpeed
    								+ IRLcdRTCML + IRLcdRTCMH + IRLcdRTCHL + IRLcdRTCHH
    								+ IRLcdOnTHL + IRLcdOnTHH + IRLcdOffTHL + IRLcdOffTHH
    								+ IRLcdTempL + IRLcdTempH + IRLcdFeature;
    IRLcdCkSumBuf&=0x0F;                
    if(IRLcdCK!=IRLcdCkSumBuf) goto _IRLcdErr;
    IRLcdCkSumBuf = IRLcdOnTML + IRLcdOnTMH + IRLcdOffTML + IRLcdOffTMH
                    + ScreenOnOff + Louver + IRLcdFTempL + IRLcdFTempH
                    + IRLcdVFanSpd + IRLcdIon + IRLcdIDCode + IRLcdRevd0
                    + IRLcdRevd1 + IRLcdRevd2 + IRLcdRevd3; 		
    IRLcdCkSumBuf&=0x0F;  
    if(IRLcdCKSum!=IRLcdCkSumBuf) goto _IRLcdErr; 
    if((IRLcdFanSpeed!=0x01)&&(IRLcdFanSpeed!=0x02)&&(IRLcdFanSpeed!=0x04)&&(IRLcdFanSpeed!=0x08)) goto _IRLcdErr; 
    if((IRLcdTempH*10+IRLcdTempL)<16) goto _IRLcdErr; 
    if((IRLcdTempH*10+IRLcdTempL)>30) goto _IRLcdErr;               
    if(F_Hard_Normal&&IRLcdIDCode==0x0B) goto _IRLcdErr;
  	if(F_Hard_ID_A&&IRLcdIDCode==0)	goto _IRLcdErr;                 
    
    
    //mode process
    SysRunMode &= 0b11100000;
    if(IRLcdMode==0x01)   
    {
      if((SysModeBak&0b00001110)!=0)	
      {
      	Sleep_Time = 0;
      	SysTimerStr.Timer_5minSleepMode = 5;
      }
      F_SysMode_Dry = 1;
      SysModeBak = 0b00000001;	
    }
    if(IRLcdMode==0x02)                
    {
      if((SysModeBak&0b00001101)!=0)	
      {
      	Sleep_Time = 0;
      	SysTimerStr.Timer_5minSleepMode = 5;
      }
      F_SysMode_Cool = 1;
      SysModeBak = 0b00000010;
    }
    if(IRLcdMode==0x04)
    {
      if((SysModeBak&0b00001011)!=0)	
      {
      	Sleep_Time = 0;
      	SysTimerStr.Timer_5minSleepMode = 5;
      }
      F_SysMode_Fan = 1;
      SysModeBak = 0b00000100;
    }
    if(IRLcdMode==0x08&&F_Hard_Heatpump)
    {
      if((SysModeBak&0b00000111)!=0)	
      {
      	Sleep_Time = 0;
      	SysTimerStr.Timer_5minSleepMode = 5;	
      }
      F_SysMode_Heat = 1;
      SysModeBak = 0b00001000;
    }
    if(IRLcdMode==0x0A)
    {
      if((SysModeBak&0b00000101)!=0)	
      {
      	Sleep_Time = 0;
      	SysTimerStr.Timer_5minSleepMode = 5;
      }
      F_SysMode_Auto = 1;
      SysModeBak = 0b00001010;  
    }
    //Fan Speed process
    FanSpeedBak = FanSpeed;
    FanSpeedBak &= 0b00001111;
    FanSpeed &= 0b11110000;
    if(IRLcdFanSpeed==0x01)
    {
    	FanSpeed = FanSpeedBak;
    	F_FanSpeed_Auto = 1; 
    	//F_FanSpeed_Low = 1;
    	FanSpeedBak |= 0b00001001;
    }
    if(IRLcdFanSpeed==0x02)
    {
    	F_FanSpeed_High = 1;
    	FanSpeedBak = 0b00000010;
    }
    if(IRLcdFanSpeed==0x04)
    {
    	F_FanSpeed_Mid = 1;
    	FanSpeedBak = 0b00000100;
    }
    if(IRLcdFanSpeed==0x08)
    {
    	F_FanSpeed_Low = 1;
    	FanSpeedBak = 0b00001000;
    }
    //开关睡眠状态处理
    if(IRLcdFeature&0x08)
    {
      if(F_SysMode_On)
      {
        //F_SysFeature_OnOff = 0;		//system off
        F_SysMode_On = 0;
        Sleep_Time = 0;
        SysTimerStr.Timer_5minSleepMode = 5;
      }
      else
      {
        //F_SysFeature_OnOff = 1;		//system on
        F_SysMode_On = 1;
        F_Dry1thRun = 1;
        Sleep_Time = 0;
        SysTimerStr.Timer_5minSleepMode = 5;
      }
    }
    if(IRLcdFeature&0x02)
    {
    	F_SysFeature_Sleep = 1;
    	Disp_Temp[2]&=0b11111011;
    }
    else
    {
    	F_SysFeature_Sleep = 0;
    	Disp_Temp[2]|=0b00000100;

⌨️ 快捷键说明

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