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

📄 adj_cal.c

📁 医疗电子,血氧浓度测量模块原程序,采用430 单片机.
💻 C
字号:
#include "global.h"

ulong s2_r=0,s2_ir=0;
ulong s3_r=0,s3_ir=0;
uint pi=0,pk=0;
uchar flg_n=0;
uint m2_ir,m1_ir,m2_r,m1_r;
ulong t1_ir[2];
ulong t2_ir;
uint d1_ir;
uint f_noise=0;
uint H2_ir=0;
uint m11_ir,m22_ir;
uint ir_rge;

uint pul_rte;   //脉率

uint rg0_ir,rg0_r;
uint spo2;
uint t00_ir;
uint r_abj,ir_abj;
uint red_abj[10];
uint ired_abj[10];
uchar pj=0; 
uint  phh=0;
ulong  S02_HH=0;
uint y01_ir,y01_r;
uint y_r[8],y_ir[8];
uint yy_r[3]={0,0,0};
uint yy_ir[3]={0,0,0};
uint x_r[13],x_ir[13];
uint ss_ir,ss_r;
//uint flg_rgn=0;
uchar flt_n=1;
uchar pd=0,p11=0;
uint  AV_ir,AL_ir;
uint m33_ir[10];
uint s_m33;
uint trans_ir[2];
uchar pole=0;

void adj_cal(void)
{ 
  uchar pc,pe,pf,p2;
  if(flg_n==1)
    {
      adjust8402();
      flg_n=0;   
    }  
  y01_r=red_avr[0]-19*(ble_r/20);
  y01_ir=ired_avr[0]-19*(ble_ir/20);//基线调整     
  if((y01_ir<1000)&&(y01_r<1000))
    {    
      y_r[pd] =y01_r;
      y_ir[pd]=y01_ir;
      pd++;
      if(pd==8)
       {
        pd=0;
       }
     ss_ir=0;
     ss_r=0;    
     for(pc=0;pc<8;pc++)
      {
       ss_ir+=y_ir[pc];
       ss_r+=y_r[pc]; 
      }
     for(pe=12;pe>0;pe--)
      {
       x_r[pe] =x_r[pe-1] ;
       x_ir[pe]=x_ir[pe-1];
      }
     x_ir[0] =ss_ir/8;
     x_r[0]=ss_r/8;//滑动滤波结果
             
     for(pf=2;pf>0;pf--)
      {
       yy_ir[pf]=yy_ir[pf-1];
       yy_r[pf]=yy_r[pf-1];
      }
     yy_ir[0]=x_ir[0]+x_ir[12]+2*yy_ir[1]-2*x_ir[6]-yy_ir[2]; //低通滤波
     yy_r[0]=x_r[0]+x_r[12]+2*yy_r[1]-2*x_r[6]-yy_r[2];

     ir_abj=yy_ir[0]/flt_n;
     r_abj=yy_r[0]/flt_n;      
       
   } 
     if((ired_avr[0]>2250)&&(ired_avr[0]<3500)&&(red_avr[0]>2250)&&(red_avr[0]<3500)) 
       {
         if((y_ir[0]<1000)&&(y_r[0]<1000))
           { 
                        
             cal_character();  //信号处理求最值、周期
             
             if(ir_abj>m1_ir)   //柱状图
              {
                pole=(ir_abj-m1_ir)/400;
                if(pole==0)
                  {
                    t3= (t3&0xf0);
                  }
                if(pole!=0)
                  {
                    if(pole>14)
                     {
                       pole=14;
                     }
                   t3= (t3&0xf0);
                   t3= (t3|pole);
                 }
              }
                                      
             if((d1_ir!=0)&&(d1_ir<6000))  //阈值,需实验确定,特别是心率高的时候
               {  
                S02_HH+=d1_ir;
                phh++;          
               }
             pk++;
             if(pk==240)
               {
                 HH_ir=(uint)(S02_HH/phh);
                 phh=0;
                 S02_HH=0;
                 pk=0;
               } 
               //TXBUF0=(HH_ir);
               //while((UTCTL0&0X01)==0);     
           }    
   
         s2_r+=red_avr[0];     //每1秒基线自动更新一次
         s2_ir+=ired_avr[0]; 
         pi++;
         if(pi==120)                
          {
            ble_r=s2_r/120;
            ble_ir=s2_ir/120;
            pi=0;
            s2_r=0;
            s2_ir=0;
          }
    
       }
     if((ired_avr[0]<2250)||(ired_avr[0]>3500)||(red_avr[0]<2250)||(red_avr[0]>3500)) 
       {
         f_noise++;
         if(f_noise==120)
          {
           f_noise=0;
           flg_n=1;
           s2_r=0;
           s2_ir=0;
           pi=0;
           pk=0;      
          }  
       }
  /***************************容积图输出波形调整*************************************************/                
                 if(ired_abj[0]>m1_ir)
                   {
                     m22_ir=ired_abj[0]-m1_ir;  //基线调整
                   }
                 if(ired_abj[0]<=m1_ir)
                   {
                     m22_ir=0;
                   }                
                 if(rg0_ir>100)
                   { 
                     AV_ir=(uint)(rg0_ir/90);
                     m33_ir[p11]=(m22_ir/(1+AV_ir));                   
                     p11++;                
                   }
                 if(rg0_ir<=100)
                  {
                    m33_ir[p11]=m22_ir; 
                    p11++; 
                  }      
                 
                 if(p11==10)
                  {
                    p11=0;
                  }
                 s_m33=0;                                 
                 for(p2=0;p2<10;p2++)
                   {
                     s_m33+=m33_ir[p2];
                   }                               
                 m11_ir=(s_m33/10);
                 if(m11_ir>=126)
                 m11_ir=126;          
              
                    
                      
   
}
         

⌨️ 快捷键说明

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