?? microt02.c
字號:
}
else
{
fFanOut=0;
fSelfTest=0;
}
}
else
{
if(fColdOut)
{
fColdOut=0;
fFanOut=1;
rDispValue=0x02;
}
else if(fHotOut)
{
fHotOut=0;
fColdOut=1;
sDispTemp();
}
else
{
fFanOut=0;
fSelfTest=0;
}
}
}
}
void sDispTemp(void)
{
if(fSenError)rDispValue=0xED; //傳感器故障 顯示E2
else
{
if(rTempValue>0x85) rDispValue=0xBB; //LL
else
{
if(rTempValue>0x80)
{
rDispValue=rTempValue&0x7F;
rDispValue|=0xA0;
}
else
{
rDispValue=sBin_Bcd(rTempValue);
// if(rTempValue<0x0A)rDispValue|=0xF0; 2006-6-21 15:16
}
}
}
}
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
void s2msTask()
{
if(!(++rMCount))
{
rMsecond++; //250*2ms=500ms
rMCount=6;
}
}
/*-------------------------------------------------------------------------------
//500ms時間到
-------------------------------------------------------------------------------*/
void sCheckTime()
{
if(rMsecond)
{
rMsecond--;
rSelfTestTime--;
rWorkFlag.BYTE^=0x80; //對fFlash求反
rSecond++;
if(rSecond>119)
{
rSecond=0; //1分鐘時間到
if(rInqOnTime>0)rInqOnTime--;
}
if(!--rSetTemp5s)
{
fTempSetS=0;
sOnDelayCheck();
if(rE2Data[1]!=rSetTemp)fNeedSaveE2=1;
rSaveDelay=cDelaySave;
}
if(rSecond&0x01)
{
if(rOnDelay)rOnDelay=rOnDelay-1;
else fOnDelay=0; //2006-7-5 12:42
if(!--rFanDelay180s)
{
if(fColdOut==0)
if(fHotOut==0)fFanOut=0;
rFanDelay180s=181;
}
}
if(fPowerOn)
{
if(fVolDown)
{
if(!--rVolDown60s)
{
// fPowerOn=0;
if(!fInVolDown)rFanDelay180s=181;
// fNeedSaveE2=1;
// rSaveDelay=cDelaySave;
// fVolDown=0;
// fTempSetS=0;
// rSetTemp=rE2Data[1]; //設定過程中斷電,保持原來設置溫度不變
fInVolDown=1;
fColdOut=0; //電壓異常,風扇延時3分鐘關閉
fHotOut=0;
}
}
if(fVolHigh)
{
if(!--rVolDown60s)
{
// fPowerOn=0;
if(!fInVolHigh)rFanDelay180s=181;
// fNeedSaveE2=1;
// rSaveDelay=cDelaySave;
// fVolHigh=0;
// fTempSetS=0;
// rSetTemp=rE2Data[3]; //設定過程中斷電,保持原來設置溫度不變
fInVolHigh=1;
fColdOut=0; //電壓異常,風扇延時3分鐘關閉
fHotOut=0;
}
}
}
}
}
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
unsigned char sBin_Bcd(unsigned char i)
{
rCount2=0;
while(i>9){
i-=10;
rCount2++;
}
rCount2=(rCount2<<4)&0xF0;
rCount2|=i;
return rCount2;
}
/*-------------------------------------------------------------------------------
A=- B=P C=H D=r E=E F=滅
-------------------------------------------------------------------------------*/
void sPushData()
{
rDispTimeBrush=21; //12*21=250ms
rDispValue=0xFF;
if(fNegVol)rDispValue=0xBD; //顯示Pr
else if(fPowerOn)
{
if(rErrFlag.BYTE) //有故障
{
if(fSenError)rDispValue=0xED; //傳感器故障 顯示Er
else if(fTempMax80)rDispValue=0xDD; //溫度高于 80 顯示rr
else if(fInVolDown)rDispValue=0xAA; //電壓低
else if(fInVolHigh)rDispValue=0xAA; //電壓高
}
//******************************************************
else if(fTempSetS) //溫度設定狀態
{
if(fFlash||(fenflash==0))
{
if(rSetTemp>(cNegSetTemp-1)) //10>9 10-10=0;
{
rDispValue=sBin_Bcd(rSetTemp-cNegSetTemp);
// if(rSetTemp<(cNegSetTemp+10))rDispValue|=0xF0;
}
else
{
rDispValue=cNegSetTemp-rSetTemp; //10-9=-1
rDispValue|=0xA0;
}
}
}
//******************************************************
else{
if(fFDisp)
{
//采用查表方式實現攝氏轉換為華式溫度 2006-5-11 11:16
if(rTempValue>0x80)
{
rCount3=FTempTab[rTempValue-0x80];
rDispValue=sBin_Bcd(rCount3);
}
else if(rTempValue>37)rDispValue=0xCC; //HH
else
{
rCount3=FTempTab[rTempValue+10];
rDispValue=sBin_Bcd(rCount3);
}
/* 采用計算方式實現攝氏轉換為華式溫度
rCount1=rTempValue&0x7F;
if(rTempValue&0x80)rCount3=32-sMpy(rCount1);
else rCount3=sMpy(rTempValue)+32;
rDispValue=sBin_Bcd(rCount3);
if(rCount3>99)rDispValue=0xCC; //HH
*/
}
else
{
if(rTempValue>0x80)
{
rDispValue=rTempValue&0x0F; //顯示溫度范圍0~65 2006-6-30 15:00
if(fModeDH01)
{
if(rDispValue>5)rDispValue=0x5;
}
else
{
if(rDispValue>9)rDispValue=0x9;
}
rDispValue=rDispValue|0xA0;
}
else if(rTempValue>65)rDispValue=0x65;
else rDispValue=sBin_Bcd(rTempValue);
}
}
}
}
/*-------------------------------------------------------------------------------
-----------計算溫度轉換--*9/5=1.8= *2-*2/10--------------------------------------------------------
-------------------------------------------------------------------------------*/
unsigned char sMpy(unsigned char rTemp)
{
rTemp=rTemp<<1; ;//*2
rCount3=0;
if(rTemp>100)
{
if(rTemp>200)
{
rCount3=0x20;
rCount2=sBin_Bcd(rTemp-200);
}
else
{
rCount3=0x10;
rCount2=sBin_Bcd(rTemp-100);
}
}
else rCount2=sBin_Bcd(rTemp);
rCount2=rCount2>>4;
rCount3=rCount3|rCount2;
rCount3=rTemp-rCount3;
return rCount3;
}
/*-------------------------------------------------------------------------------
1N4148=0.6v (11.6-0.6)/(30+6.8)*6.8/5 *256=104 14V-0.6v=127
-------------------------------------------------------------------------------*/
void sVolCheck(void)
{
//--------------------------------
if(fInVolDown||fInVolHigh)
{
//正在電壓保護狀態,檢查電壓值恢復正常了嗎? 11.7~13V
if(fModeDH01)
{
if((rVolAdValue>cDh01RetMinVol)&&(rVolAdValue<cDh01RetMaxVol))
{
fInVolDown=0;
fInVolHigh=0;
fVolDown=0;
fVolHigh=0;
}
}
else
{
if(rVolAdValue<cT02RetMaxVol)
{
fInVolDown=0;
fInVolHigh=0;
fVolDown=0;
fVolHigh=0;
}
}
}
else
{
//---------型號為DH01--------------------------
if(fModeDH01)
{
if(rVolAdValue<cDh01MinVol) //Voltage<11.6V
{
if(!fVolDown)
{
fVolDown=1;
fVolHigh=0;
rVolDown60s=cVolDown60s;
}
}
else fVolDown=0;
if(rVolAdValue>cDh01MaxVol) //Voltage>18V
{
if(!fVolHigh)
{
fVolDown=0;
fVolHigh=1;
rVolDown60s=cVolHigh5s;
}
}
else fVolHigh=0;
}
//----------型號為T02時------------------------
else
{
/*
if(rVolAdValue<138) //Voltage<16V
{
if(!fVolDown)
{
fVolDown=1;
fVolHigh=0;
rVolDown60s=cVolDown60s;
}
}
else fVolDown=0;
*/
if(rVolAdValue>cT02MaxVol) //Voltage>18V
{
if(!fVolHigh)
{
fVolDown=0;
fVolHigh=1;
rVolDown60s=cVolHigh5s;
}
}
else fVolHigh=0;
}
}
//--------------------------------
}
//***************************************************************
//*******控制輸出檢查
//***************************************************************
void sConCheck()
{
if(fPowerOn)
{
rCount1=rTempValue&0x7F;
if(rTempValue&0x80)rCount1=20-rCount1;
else rCount1=rTempValue+20;
rCount2=rSetTemp+20-cNegSetTemp;
if(fHotOut) //制熱狀態
{
if(rCount1>=rCount2)
{
fHotOut=0;
rFanDelay180s=181;
}
}
else if(fColdOut)
{
if(rCount1<=rCount2||rTempValue>=0x89)//溫度制冷較低時
{
fColdOut=0;
rFanDelay180s=181;
}
}
else
{
if(rCount1>(rCount2+4))fColdOut=1;
if(rCount1<(rCount2-4))fHotOut=1;
if(rTempValue>=0x89)fHotOut=1; //溫度太低將制熱打開
}
if(fColdOut||fHotOut)fFanOut=1;
}
else
{
fColdOut=0;
fHotOut=0;
}
}
/*
void sDelay500ms()
{
for(rCount1=255;rCount1!=0;rCount1--)
{
CLRWDT();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -