?? microt02.c
字號:
for(rCount2=255;rCount2!=0;rCount2--)
{
rCount3++;
rCount3=rCount3+2;
}
}
}
*/
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void sT02DispDriver()
{
if(rCount1&0x10)pLedSegA=0;
if(rCount1&0x04)rCount2=rCount2&0xDF; //pLedSegB=0;
if(rCount1&0x02)rCount2=rCount2&0xEF; //pLedSegC=0;
if(rCount1&0x40)rCount2=rCount2&0xBF; //pLedSegD=0;
if(rCount1&0x80)rCount2=rCount2&0xF7; //pLedSegE=0;
if(rCount1&0x20)pLedSegF=0;
if(rCount1&0x08)rCount2=rCount2&0xFB; //pLedSegG=0;
}
void sDh01DispDriver()
{
if(rCount1&0x80)pLedSegA=0;
if(rCount1&0x08)rCount2=rCount2&0xDF; //pLedSegB=0;
if(rCount1&0x20)rCount2=rCount2&0xEF; //pLedSegC=0;
if(rCount1&0x04)rCount2=rCount2&0xBF; //pLedSegD=0;
if(rCount1&0x10)rCount2=rCount2&0xF7; //pLedSegE=0;
if(rCount1&0x02)pLedSegF=0;
if(rCount1&0x40)rCount2=rCount2&0xFB; //pLedSegG=0;
}
//--------------------------------------------------------------
//------------2006-7-5 12:43
//--------------------------------------------------------------
void sOnDelayCheck() //發生了溫度設定更改,判斷是否發生了切換
{
rCount1=rTempValue&0x7F;
if(rTempValue&0x80)rCount1=20-rCount1;
else rCount1=rTempValue+20;
rCount2=rSetTemp+20-cNegSetTemp;
if(!fOnDelay)rOnDelay=constOnDelay; //正在延時中,則不對延時時間重置
if(fColdOut) //溫度設定前是制冷狀態
{
if(rCount1<(rCount2-4)) //新的設定溫度超過當前溫度5度,需要制熱延時
fOnDelay=1; //需要延時
}
if(fHotOut) //溫度設定前是制熱狀態
{
if(rCount1>(rCount2+4)) //需要從制熱轉到制冷
fOnDelay=1; //需要延時
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------
void sDelay500us()
{
rCount1=170;
while(--rCount1);
}
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
void main()
{
INTCON=0;
OSCCON=0x65;
sDelay500us();
sInitPort();
sInitRam();
//-------------------------------------------------------------------
//-------產品型號識別-------
//----Dh01(RA4輸出0,RA3檢測為0)
//----T02(RA3檢測為高,上拉電阻10K)
//-------------------------------------------------------------------
do
{
rCount2=0;
if(pModelIn)rCount2=1;
if(pKeyInK4==0)rCount2|=0x02;
sDelay();
rCount3=0;
if(pModelIn)rCount3=1;
if(pKeyInK4==0)rCount3|=0x02;
}while(rCount2!=rCount3); //直到兩次讀取的值相等
if(rCount2&0x01)fModeDH01=0; //1為T02,0為DH01
else fModeDH01=1;
// fModeDH01=0;
/*
if(rCount2&0x02) //自檢按鍵是否按住
{
fSelfTest=1;
rDispValue=0x88; //全顯示5s
if(fModeDH01)fHotOut=1;
else fColdOut=1; //制冷輸出=1;
rSelfTestTime=11;
}
*/
//----------------------------------------------------------------------------
rE2Data[0]=EEPROM_READ(0x10);
rE2Data[1]=EEPROM_READ(0x11);
rE2Data[2]=EEPROM_READ(0x12);
rE2Data[3]=EEPROM_READ(0x13); //接收EEPROM數據
rCount2=rE2Data[0]; //開機工作狀態
rCount2=rCount2+rE2Data[1]; //溫度設定值
rCount2=rCount2+rE2Data[2]; //常數
if(rCount2==rE2Data[3]&&rE2Data[2]==constE2Data)
{
rSetTemp=rE2Data[1];
if(rE2Data[0])
{
fInqPOwerOn=1;
if(fModeDH01)rInqOnTime=cDh01InqOnTime;
else rInqOnTime=cT02InqOnTime;
}
}
else
{
rE2Data[0]=0x00;
rSetTemp=5+cNegSetTemp; //5度
rE2Data[1]=rSetTemp;
rE2Data[2]=constE2Data;
}
/*
rTestValue=96; //Test only
rSetTemp=70; //Test only
fInqPOwerOn=1; //Test only
*/
//------------------------------------
while(1)
{
if(TMR0<8)
{
CLRWDT(); //2ms一次
TMR0+=constTMR0;
//------------------------------------------------------
//關閉顯示
pLedCom3=1;
PORTC=0xFC;
PORTA=PORTA|0x31;
sDelay500us();
pLedCom3=1;
//----------------------------
s2msTask();
rTaskJump=rTaskJump<<1;
if(rTaskJump==0)rTaskJump=0x01;
rCount1=rPORT6.BYTE&0x30;
if(fOnDelay)rCount1=0; //延時關閉輸出
if(fFanOut)rCount1|=0x40;
if(fNegVol)rCount1=0; //電源反接故障
//--------------------------------------
PORTB=rCount1|0x80;
if(rTaskJump&0x01)
{
if(!--rDispTimeBrush)sPushData(); //更新顯示緩沖區
sCheckTime();
rCount1=~DispTab[rDispValue&0x0F];
rCount2=0xFF;
rCount1=rCount1&0x0F; //只顯示高4位
// 7-1 E D F A G B C
if(fModeDH01)sDh01DispDriver();
else sT02DispDriver();
PORTC=PORTC&rCount2;
pLedCom2=0;
}
if(rTaskJump&0x02)
{
rCount1=~DispTab[rDispValue&0x0F];
rCount2=0xFF;
rCount1=rCount1&0xF0; //只顯示低4位
// 7-1 E D F A G B C
if(fModeDH01)sDh01DispDriver();
else sT02DispDriver();
PORTC=PORTC&rCount2;
pLedCom2=0;
}
if(rTaskJump&0x04)
{
rCount1=rDispValue>>4;
rCount1=rCount1&0x0F;
rCount1=~DispTab[rCount1];
rCount1=rCount1&0x0F; //只顯示高4位
rCount2=0xFF;
if(fModeDH01)sDh01DispDriver();
else sT02DispDriver();
PORTC=PORTC&rCount2;
pLedCom1=0;
}
if(rTaskJump&0x08)
{
rCount1=rDispValue>>4;
rCount1=rCount1&0x0F;
rCount1=~DispTab[rCount1];
rCount1=rCount1&0xF0; //只顯示低4位
rCount2=0xFF;
if(fModeDH01)sDh01DispDriver();
else sT02DispDriver();
PORTC=PORTC&rCount2;
pLedCom1=0;
rCount1=sRdAdVal(0x09); //RA2 溫度
rTempAd.PICINT=rTempAd.PICINT+rCount1;
rCount1=sRdAdVal(0x05); //RA1 電源電壓
rVoltageAd.PICINT=rVoltageAd.PICINT+rCount1;
rAdConCount++;
if(rAdConCount&0x10) //rAdConCount==16?
{
rTempAd.WORD.ByteH=rTempAd.WORD.ByteH<<4;
rTempAd.WORD.ByteL=rTempAd.WORD.ByteL>>4;
rCurAdValue= rTempAd.WORD.ByteH|rTempAd.WORD.ByteL;
rVoltageAd.WORD.ByteH=rVoltageAd.WORD.ByteH<<4;
rVoltageAd.WORD.ByteL=rVoltageAd.WORD.ByteL>>4;
rVolAdValue= rVoltageAd.WORD.ByteH|rVoltageAd.WORD.ByteL;
rAdConCount=0;
rTempAd.PICINT=0;
rVoltageAd.PICINT=0;
/*
rVolAdValue=rTestValue; //Test only
rCurAdValue=204; //Test only
*/
if(rVolAdValue<19)fNegVol=1;
else fNegVol=0;
if(rCurAdValue>rAdValue)rCount1=rCurAdValue-rAdValue;
else rCount1=rAdValue-rCurAdValue;
rAdValue=rCurAdValue;
if(rCount1<5)
{
fSenError=0;
//傳感器故障檢查
//------------------------------------
if(rAdValue>250)
{
fSenError=1;
fFanOut=0;
fColdOut=0;
fHotOut=0;
}
else if(rAdValue<30)
{
fSenError=1;
fFanOut=0;
fColdOut=0;
fHotOut=0;
}
else if(rAdValue>228)
{
fColdOut=0; //溫度超過80度,風扇延時3分鐘關閉
fHotOut=0;
if(!fTempMax80)
{
fTempMax80=1;
rFanDelay180s=181;
}
}
else fTempMax80=0;
//------------------------------------
if(fSenError)rTempValue=0xED;
else if(fTempMax80)rTempValue=0xDD;
else
{
if(fModeDH01)rTempValue=Dh01TempTab[rAdValue-30];
else rTempValue=TempTab[rAdValue-30];
}
fPowerUp=1; //上電完成
if(fInqPOwerOn&&(rInqOnTime==0))
{
fPowerOn=1; //自動開機
fInqPOwerOn = 0;
}
}
}
}
//--------------------------------------------------------------------
if(rTaskJump&0x10)
{
if(rNeedWrE2) //每次寫一個數據
{
rNeedWrE2=rNeedWrE2<<1;
if(rNeedWrE2&0x02)EEPROM_WRITE(0x10,rE2Data[0]);
if(rNeedWrE2&0x04)EEPROM_WRITE(0x11,rE2Data[1]);
if(rNeedWrE2&0x08)EEPROM_WRITE(0x12,rE2Data[2]);
if(rNeedWrE2&0x10)
{
EEPROM_WRITE(0x13,rE2Data[3]);
rNeedWrE2=0;
}
}
if(fNeedSaveE2&&!rSaveDelay--)
{
fNeedSaveE2=0;
if(fPowerOn)rE2Data[0]=0x01;
else rE2Data[0]=0x0;
rCount2=rE2Data[0];
rE2Data[1]=rSetTemp;
rCount2=rCount2+rSetTemp;
rE2Data[2]=constE2Data;
rCount2=rCount2+constE2Data;
rE2Data[3]=rCount2;
rNeedWrE2=1;
//------------------------------------
}
//---------顯示溫度符號--------------------------
if(fPowerOn)
{
if(fModeDH01) //制冷制熱顯示控制
{
pLedSegB=0;
pLedSegE=0;
if(fHotOut)pLedSegB=1; //制熱狀態指示
if(fColdOut)pLedSegE=1;
pLedCom3=0;
}
else //DEK-T02 度和CF單位控制
{
pLedSegD=0;
pLedSegG=0;
pLedSegB=0;
pLedSegC=0;
if(fColdOut)pLedSegD=1;//制冷
if(fHotOut)pLedSegG=1;//制熱
if(rErrFlag.BYTE==0) //沒有故障
{
if(rDispValue!=0xFF)
{
if(fFDisp)pLedSegC=1; //F 讓C不亮
else pLedSegB=1; //C 讓F不亮
}
}
if(fTempSetS)
{
pLedSegC=0;
pLedSegB=1;
}
pLedCom3=0;
}
}
if(!fNegVol) //電源反接故障嗎?
{
sKeyCheckIn();
/*
if(fSelfTest)
{
if(fkeyprocess)sSelfDecodeKey();
if(rSelfTestTime==0)sSelfDecodeKey();
}
*/
if(fkeyprocess)sDecodeKey();
if(fPowerUp)
{
sVolCheck();
if((!fTempSetS)&&(rErrFlag.BYTE==0))sConCheck(); // 控制
}
}
rTaskJump=0x0;
}
//--------------------------------------------------------------------
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -