📄 temp_mod.c
字号:
discrible:根据A值查找Q值
date :2005-8-16
***************************************************/
void search_Q(void)
{
unsigned char L_A,H_A,M_A;
L_A = 0;
H_A = 100;
M_A = (L_A + H_A)/2;
if(A==0)
{
Q = 0;
return;
}
while(1)
{
if( (Temp_A[M_A] == A) || (M_A == L_A) )
break;
else
{
if(A > Temp_A[M_A])
{
L_A = M_A;
M_A = (L_A + H_A)/2;
}
else
{
H_A = M_A;
M_A = (L_A + H_A)/2;
}
}
}
Q = Temp_Q[M_A];
}
/****************************************************************
discrible:计算5~95之间的进口温度漂移量(结果为十进制数)
date :2005-8-16
****************************************************************/
void Cal_InSub_temp(void)
{
if((Key_symbol&Loadjust_flag) ==Loadjust_flag)//若为低温校准,算低温差值
{
LoIn_temp[0] = In_Temp[0];
LoIn_temp[1] = In_Temp[1];
}
if((Key_symbol&Hiadjust_flag)==Hiadjust_flag) //若为高温校准,算高温差值,并计算5至95之间的相对温差
{
HiIn_temp[0] = In_Temp[0];
HiIn_temp[1] = In_Temp[1];
if( (5 >LoIn_temp[1]) && (HiIn_temp[1] >=0x95) )//高温>=95度,低温<5度
InSub_temp = (HiIn_temp[1]-0x95)*100 + (HiIn_temp[0]/0x10)*10 + (HiIn_temp[0]%0x10)+
(0x05-LoIn_temp[1]-1)*100+100- ((LoIn_temp[0]/0x10)*10 + (LoIn_temp[0]%0x10));
else
{
if(HiIn_temp[0]>=LoIn_temp[0])
{
if( HiIn_temp[1]>=(0x90+LoIn_temp[1]) )//----增加(即漂差为正)
InSub_temp = (HiIn_temp[1]-(0x90+LoIn_temp[1]))*100+
(HiIn_temp[0]/0x10)*10+(HiIn_temp[0]%0x10)-((LoIn_temp[0]/0x10)*10 + (LoIn_temp[0]%0x10));
else//---------------------------------------减小(即漂差为负)
{
InSub_temp = (LoIn_temp[0]/0x10)*10+(LoIn_temp[0]%0x10)+
((0x99-HiIn_temp[0])/0x10)*10+(0x99-HiIn_temp[0])%0x10;
adjust_symbol |= Inaddsubtemp_flag;//应加上漂差
}
}
else
{
if(HiIn_temp[1]>(0x90+LoIn_temp[1]))//------增加(即漂差为正)
InSub_temp = (HiIn_temp[1]-(0x90+LoIn_temp[1])-1)*100+
(HiIn_temp[0]/0x10)*10+(HiIn_temp[0]%0x10)+100-((LoIn_temp[0]/0x10)*10+(LoIn_temp[0]%0x10));
else//--------------------------------------减小(即漂差为负)
{
InSub_temp = ((0x90+LoIn_temp[1]) - HiIn_temp[1])*100+
((LoIn_temp[0]/0x10)*10+LoIn_temp[0]%0x10)-((HiIn_temp[0]/0x10)*10+HiIn_temp[0]%0x10);
adjust_symbol |= Inaddsubtemp_flag;//应加上漂差
}
}
}
}
}
/****************************************************************
discrible:计算5~95之间的出口温度漂移量(结果为十进制数)
date :2005-8-16
***************************************************************/
void Cal_OutSub_temp(void)
{
if((Key_symbol&Loadjust_flag) ==Loadjust_flag)//若为低温校准,算低温差值
{
Key_symbol &= ~Loadjust_flag;//清5度校准标志
LoOut_temp[0] = Out_Temp[0];
LoOut_temp[1] = Out_Temp[1];
}
if((Key_symbol&Hiadjust_flag)==Hiadjust_flag) //若为高温校准,算高温差值,并计算5至95之间的相对温差
{
Key_symbol &= ~Hiadjust_flag;//清95度校准标志
Key_symbol |= AdjustTemp_flag;//置校温标志
HiOut_temp[0] = Out_Temp[0];
HiOut_temp[1] = Out_Temp[1];
if( (5 >LoOut_temp[1]) && (HiOut_temp[1] >=0x95) )//高温>=95度,低温<5度
OutSub_temp = (HiOut_temp[1]-0x95)*100 + (HiOut_temp[0]/0x10)*10 + (HiOut_temp[0]%0x10)+
(0x05-LoOut_temp[1]-1)*100+100- ((LoOut_temp[0]/0x10)*10 + (LoOut_temp[0]%0x10));
else
{
if(HiOut_temp[0]>=LoOut_temp[0])
{
if( HiOut_temp[1]>=(0x90+LoOut_temp[1]) )//----增加(即漂差为正)
OutSub_temp = (HiOut_temp[1]-(0x90+LoOut_temp[1]))*100+
(HiOut_temp[0]/0x10)*10+(HiOut_temp[0]%0x10)-((LoOut_temp[0]/0x10)*10 + (LoOut_temp[0]%0x10));
else//-----------------------------------------减小(即漂差为负)
{
OutSub_temp = (LoOut_temp[0]/0x10)*10+(LoOut_temp[0]%0x10)+
((0x99-HiOut_temp[0])/0x10)*10+(0x99-HiOut_temp[0])%0x10;
adjust_symbol |= Outaddsubtemp_flag;//应加上漂差
}
}
else
{
if(HiOut_temp[1]>(0x90+LoOut_temp[1]))//----增加(即漂差为正)
OutSub_temp = (HiOut_temp[1]-(0x90+LoOut_temp[1])-1)*100+
(HiOut_temp[0]/0x10)*10+(HiOut_temp[0]%0x10)+100-((LoOut_temp[0]/0x10)*10+(LoOut_temp[0]%0x10));
else//--------------------------------------减小(即漂差为负)
{
OutSub_temp = ((LoOut_temp[0]/0x10)*10+LoOut_temp[0]%0x10)-
((HiOut_temp[0]/0x10)*10+HiOut_temp[0]%0x10);
adjust_symbol |= Outaddsubtemp_flag;//应加上漂差
}
}
}
//-----------------将校温数据写入ROM(包括入口出口)------------------------------
Save_AdjustTempData();
}
}
/***************************************************
discrible:校准入口温度
date :2005-8-16
***************************************************/
void AdjustIn_Temp(void)
{
unsigned int Before_Temp;//校准前测试温度值(十进制)
unsigned int After_Temp; //校准后测试温度值(十进制)
unsigned char M_temp,H_temp,L_temp;
if(((Key_symbol & AdjustTemp_flag)==0) || (In_Temp[1]==0))//加In_Temp[1]==0条件防止校好后再次上电温度出现65498等数据
return; //原因:第1次启动测温时,SD没这么快测到,In_Temp和Out_Temp都为0,再进入AdjustIn_Temp和再进入AdjustOut_Temp子程序时,就算出65498
Before_Temp =(In_Temp[2]%0x10)*10000+(In_Temp[1]/0x10)*1000+(In_Temp[1]%0x10)*100+
(In_Temp[0]/0x10)*10+(In_Temp[0]%0x10);
if((In_Temp[1]>=5)||(In_Temp[2]>0))
{
if((adjust_symbol & Inaddsubtemp_flag)==Inaddsubtemp_flag)//漂差为负,应加上漂差
After_Temp =Before_Temp+500-((LoIn_temp[1]%0x10)*100+(LoIn_temp[0]/0x10)*10+(LoIn_temp[0]%0x10))+
(InSub_temp*((In_Temp[2]%10)*100+(In_Temp[1]/0x10)*10+(In_Temp[1]%0x10)-5))/90;
else
After_Temp =Before_Temp+500-((LoIn_temp[1]%0x10)*100+(LoIn_temp[0]/0x10)*10+(LoIn_temp[0]%0x10))-
(InSub_temp*((In_Temp[2]%10)*100+(In_Temp[1]/0x10)*10+(In_Temp[1]%0x10)-5))/90;
}
else
After_Temp =Before_Temp+500-((LoIn_temp[1]%0x10)*100+(LoIn_temp[0]/0x10)*10+(LoIn_temp[0]%0x10))+
(InSub_temp*(5-In_Temp[1]))/90;
M_temp = After_Temp/10000; //百位数十进制
H_temp = (After_Temp/100)%100; //整数十进制
L_temp = After_Temp%100; //小数十进制
In_Temp[2] =M_temp;
In_Temp[1] =(H_temp/10)*16+(H_temp%10);
In_Temp[0] =(L_temp/10)*16+(L_temp%10);
if(In_Temp[2]>0)//--------"E 1" 大于99.99度出错
{
In_Temp[2] =0x00;
In_Temp[1] =0x0E;
In_Temp[0] =0x01;
}
}
/***************************************************
discrible:校准出口温度
date :2005-8-16
***************************************************/
void AdjustOut_Temp(void)
{
unsigned int Before_Temp;//校准前测试温度值(十进制)
unsigned int After_Temp; //校准后测试温度值(十进制)
unsigned char M_temp,H_temp,L_temp;
if(((Key_symbol & AdjustTemp_flag)==0) || (Out_Temp[1]==0))
return;
Before_Temp =(Out_Temp[2]%0x10)*10000+(Out_Temp[1]/0x10)*1000+(Out_Temp[1]%0x10)*100+
(Out_Temp[0]/0x10)*10+(Out_Temp[0]%0x10);
if((Out_Temp[1]>=5)||(Out_Temp[2]>0))
{
if((adjust_symbol & Outaddsubtemp_flag)==Outaddsubtemp_flag)//漂差为负,应加上漂差
After_Temp =Before_Temp+500-((LoOut_temp[1]%0x10)*100+(LoOut_temp[0]/0x10)*10+(LoOut_temp[0]%0x10))+
(OutSub_temp*((Out_Temp[2]%0x10)*100+(Out_Temp[1]/0x10)*10+(Out_Temp[1]%0x10)-5))/90;
else
After_Temp =Before_Temp+500-((LoOut_temp[1]%0x10)*100+(LoOut_temp[0]/0x10)*10+(LoOut_temp[0]%0x10))-
(OutSub_temp*((Out_Temp[2]%0x10)*100+(Out_Temp[1]/0x10)*10+(Out_Temp[1]%0x10)-5))/90;
}
else
After_Temp =Before_Temp+500-((LoOut_temp[1]%0x10)*100+(LoOut_temp[0]/0x10)*10+(LoOut_temp[0]%0x10))+
(OutSub_temp*(5-Out_Temp[1]))/90;
M_temp = After_Temp/10000; //百位数十进制
H_temp = (After_Temp/100)%100; //整数十进制
L_temp = After_Temp%100; //小数十进制
Out_Temp[2] =M_temp;
Out_Temp[1] =(H_temp/10)*16+(H_temp%10);
Out_Temp[0] =(L_temp/10)*16+(L_temp%10);
if(Out_Temp[2]>0)//--------"E 2" 大于99.99度出错
{
Out_Temp[2] =0x00;
Out_Temp[1] =0x0E;
Out_Temp[0] =0x02;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -