字號(hào):
/*-------------------------------------------------------------------------------
------------半導(dǎo)體制冷冰箱控制器-------------------------------------------------
------------Project:Microcon-T02
------------Mcu:PIC16F690
------------oscillation:Internal RC (8Mhz)
------------Author: Wuqy
------------Date: 2006/04/05
------------
-Ver1: 將原來(lái)的SEMIREF1 Ver3中的單片機(jī)EM78P458更改為PIC16F690
- 溫度傳感器:NTSF0103GZ168 B25/85=3977K 25度=10K
--- 更改為:日本芝浦 T25=10K B25/85=3950K 檢查溫度表值可不變
-Ver2: 將顯示掃描更改為4次,一次一位的一半,以減少電流消耗-----
-Ver3: 2006-7-19 8:27
- Dh01(RA4輸出0,RA3檢測(cè)為0)
- 工作溫度: -40~+80 設(shè)定/顯示溫度:-5~65 檢測(cè)溫度:-5~80
- 1、低壓:11.6V+-0.3 1min 恢復(fù)11.6V 顯示 -- 帶恢復(fù)功能
2、高壓:18V+-0.3 5s 恢復(fù)13V 顯示 -- 帶恢復(fù)功能
- 3、上電檢測(cè)到電源反接: 一直顯示 Pr
- 4、傳感器斷路/短路: 顯示Er
- 5、傳感器超溫大于80: 顯示rr 輸出停止 散熱風(fēng)扇3分鐘后停止
- 6、在待機(jī)狀態(tài),按UP鍵 進(jìn)入加熱狀態(tài),默認(rèn)溫度50 Down鍵制冷 默認(rèn)溫度0
-
- T02(RA3檢測(cè)為高,上拉電阻10K):
- DC12V DC18V 工作溫度:-40~+80 設(shè)定/顯示溫度:-9~65 檢測(cè)溫度:-9~80
- 1、低壓不檢測(cè) 高壓:20V+-0.3 5s 恢復(fù)18V 顯示 -- 帶恢復(fù)功能
- 2、在待機(jī)狀態(tài),按UP鍵 進(jìn)入加熱狀態(tài),默認(rèn)溫度50 Down鍵制冷 默認(rèn)溫度5
- 3、電源切斷或掉電時(shí),系統(tǒng)延遲10分鐘自動(dòng)進(jìn)入掉電前工作狀態(tài)
-------------------------------------------------------------------------------*/
#include "pic.h"
#include "MicroT02.h"
void sInitPort(void);
unsigned char sRdAdVal(unsigned char);
void sDelay(void);
void sDelay500us(void);
void sInitRam(void);
void sKeyCheckIn(void);
void sDecodeKey(void);
void s2msTask(void);
void sCheckTime(void);
unsigned char sBin_Bcd(unsigned char);
void sPushData(void);
unsigned char sMpy(unsigned char rTemp);
void sVolCheck(void);
void sConCheck(void);
void sDispTemp(void);
void sOnDelayCheck(void);
void sDh01DispDriver(void);
void sT02DispDriver(void);
//----------顯示溫度范圍-9~75度----------------------------------------------------------
//-------------------A/D ->-10
const char TempTab[]={
//30 31 32 33 34 35 36 37 38 39
0x8F,0x8E,0x8E,0x8D,0x8D,0x8C,0x8C,0x8B,0x8B,0x8A, //30-39
// -15 -14 -14 -13 -13 -12 -12 -11 -11 -10
// 0x89,0x89,0x88,0x88,0x87,0x87,0x86,0x86,0x85,0x85, //40-49
0x8A,0x8A,0x8A,0x8A,0x89,0x89,0x88,0x88,0x87,0x87, //40-49
//-9 -9 -8 -8 -7 -7 -6 -6 -5 -5
// 0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0, //50-59
0x86,0x86,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x82,
// 0,1,1,1,2,2,3,3,4,4,5,5,5,6,6,6,7,7,7,8, //60-79
0x82,0x81,0x81,0x81,0,0,1,1,2,2,3,3,3,4,4,4,5,5,5,6,
// 8,8,9,9,9,10,10,10,11,11,11,12,12,13,13,13,14,14,14,15, //80-99
6,6,7,7,7,8,8,8,9,9,9,10,10,11,11,11,12,12,12,13,
15,16,16,16,17,17,17,18,18,18,19,19,19,20,20,20,21,21,21,22, //100-119
22,22,23,23,24,24,24,25,25,25,26,26,26,27,27,28,28,28,29,29, //120-139
29,30,30,30,31,31,32,32,32,33,33,33,34,34,34,35,35,36,36,37, //140-159
37,37,38,38,39,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46, //160-179
46,47,47,48,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,56, //180-199
56,57,57,58,58,59,60,61,62,63,63,64,65,66,67,68,69,70,70,70, //200-219
70,70,70,70,70,70,70,70,70,70,70,70
//72,73,74,75,75,75,75,75,75,75,75,75
// 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9
};
const char Dh01TempTab[]={
//30 31 32 33 34 35 36 37 38 39
0x8A,0x8A,0x8A,0x8A,0x8A,0x8A,0x8A,0x8A,0x8A,0x8A, //30-39
0x89,0x89,0x88,0x88,0x87,0x87,0x86,0x86,0x85,0x85, //40-49
//-9 -9 -8 -8 -7 -7 -6 -6 -5 -5
0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0, //50-59
// 0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x82,
0,1,1,1,2,2,3,3,4,4,5,5,5,6,6,6,7,7,7,8, //60-79
// 0x82,0x81,0x81,0x81,0,0,1,1,2,2,3,3,3,4,4,4,5,5,5,6,
8,8,9,9,9,10,10,10,11,11,11,12,12,13,13,13,14,14,14,15, //80-99
// 6,6,7,7,7,8,8,8,9,9,9,10,10,11,11,11,12,12,12,13,
15,16,16,16,17,17,17,18,18,18,19,19,19,20,20,20,21,21,21,22, //100-119
22,22,23,23,24,24,24,25,25,25,26,26,26,27,27,28,28,28,29,29, //120-139
29,30,30,30,31,31,32,32,32,33,33,33,34,34,34,35,35,36,36,37, //140-159
37,37,38,38,39,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46, //160-179
46,47,47,48,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,56, //180-199
56,57,57,58,58,59,60,61,62,63,63,64,65,66,67,68,69,70,70,71, //200-219
72,73,74,75,75,75,75,75,75,75,75,75
// 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9
};
//----------C: -10~37 => 14~99
const char FTempTab[]={14,16,18,19,21,23,25,27,28,30,32,34,36,37,39,41,43,45,46,
48,50,52,54,55,57,59,61,63,64,66,68,70,72,73,75,77,79,81,82,84,86,88,90,91,
93,95,97,99
};
//-----共陽(yáng)極點(diǎn)亮數(shù)碼管-------0~9 -PHrE都不亮----7-1 E D F A G B C------
//A~F 0x40,0x14,0x0E,0x30,0x06,0x46
const char DispTab[]={0x08,0xF8,0x22,0xA0,0xD0,0x84,0x04,0xE8,0x00,0x80,0xF6,0x42,0x50,0x76,0x06,0xFE};
void sInitPort()
{
PIE1=0;
PIE2=0;
OPTION = 0x82; // prescale by 8 for TMR0 250*8=2ms
ANSELH=0x00;
ANSEL=0x06; //RA1 2 is Analog
WPUA=0;
IOCA=0;
WPUB=0;
TRISA = 0x0E; //0000 1110 RA 321為輸入 溫度、電壓、型號(hào)
TRISB = 0x0F;
TRISC = 0x03;
C1ON=0;
C2ON=0;
PORTA=0x21; //PORTA,4輸出低電平給RA3識(shí)別型號(hào)
PORTB=0x80;
PORTC=0xCC;
}
void sInitRam()
{
rAdConCount=0;
rTempAd.PICINT=0;
rVoltageAd.PICINT=0;
rTaskJump=0;
rOnDelay=0;
rDispTimeBrush=21;
rPORT6.BYTE=0x8F;
rDispValue=0xFF;
rWorkFlag.BYTE=0;
rErrFlag.BYTE=0x00;
rKeyFlag.BYTE=0x00;
}
unsigned char sRdAdVal(unsigned char rAdChannel)
{
ADCON1=0x20;
sDelay();
ADCON0=rAdChannel;
sDelay();
sDelay();
sDelay();
sDelay();
sDelay();
GODONE=1;
while(GODONE);
return ADRESH;
}
void sDelay()
{
rCount1=rCount1+1;
rCount1=rCount1+2;
rCount1=rCount1+3;
}
/*******************************************************************/
/* void sKeyCheckIn() */
/* 功能:鍵值處理 */
/* 說(shuō)明:根據(jù)鍵盤掃描程序返回的鍵值數(shù)據(jù)進(jìn)行去抖動(dòng),連擊鍵處理,串鍵處理有效時(shí),keyprocess為1 */
/*******************************************************************/
void sKeyCheckIn()
{
//-----------------------------------------------------------
pTrisK1=1;
pTrisK2=1;
sDelay();
rCount1=PORTC;
rCount2=0;
if(!(rCount1&0x01))
{
if(fModeDH01)rCount2|=0x04;
else rCount2|=0x08;
}
if(!(rCount1&0x02))
{
if(fModeDH01)rCount2|=0x08;
else rCount2|=0x04;
}
if(pKeyInK1)rCount2|=0x01;
if(pKeyInK2)rCount2|=0x02;
pTrisK1=0;
pTrisK2=0;
sDelay();
// PORTC=0xFC; //導(dǎo)致C F 同時(shí)亮
//-----------------------------------------------------------
if(!rCount2) //rCount2=0 無(wú)功能鍵按下
{
fenflash=1;
rkeypre=0x00;
fkeyesc=0x00; //為0,按鍵已釋放 1為按鍵未釋放
rKeyFlag.BYTE&=0x3F; //ftask0=0 ftask1=0
rkeycnt=0x00;
}
else if(!fkeyesc) //鍵已釋放
{
if(rCount2!=rkeypre)//本次功能按鍵鍵值和上次相同?
{
rkeypre=rCount2; //用本次鍵值更新上次鍵值
rkeycnt=0x00;
}
else
{
rkeycnt++; //2次功能鍵相同
if(ftask0==0&&ftask1==0) //去抖階段
{
if(rkeycnt==N) //年齡=N
{
fenflash=1;
fkeyprocess=1;
if(!fTempSetS)fkeyesc=1; //不在溫度設(shè)定狀態(tài),不允許連擊
if(rCount2&constKeyMask)fkeyesc=1; //該鍵不允許連擊
else
{
ftask0=1 ; //按鍵狀態(tài)轉(zhuǎn)入重復(fù)延緩階段
rkeycnt=0; //年齡清0
}
}
}
else if(ftask0==1&&ftask1==0)
{
if(rkeycnt==constMaxRate) //按鍵年齡=重復(fù)延緩階段
{
fenflash=0; //不允許閃爍
fkeyprocess=1;
rkeycnt=0;
ftask1=1;
}
}
else
{
if(rkeycnt==constMinRate)
{
fenflash=0;
fkeyprocess=1;
rkeycnt=0;
}
}
}
}
}
/*-------------------------------------------------------------------------------
K1=0x1 K2=0x2 K3=0x4 K4=0x8
-------------------------------------------------------------------------------*/
void sDecodeKey(void)
{
fkeyprocess=0;
if(rkeypre&0x04) //K3
{
fNeedSaveE2=1;
rSaveDelay=cDelaySave;
if(fPowerOn)
{
fPowerOn=0;
fFDisp=0;
rFanDelay180s=cFanOff60s;
rSetTemp=rE2Data[1]; //設(shè)定過(guò)程中斷電,保持原來(lái)設(shè)置溫度不變
fTempSetS=0;
}
else
{
fPowerOn=1;
fTempSetS=0;
fInqPOwerOn=0;
}
}
if(fPowerOn&&rErrFlag.BYTE==0) //fSenError==0
{
if(rkeypre&0x08) //K4
{
if(fTempSetS)
{
fTempSetS=0;
sOnDelayCheck();
if(rE2Data[1]!=rSetTemp)fNeedSaveE2=1;
rSaveDelay=cDelaySave;
}
else
{
fTempSetS=1;
rSetTemp5s=cSetTemp3s;
rE2Data[1]=rSetTemp; //2006-7-5 10:12 進(jìn)入設(shè)定溫度狀態(tài)保存當(dāng)前的設(shè)置
}
}
if(rkeypre&0x01) //K1
{
rSetTemp5s=cSetTemp3s;
if(fTempSetS)
{
if(fModeDH01) //DH01與T02 反了
{
if(rSetTemp>cMinSetTempDh01)rSetTemp--; //0 2006-6-21 14:51
}
else
{
if(rSetTemp<cMaxSetTemp)rSetTemp++;
}
// else rSetTemp=cMaxSetTemp;
}
else
{
// if(fFDisp)fFDisp=0;
// else fFDisp=1;
//-----不在溫度數(shù)字狀態(tài)直接設(shè)定溫度為50
if(fModeDH01)rSetTemp=cColdSetTemp;
else rSetTemp=cHotsetTemp;
sOnDelayCheck();
if(rE2Data[1]!=rSetTemp)fNeedSaveE2=1;
rSaveDelay=cDelaySave;
}
}
if(rkeypre&0x02) //K2
{
rSetTemp5s=cSetTemp3s;
if(fTempSetS)
{
if(fModeDH01)
{
if(rSetTemp<cMaxSetTemp)rSetTemp++;
}
else
{
if(rSetTemp>cMinSetTempT02)rSetTemp--; //0 2006-6-21 14:51
}
// else rSetTemp=0;
}
else
{
// if(fFDisp)fFDisp=0;
// else fFDisp=1;
//-----不在溫度數(shù)字狀態(tài)直接設(shè)定溫度為50
if(fModeDH01)rSetTemp=cHotsetTemp;
else rSetTemp=cColdT02Set;
sOnDelayCheck();
if(rE2Data[1]!=rSetTemp)fNeedSaveE2=1;
rSaveDelay=cDelaySave;
}
}
}
}
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
void sSelfDecodeKey(void)
{
fkeyprocess=0;
rSelfTestTime=11;
if(rkeypre) //K3
{
if(fModeDH01)
{
if(fHotOut)
{
fHotOut=0;
fColdOut=1;
rDispValue=0x01;
}
else if(fColdOut)
{
fColdOut=0;
fFanOut=1;
sDispTemp();
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -