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

📄 sys_fun.c

📁 msp430F435做的医疗器械,包括语音模块,知识源于网络
💻 C
📖 第 1 页 / 共 3 页
字号:

/******************************************************************************
                discrible:保存热量,冷量历史数据

                date     :05.04.20
******************************************************************************/
void Save_HisData(void)
{
    unsigned char Temp_Hisdata[192],i;
//============热量数据===============================================    
    for(i=0;i<48;i++)//-----------------------"WH单位"热量历史数据
        Temp_Hisdata[i] = His_HeatWH[i];

    for(i=0;i<48;i++)//-----------------------"GJ单位"热量历史数据
        Temp_Hisdata[48+i] = His_HeatGJ[i];
//============冷量数据===============================================
    for(i=0;i<48;i++)//-----------------------"WH单位"热量历史数据
        Temp_Hisdata[96+i] = His_CoolWH[i];

    for(i=0;i<48;i++)//-----------------------"GJ单位"热量历史数据
        Temp_Hisdata[144+i] = His_CoolGJ[i];
    
    erase_seg(0x04);                    //擦除第4段ROM
    wr_byte(0xF600,Temp_Hisdata,192);   //写入热量,流量历史数据
}



/******************************************************************************
                discrible:恢复校温数据

                date     :05.04.20
******************************************************************************/
void Recover_AdjustTempData(void)
{
    unsigned char *address;
    address = (unsigned char *)0xF800;         //存校温数据的起始地址
    if(*address ==0xFF)
        return;
    LoIn_temp[0] =*address;                   //入口数据
    LoIn_temp[1] =*(address+1);
    InSub_temp = *(address+3);
    InSub_temp<<=8;
    InSub_temp |= *(address+2);

    LoOut_temp[0] = *(address+4);             //出口数据
    LoOut_temp[1] = *(address+5);
    OutSub_temp = *(address+7);
    OutSub_temp<<=8;
    OutSub_temp |= *(address+6);

    Key_symbol = *(address+8);
    adjust_symbol = *(address+9);
}

/******************************************************************************
                discrible:恢复热量,冷量,流量数据

                date     :05.04.20
******************************************************************************/
void Recover_HeatFlowData(void)
{
    unsigned char *address,i;
    address = (unsigned char *)0xFA00;         //存热量流量数据的起始地址
    if(*address ==0xFF)
        return;
    for(i=0;i<4;i++)
        Heat_GJ[i] = *(address+i);              //热量数据
    for(i=0;i<4;i++)
        Heat_WH[i] = *(address+4+i);            //热量数据
    for(i=0;i<4;i++)
        Flux[i] = *(address+8+i);               //流量数据
    for(i=0;i<4;i++)
        Cool_GJ[i] = *(address+12+i);           //冷量数据
    for(i=0;i<4;i++)
        Cool_WH[i] = *(address+16+i);           //冷量数据
}

/******************************************************************************
                discrible:恢复系统时间数据

                date     :05.04.20
******************************************************************************/
void Recover_DateData(void)
{
    unsigned char *address,i;
    address = (unsigned char *)0xFC00;         //存系统时间数据的起始地址
    if(*address ==0xFF)
        return;
    for(i=0;i<3;i++)
        Date[i]=*(address+i);                   //系统日期数据
    for(i=0;i<3;i++)
        Time[i]=*(address+3+i);                 //系统日间数据
}

/******************************************************************************
                discrible:恢复热量,流量历史数据

                date     :05.04.20
******************************************************************************/
void Recover_HisData(void)
{
    unsigned char *address,i;
    address = (unsigned char *)0xF600;         //存热量,流量历史数据的起始地址
    if(*address ==0xFF)
        return;

    for(i=0;i<48;i++)
        His_HeatWH[i] = *(address+i);

    for(i=0;i<48;i++)
        His_HeatGJ[i] = *(address+48+i);
    
    for(i=0;i<48;i++)
        His_CoolWH[i] = *(address+96+i);

    for(i=0;i<48;i++)
        His_CoolGJ[i] = *(address+144+i);
}

/******************************************************************************
                discrible:系统时间计算

                date     :05.04.20
******************************************************************************/
void Sys_TimeCal(void)
{
    unsigned char i;
//======================================="时","分","秒"处理===================================================
    Time[0]+=0x02;//系统时钟为2S产生一次,即2S执行一次
    if((Time[0]&0x0F)>0x09)//"个位秒"超//========================="秒"处理==================================
    {
        Time[0]&=0xF0;//"个位秒"清0
        Time[0]+=0x10;//"十位秒"加1
    }
    if((Time[0]&0xF0)>0x50)//"十位秒"超
    {
        Time[0]&=0x00;//"秒"位全清0
        Time[1]+=0x01;//"个位分"加1

        if((Time[1]&0x0F)>0x09)//"个位分"超//======================"分"处理===============================
        {
            Time[1]&=0xF0;//"个位分"清0
            Time[1]+=0x10;//"十位分"加1
        }
        if((Time[1]&0xF0)>0x50)//"十位分"超
        {
            Time[1]&=0x00;//"分"位全清0
            Time[2]+=0x01;//"时"位加1//==========================="时"处理==================================

            //---------累计运行时间处理

            Pile_time[0] +=0x01;
            for(i=0;i<3;i++)
            {
                if( (Pile_time[i]&0x0F)>0x09)
                {
                    Pile_time[i] &=0xF0;
                    Pile_time[i] +=0x10;

                    if( (Pile_time[i]&0xF0)>0x90)
                    {
                        Pile_time[i] &=0x0F;
                        Pile_time[i+1] +=0x01;
                    }
                }
            }

            if( ((Time[2]&0xF0)<0x20)&&((Time[2]&0x0F)>0x09) )//"0x,1x"情况,"个位时"超
            {
                Time[2]&=0xF0;//"个位时"清0
                Time[2]+=0x10;//"十位时"加1
            }
            else if( ((Time[2]&0xF0)==0x20)&&((Time[2]&0x0F)>0x03) )//"2x"情况,"个位时"超
            {
                Time[2]&=0x00;//"时"位全清0

//======================================"日"处理,若有进位则"月"进位=========================================
                Date[0]+=0x01;//"日"个位加1

                Save_HeatFlowData(); //1天存1次,调用存储程序,存入热量及流量数据

                if(Date[1]==0x02) //--------------------------------------------------------------若是2月份
                {
                    if((Date[2]%4)==0)//是闰年
                    {
                        if( Date[0]>0x29 )
                        {
                            Date[0]=0x01;//"日"归1
                            Date[1]+=0x01;//"月"加1
                            His_HeatFluData();//历史数据处理
                        }
                        else if( (Date[0]&0x0F)>0x09 )
                        {
                            Date[0]&=0xF0;
                            Date[0]+=0x10;
                        }
                    }
                    else            //不是闰年
                    {
                        if( Date[0]>0x28 )
                        {
                            Date[0]=0x01;//"日"归1
                            Date[1]+=0x01;//"月"加1
                            His_HeatFluData();//历史数据处理
                        }
                        else if( (Date[0]&0x0F)>0x09 )
                        {
                            Date[0]&=0xF0;
                            Date[0]+=0x10;
                        }
                    }
                }
                else if( (Date[1]==0x01)||(Date[1]==0x03)||(Date[1]==0x05)||(Date[1]==0x07)||
                         (Date[1]==0x08)||(Date[1]==0x10)||(Date[1]==0x12) )//--------------------若是大月
                {
                    if( Date[0]>0x31 )
                    {
                        Date[0]=0x01;//"日"归1
                        Date[1]+=0x01;//"月"加1
                        His_HeatFluData();//历史数据处理
                    }
                    else if( (Date[0]&0x0F)>0x09 )
                    {
                        Date[0]&=0xF0;
                        Date[0]+=0x10;
                    }
                }
                else//---------------------------------------------------------------------------是小月
                {
                    if( Date[0]>0x30 )
                    {
                        Date[0]=0x01;//"日"归1
                        Date[1]+=0x01;//"月"加1
                        His_HeatFluData();//历史数据处理
                    }
                    else if( (Date[0]&0x0F)>0x09 )
                    {
                        Date[0]&=0xF0;
                        Date[0]+=0x10;
                    }
                }

//=========================================="月"处理,若有进位则"年"进位=======================================
                if(Date[1]>0x12)
                {
                    Date[1]=0x01;
                    Date[2]++;
                }
                else if( (Date[1]&0x0F)>0x09 )
                    Date[1]=0x10;

//=========================================="年"处理==========================================================
                if( (Date[2]&0x0F)>0x09 )
                {
                    Date[2]&=0xF0;
                    Date[2]+=0x10;
                }
            }
        }
    }

    if(sysdata_index_Disp==0x07)//系统时间显示项
    {
        Up_Datebuffer(Time,3);
        Lcd_buffer_update(Data_buffer);

        if((SVSCTL&0x01)==0x01)                     //MCU内置电源管理模块检测工作电压2.8V,则亮低压提示符
            LCDM10 |= 0x04;                         //点亮低压提示符
    }

}

/******************************************************************************
                discrible:历史热量,冷量,流量数据跨月存入RAM处理(迭代法)

                date     :05.04.20
******************************************************************************/
void His_HeatFluData(void)
{
    unsigned char i,j;

//===============热量数据===========================================
//------WH单位RAM区内从His_HeatWH[4]~His_HeatWH[47]刷新历史数据------
    for(j=11;j>0;j--)
        for(i=0;i<4;i++)
            His_HeatWH[(j*4)+i] =His_HeatWH[((j-1)*4)+i];

    for(i=0;i<4;i++)
        His_HeatWH[i] = Heat_WH[i];

//------GJ单位RAM区内从His_HeatGJ[4]~His_HeatGJ[47]刷新历史数据------
   for(j=11;j>0;j--)
        for(i=0;i<4;i++)
            His_HeatGJ[(j*4)+i] =His_HeatGJ[((j-1)*4)+i];

    for(i=0;i<4;i++)
        His_HeatGJ[i] = Heat_GJ[i];
  
//===============冷量数据===========================================    
//------WH单位RAM区内从His_CoolWH[4]~His_CoolWH[47]刷新历史数据------
    for(j=11;j>0;j--)
        for(i=0;i<4;i++)
            His_CoolWH[(j*4)+i] =His_CoolWH[((j-1)*4)+i];

    for(i=0;i<4;i++)
        His_CoolWH[i] = Cool_WH[i];

//------GJ单位RAM区内从His_CoolGJ[4]~His_CoolGJ[47]刷新历史数据------
   for(j=11;j>0;j--)
        for(i=0;i<4;i++)
            His_CoolGJ[(j*4)+i] =His_CoolGJ[((j-1)*4)+i];

    for(i=0;i<4;i++)
        His_CoolGJ[i] = Cool_GJ[i];    

//-------历史数据存储------------------------------------------------
    Save_HisData();
}
/******************************************************************************
                discrible:对3个SD数组中的SD值进行排序,并取中间30个值累加

                date     :05.04.20
******************************************************************************/
void Queue_SDvalue(void)
{
  unsigned char i,j;
  unsigned int temp;
  for(i=0;i<(BasicSamps-1);i++)//冒泡法排序:1次比较完后,将最小的数据找出放到第1个位置
  {
      for(j=(i+1);j<BasicSamps;j++)
      {
          if(InSD_value[i]>InSD_value[j])//入口SD值排序
          {
              temp=InSD_value[i];
              InSD_value[i]=InSD_value[j];
              InSD_value[j]=temp;
          }
          
          if(OutSD_value[i]>OutSD_value[j])//出口SD值排序
          {
              temp=OutSD_value[i];
              OutSD_value[i]=OutSD_value[j];
              OutSD_value[j]=temp;
          }
          
          if(BasicSD_value[i]>BasicSD_value[j])//基准口SD值排序
          {
              temp=BasicSD_value[i];
              BasicSD_value[i]=BasicSD_value[j];
              BasicSD_value[j]=temp;
          }
      }
  }
  
  for(i=10;i<(BasicSamps-10);i++)//对中间30次累加
  {
      Sum_samp0 += BasicSD_value[i];
      Sum_samp1 += InSD_value[i];
      Sum_samp2 += OutSD_value[i];
  }  
}

/******************************************************************************
                discrible:系统数据初始化

                date     :05.04.20
******************************************************************************/
void Sys_DataInit(void)
{
    Meter_Num[0] = 0x02;     //表址
    Meter_Num[1] = 0x00;
    Meter_Num[2] = 0x04;
    Meter_Num[3] = 0x06;

    Address[0] = 0x02;       //地址项
    Address[1] = 0x00;

    P2OUT &= ~0x08;          //关闭温度测试电路电源
//    P2OUT |= 0x08;             //开启温度测试电路电源

    Temp_Mod();              //温度处理

//    Heat_WH[0] = 0x99;       //初始热量:19.9KWH
//    Heat_WH[1] = 0x11;

    Date[2] = 0x06;//系统日期
    Date[1] = 0x05;
    Date[0] = 0x06;

    Time[2] = 0x16;
    Time[1] = 0x00;
    Time[0] = 0x00;

    Display_symbol = firlayer_flag;//初始化进入第1层显示

    Constant = constant2;          //常数设置
    
    Critical_Temp =0x18;           //临界温度值

    Recover_AdjustTempData();      //恢复校温数据
    Recover_HeatFlowData();        //恢复热量,流量数据
    Recover_HisData();             //恢复历史数据
    Recover_DateData();            //恢复系统时间数据
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -