?? main.c
字號:
if (sampNum==conSampNo) //若達到規定采樣數目
{
sampNum=0;
smpAvrInt=sampInt/conSampNo;
sampInt=0;
HC595Output(smpAvrInt); //并行輸出
voltage=calVoltage(smpAvrInt); //計算
PValue=voltage;
DZHI=P0Value/PValue; //計算D值 (比例數)
if(P0Value<=PValue)
mValue=0;
else
mValue=10*log10(DZHI)/dValue;
tmpMval=mValue*1000;
mainDisplay();
}
}
case 1: //AD采樣通道為通道1
{
sampInt1=sampInt1+get(1);
sampNum1++; //采樣個數加1;
selectChan0 (); //選擇AD通道為通道0
flagSapChan=0;
if (sampNum1==conSampNo) //若達到規定采樣數目
{
sampNum1=0;
smpAvrInt1=sampInt1/conSampNo;
sampInt1=0;
HC595Output(smpAvrInt1); //并行輸出
voltage2=calVoltage(smpAvrInt1); //計算
IValue=voltage2;
IZHI=IValue/I0Value; //計算I值 (比例數)
if(I0Value<=IValue)
yValue=0;
else //若出現負數,賦0
yValue=(1/IZHI)-(IZHI);
tmpYval=yValue*1000;
mainDisplay();
}
}
}
}
}
//移動箭頭函數
/* conArrowReturn 1 //光標位置為返回
conArrowReset 2 //光標位置為復位
conArrowSetD 3 //光標位置為設定d值
conArrowSetPara 4 //標定
*/
void changeArrow()
{
clearDispData(ArrowOriX,ArrowOriY);
switch(ArrowState)
{
case conArrowReturn:
{
ArrowOriX=0x0A;
ArrowOriY=0x30;
break;
}
case conArrowReset:
{
ArrowOriX=0x0A;
ArrowOriY=0x50;
break;
}
case conArrowSetD:
{
ArrowOriX=0x0A;
ArrowOriY=0x70;
break;
}
case conArrowSetPara:
{
ArrowOriX=0x0A;
ArrowOriY=0x90;
break;
}
}
displayArrow(ArrowOriX,ArrowOriY);
}
//存儲D值到E2PROM (E2PROM地址:0x28,0x00)
void saveDValue(float dValue)
{
unsigned char dValHi,dValLo; //d值的高低8位
unsigned int dInt; //d值放大100倍取整
dInt=dValue*100;
dValLo=dInt&(0x00FF);
dInt>>=8;
dValHi=dInt&(0x00FF);
E2PROM_Erase(0x28,0x00);
E2PROM_Write(0x28,0x00,dValLo);
E2PROM_Write(0x28,0x01,dValHi);
E2PROM_Close();
}
//讀取D值
float readDValue(void)
{
float dValue;
unsigned char dValHi,dValLo; //d值的高低8位
dValLo=E2PROM_Read(0x28,0x00);
dValHi=E2PROM_Read(0x28,0x01);
E2PROM_Close();
dValue=(dValHi*256+dValLo)/100.0;
return(dValue);
}
//存儲I0Val,P0Val到E2PROM (E2PROM地址:0x2A00,0x00)
void saveI0P0Val(void)
{
unsigned char dValHi,dValLo; //d值的高低8位
unsigned int dInt; //d值放大100倍取整
E2PROM_Erase(0x2A,0x00);
dInt=smpAvrInt;
dValLo=dInt&(0x00FF);
dInt>>=8;
dValHi=dInt&(0x00FF);
E2PROM_Write(0x2A,0x00,dValLo);
E2PROM_Write(0x2A,0x01,dValHi);
dInt=smpAvrInt1;
dValLo=dInt&(0x00FF);
dInt>>=8;
dValHi=dInt&(0x00FF);
E2PROM_Write(0x2A,0x02,dValLo);
E2PROM_Write(0x2A,0x03,dValHi);
E2PROM_Close();
}
//讀取Samp值(I0Val,P0Val)到E2PROM (E2PROM地址:0x2A00,0x00)
void readI0P0Value(void)
{
unsigned char dValHi,dValLo; //d值的高低8位
dValLo=E2PROM_Read(0x2A,0x00);
dValHi=E2PROM_Read(0x2A,0x01);
smpAvrInt=(dValHi*256+dValLo);
dValLo=E2PROM_Read(0x2A,0x02);
dValHi=E2PROM_Read(0x2A,0x03);
smpAvrInt1=(dValHi*256+dValLo);
E2PROM_Close();
P0Value=calVoltage(smpAvrInt);
I0Value=calVoltage(smpAvrInt1);
}
void setPara(void) _task_ task_SetPara //任務2
{
unsigned char key; //按鍵代碼
float decimal;
while (1)
{
WDT_CONTR=0x3C; //喂狗
ctrlClr2++; //清屏循環控制變量加1
if (ctrlClr2>=conTmrClr) //若清屏循環控制達到要求
{
ctrlClr2=0; //清屏循環控制清0
if(flagDispFace==conFaceDispSysSet) //若在系統設置界面
{
LCM_Clr(); //清屏
displaySysSet();
}
}
key=readKey(); //讀按鍵
if (key!=0)
{
switch(key)
{
case keyUp: //上箭頭
{
if(flagDispFace==conFaceDispSysSet)
{
if(ArrowState>conArrowReturn)
ArrowState--;
changeArrow();
}
break;
}
case keyDown: //下箭頭
{
if(flagDispFace==conFaceDispSysSet)
{
if(ArrowState<conArrowSetPara)
ArrowState++;
changeArrow();
}
break;
}
case key0:
case key1:
case key2:
case key3:
case key4:
case key5:
case key6:
case key7:
case key8:
case key9: //數字鍵
{
if(flagDispFace==conFaceDispSysSet) //如果在系統設置界面
{
switch (ArrowState)
{
case conArrowReset:
{
break;
}
case conArrowSetD:
{
fInt=fPoint1; //小數寄存器初始化
fPoint1=fPoint2;
switch(key)
{
case key0:
{
fPoint2=0;
break;
}
case key1:
{
fPoint2=1;
break;
}
case key2:
{
fPoint2=2;
break;
}
case key3:
{
fPoint2=3;
break;
}
case key4:
{
fPoint2=4;
break;
}
case key5:
{
fPoint2=5;
break;
}
case key6:
{
fPoint2=6;
break;
}
case key7:
{
fPoint2=7;
break;
}
case key8:
{
fPoint2=8;
break;
}
case key9:
{
fPoint2=9;
break;
}
}
decimal=fInt+fPoint1/10.0+fPoint2/100.0;
dValue=decimal;
displayFloat2(dValue,0x12,0x70);
saveDValue(dValue); //存儲d值到E2PROM
break;
}
}
}
else if(flagDispFace==conFaceDispItemName) //如果在主界面
{
if(key==key1)
{
P0Value=PValue;
saveI0P0Val();
}
else if(key==key2)
{
I0Value=IValue;
saveI0P0Val();
}
}
break;
}
case keyEnt: //若按回車鍵
{
if(flagDispFace!=conFaceDispSysSet) //如果在主界面
{
os_delete_task(task_CalVal);
displaySysSet();
ArrowState=conArrowReturn;
changeArrow();
displayFloat2(dValue,0x12,0x70);
flagDispFace=conFaceDispSysSet;
}
else if(flagDispFace==conFaceDispSysSet) //如果在系統設置界面
{
switch (ArrowState)
{
case conArrowReturn:
{
LCM_Clr();
displayItemName(); //液晶顯示 項目名稱
flagDispFace=conFaceDispItemName;
os_create_task(task_CalVal);
break;
}
case conArrowReset:
{
displayInteger(ArrowState,0x00,0xCF);
P0Value=PValue;
I0Value=IValue;
saveI0P0Val();
displayOk(0x12,0x50);
break;
}
case conArrowSetD:
{
displayInteger(ArrowState,0x00,0xCF);
break;
}
}
}
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -