⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temp_mod.c

📁 msp430F435做的医疗器械,包括语音模块,知识源于网络
💻 C
📖 第 1 页 / 共 2 页
字号:
        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 + -