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