sysfunction.c
来自「用FreeScale 的MC9S08FL16RM MCU设计的一种家用空调控制器」· C语言 代码 · 共 2,177 行 · 第 1/4 页
C
2,177 行
}
//RTC process
RTC_Minu = IRLcdRTCMH*10 + IRLcdRTCML;
RTC_Hour = IRLcdRTCHH*10 + IRLcdRTCHL;
//temperature process
Set_Temper = (IRLcdTempH*10+IRLcdTempL)*2+80;
if(F_SysFeature_Sleep&&F_SysMode_Cool) Set_Temper+=SetTempSleep;
if(F_SysFeature_Sleep&&F_SysMode_Heat) Set_Temper-=SetTempSleep;
SetTempBak = Set_Temper;
Disp_Temp[0] = Disp_Code[IRLcdTempH];
Disp_Temp[1] = (Disp_Code[IRLcdTempL] & 0b01111111);
if(IRLcdTempL==1) Disp_Temp[1] = 0x79;
DispTemp0Bak = Disp_Temp[0];
DispTemp1Bak = Disp_Temp[1];
//timer process
if(IRLcdOnTHH&0x08)
{
OnTimer_Hour = (IRLcdOnTHH&0x03)*10 + IRLcdOnTHL;
OnTimer_Minu = IRLcdOnTMH*10 + IRLcdOnTML;
F_OnTimer_Active = 1;
}
else
{
F_OnTimer_Active = 0;
}
if(IRLcdOffTHH&0x08)
{
OffTimer_Hour = (IRLcdOffTHH&0x03)*10 + IRLcdOffTHL;
OffTimer_Minu = IRLcdOffTMH*10 + IRLcdOffTML;
F_OffTimer_Active = 1;
}
else
{
F_OffTimer_Active = 0;
}
//Louver
Louver_Position = Louver;
//Ionizer
if(IRLcdIon==0x05)
{
F_Ionizer_Active = 1;
}
else
{
F_Ionizer_Active = 0;
}
//ID Code
if(IRLcdIDCode==0x0A)
{
F_ID_A_Code = 1;
}
else
{
F_ID_A_Code = 0;
}
//received IR data
F_5sKey = 0;
F_Buzzer = 1; //active Buzzer
BuzzerTime = 400;
//save IR data
EE_WTemp[0] = 0x55; //head data
if(F_SysMode_On) EE_WTemp[1] = 0x08;
if(!F_SysMode_On) EE_WTemp[1] = 0x00; //system on or off status
EE_WTemp[2] = IRLcdFanSpeed; //Fan speed
EE_WTemp[3] = Louver; //stepper motor swing
EE_WTemp[5] = IRLcdIon; //Ionizer
EE_WTemp[6] = IRLcdFeature&0b00000010; //sleep
EE_WTemp[7] = IRLcdMode; //mode
EE_WTemp[8] = Set_Temper; //set temperature
F_UseData_Update = 1;
SysTimerStr.Timer_2sUserdataUpdate = 2;
F_Blanking_SetTemp = 1;
}
else
{
TPM2C1SC = 0b01001000; //Enable IR RX
}
if(F_IRLcdErr)
{
_IRLcdErr:
F_IRLcdErr = 0;
F_IRLcdHead1_OK = 0;
F_IRLcdHead2_OK = 0;
F_IRLcd1End = 0;
F_IRLcdEnd = 0;
IrStr.IRLcdBitCnt = 0;
IRLcdIDL = 0;
IRLcdIDH = 0;
IRLcdMode = 0;
IRLcdFanSpeed = 0;
IRLcdRTCML = 0;
IRLcdRTCMH = 0;
IRLcdRTCHL = 0;
IRLcdRTCHH = 0;
IRLcdOnTHL = 0;
IRLcdOnTHH = 0;
IRLcdOffTHL = 0;
IRLcdOffTHH = 0;
IRLcdTempL = 0;
IRLcdTempH = 0;
IRLcdFeature = 0;
IRLcdCK = 0;
IRLcdOnTML = 0;
IRLcdOnTMH = 0;
IRLcdOffTML = 0;
IRLcdOffTMH = 0;
ScreenOnOff = 0;
Louver = 0;
IRLcdFTempL = 0;
IRLcdFTempH = 0;
IRLcdVFanSpd = 0;
IRLcdIon = 0;
IRLcdRevd0 = 0;
IRLcdIDCode = 0;
IRLcdRevd1 = 0;
IRLcdRevd2 = 0;
IRLcdRevd3 = 0;
IRLcdCKSum = 0;
TPM2C1SC = 0b01001000; //Enable IR RX
}
}
/////////////////////////////////
void Louver_Ctrl(void)
{
if(Target_Steps==0&&Target_Steps!=Current_Steps) return;
if(Target_Steps==0&&Current_Steps==0) Current_Steps = 2000,Target_Steps = 3300;
if(!F_SysMode_On) return;
if(Target_Steps==3300&&((Target_Steps-Current_Steps)*11/126)<=61) F_Louver60C = 1;
else F_Louver60C = 0;
if(Target_Steps==3300&&Target_Steps!=Current_Steps)
{
F_Louver110C = 1;
return;
}
else F_Louver110C = 0;
if(Louver_Position==0xff&&(Current_Steps==3300||Current_Steps==2000))
{
Steps_Time = 2;
Target_Steps = Target_Steps_Bk;
return;
}
Steps_Time = 2;
if(Louver_Position==0)
{
if(EE_WTemp[3]==0)
{
if(Current_Steps>Target_Steps) EE_WTemp[4] = 110-(uchar)((Current_Steps-Target_Steps)*11/126)-35;
if(Current_Steps<Target_Steps) EE_WTemp[4] = (uchar)((Target_Steps-Current_Steps)*11/126);
}
Target_Steps_Bk = Target_Steps;
Current_Steps_Bk = Current_Steps;
Target_Steps = Current_Steps;
F_Louver_Pause = 1;
F_LouverAuto = 0;
}
if(Louver_Position==1)
{
if(F_Louver_Pause)
{
Target_Steps = Target_Steps_Bk;
Current_Steps = Current_Steps_Bk;
F_Louver_Pause = 0;
}
Target_Steps = 2000 + 401;
F_LouverAuto = 0;
}
if(Louver_Position==2)
{
Target_Steps = 2000 + 401 + 252;
F_LouverAuto = 0;
}
if(Louver_Position==3)
{
Target_Steps = 2000 + 401 + 252 + 252;
F_LouverAuto = 0;
}
if(Louver_Position==4)
{
Target_Steps = 2000 + 401 + 252 + 252 + 355; //3260
F_LouverAuto = 0;
}
if(Louver_Position==15&&(OUT0_LF||OUT1_MF||OUT2_HF))
{
if(F_LouverAuto==0&&Current_Steps>2041&&Current_Steps<3260)
{
F_LouverAuto = 1;
Target_Steps = 1260 + 2000;
}
if(Current_Steps<=(2000+401))
{
Target_Steps = 1260 + 2000;
}
if(Current_Steps>=3260)
{
Target_Steps = 3260 - 1260 +401;
}
}
}
/////////////////////////////////
void Fan_Mode(void)
{
if(!F_SysMode_On||F_Defrost_Start||F_Defrost_End) return;
if(F_SysMode_Fan||F_BlnakingCHLed)
{
if(OUT6_COMP) OUT6_COMP = 0; //in fan mode,comp,outfan and four way value will
if(OUT5_ODF) OUT5_ODF = 0; //be turned off
F_OutFan_On = 0;
SysTimerStr.Timer_180sCompOff = 180; //comp 3min protect
}
}
/////////////////////////////////
void Fan_Run(void)
{
if(!F_SysMode_On||F_Defrost_Start||F_Defrost_End||F_Louver60C) return;
if(F_SysMode_Fan||(F_SysMode_Cool&&OUT6_COMP&&!F_FanSpeed_Auto)||F_BlnakingCHLed||
F_Comp4WVFault||(F_SysMode_Heat&&OUT6_COMP&&!F_FanSpeed_Auto&&!F_ColdDraft))//fan mode or comp on
{
if(F_FanSpeed_Low&&!OUT0_LF&&(OUT1_MF||OUT2_HF)&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60; //fan speed switching delay
}
if(F_FanSpeed_Low&&!OUT0_LF&&!OUT1_MF&&!OUT2_HF&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 1;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if(F_FanSpeed_Mid&&!OUT1_MF&&(OUT0_LF||OUT2_HF)&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
}
if(F_FanSpeed_Mid&&!OUT0_LF&&!OUT1_MF&&!OUT2_HF&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if(F_FanSpeed_High&&!OUT2_HF&&(OUT1_MF||OUT0_LF)&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
}
if(F_FanSpeed_High&&!OUT0_LF&&!OUT1_MF&&!OUT2_HF&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 1;
SysTimerStr.Timer_2sFanRun = 3;
}
}
//=============================
if(F_SysMode_Cool)
{
if(F_Comp4WVFault||F_BlnakingCHLed) return;
if(!OUT6_COMP&&!OUT0_LF&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 1; //comp cut off,indoor fan run at low fan speed
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60; //fan speed switching delay
//F_FanSpeed_Low = 1;
//F_FanSpeed_Mid = 0;
//F_FanSpeed_High = 0;
//FanSpeedBak = 0b00001000;
}
//-------------------------------
if(OUT6_COMP) //comp on
{
if(F_FanSpeed_Auto) //Auto fan speed
{
if((Temp_Indoor>=(Set_Temper+2))&&F_FanSpeed_Low&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Mid = 1;
F_FanSpeed_Low = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00000101;
}
if(!OUT1_MF&&F_FanSpeed_Mid&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if((Temp_Indoor>=(Set_Temper+6))&&F_FanSpeed_Mid&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_High = 1;
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 0;
FanSpeedBak = 0b00000011;
}
if(!OUT2_HF&&F_FanSpeed_High&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 1;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if((Temp_Indoor<=(Set_Temper+4))&&F_FanSpeed_High&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Mid = 1;
F_FanSpeed_Low = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00000101;
}
/*if((OUT1_MF==0)&&(F_FanSpeed_Mid==1)&&(SysTimerStr.Timer_300msFanSpdSW==0))
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
}*/
//-------------------------------
if((Temp_Indoor<=(Set_Temper+0))&&F_FanSpeed_Mid&&SysTimerStr.Timer_2sFanRun==0)
{
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Low = 1;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00001001;
}
if(!OUT0_LF&&F_FanSpeed_Low&&SysTimerStr.Timer_300msFanSpdSW==0)
{
OUT0_LF = 1;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
}
}
}
//===========================
if(F_SysMode_Heat)
{
if(F_Comp4WVFault||F_BlnakingCHLed) return;
if(!OUT6_COMP&&!F_ColdDraft&&SysTimerStr.Timer_2sFanRun==0)
{
if(!OUT0_LF) OUT0_LF = 1; //comp cut off,indoor fan run at low fan speed
if(OUT1_MF) OUT1_MF = 0;
if(OUT2_HF) OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60; //fan speed switching delay
//F_FanSpeed_Low = 1;
//F_FanSpeed_Mid = 0;
//F_FanSpeed_High = 0;
//FanSpeedBak = 0b00001000;
}
//-------------------------------
if(OUT6_COMP) //comp on
{
if(F_FanSpeed_Auto&&F_ColdDraft==0) //Auto fan speed
{
if((Set_Temper>=(Temp_Indoor+2))&&F_FanSpeed_Low&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Mid = 1;
F_FanSpeed_Low = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00000101;
}
if(!OUT1_MF&&F_FanSpeed_Mid&&SysTimerStr.Timer_300msFanSpdSW==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if((Set_Temper>=(Temp_Indoor+6))&&F_FanSpeed_Mid&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_High = 1;
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 0;
FanSpeedBak = 0b00000011;
}
if(!OUT2_HF&&F_FanSpeed_High&&SysTimerStr.Timer_300msFanSpdSW==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 1;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if((Set_Temper<=(Temp_Indoor+4))&&F_FanSpeed_High&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 1;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00000101;
}
/*if((OUT1_MF==0)&&(F_FanSpeed_Mid==1)&&(SysTimerStr.Timer_300msFanSpdSW==0))
{
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
}*/
//-------------------------------
if((Set_Temper<=(Temp_Indoor+0))&&F_FanSpeed_Mid&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Low = 1;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00001001;
}
if(!OUT0_LF&&F_FanSpeed_Low&&SysTimerStr.Timer_300msFanSpdSW==0)
{ _asm nop;
OUT0_LF = 1;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_2sFanRun = 3;
}
//-------------------------------
if((Set_Temper>=(Temp_Indoor+2))&&F_FanSpeed_Low&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Low = 0;
F_FanSpeed_Mid = 1;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00000101;
}
/*if((OUT1_MF==0)&&(F_FanSpeed_Mid==1)&&(SysTimerStr.Timer_300msFanSpdSW==0))
{
OUT0_LF = 0;
OUT1_MF = 1;
OUT2_HF = 0;
}*/
//-------------------------------
if((Set_Temper<=(Temp_Indoor+0))&&F_FanSpeed_Mid&&SysTimerStr.Timer_2sFanRun==0)
{ _asm nop;
OUT0_LF = 0;
OUT1_MF = 0;
OUT2_HF = 0;
SysTimerStr.Timer_300msFanSpdSW = 60;//fan speed switching delay
F_FanSpeed_Low = 1;
F_FanSpeed_Mid = 0;
F_FanSpeed_High = 0;
FanSpeedBak = 0b00001001;
SysTimerStr.Timer_2sFanRun = 3;
}
/*if((OUT0_LF==0)&&(F_FanSpeed_Low==1)&&(SysTimerStr.Timer_300msFanSpdSW==0))
{
OUT0_LF = 1;
OUT1_MF = 0;
OUT2_HF = 0;
}*/
}
}
}
}
/////////////////////////////////
void Cool_Mode(void)
{
if(!F_SysMode_On||F_Comp4WVFault||F_Defrost_Start||F_Defrost_End||F_SensorFault_P) return;
if(F_SysMode_Cool)
{
if(F_RunMode_Heat)
{
F_Comp1thRun = 0;
F_Diagnostic_End = 1;
F_Disp_E4 = 0;
F_BlnakingCHLed = 0;
}
if(!F_RunMode_Cool&&(OUT5_ODF||OUT6_COMP))
{
OUT5_ODF = 0;
OUT6_COMP = 0;
F_Comp_On = 0;
SysTimerStr.Timer_60sCompOff = 60;
}
F_RunMode_Cool = 1;
F_RunMode_Heat = 0;
if(SysTimerStr.Timer_180sPowerOn==0||F_PowDn3Minu)
{
if(Temp_Indoor>=(Set_Temper+2)&&(SysTimerStr.Timer_180sCompOff==0||F_PowDn3Minu)&&!OUT4_4WV)
{
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
F_OutFan_On = 1; //outfan run 2s then comp cut in
}
if(Set_Temper>=(Temp_Indoor+2)&&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
}
}
}
}
/////////////////////////////////
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?