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

📄 main.c

📁 该程序是基于PC104的工控板的多参数监护仪的源程序.监护内容包含:心电血氧呼吸无创血压等等.
💻 C
📖 第 1 页 / 共 2 页
字号:
	}//switch
     }//if(bioskey)

     if(key_val){
     	key_code=key_val;
     	key_val=0;//中断中的键盘值
     }
     //键盘延时
     if(keydelay) key_code=0;
     else if(key_code==ENTER_K)keydelay=16;
     else if(key_code==LEFT_K||key_code==RIGHT_K) keydelay=2;
     else if(key_code!=0) keydelay=10;
     //----------------------结束键盘处理--------------------/
    /// while(IQRmark>0){
	    ///IQRmark--;
    /// }
     //----------------------计算另外4导联的数据------------------
     if(ECGStatus&0x0c){//I或II导联脱落
     	while(Edw_cus!=E_ALLdw_cus){
     	//while((Edw_cus-E_ALLdw_cus>4)||((Edw_cus<E_ALLdw_cus)&&(Edw_cus+ECGN-E_ALLdw_cus>4))){
     	    *(ECGdata[V_III]+E_ALLdw_cus)=*(ECGdata[V_aVR]+E_ALLdw_cus)=\
     	    *(ECGdata[V_aVL]+E_ALLdw_cus)=*(ECGdata[V_aVF]+E_ALLdw_cus)=128;
     	    WavePointCount++;
     	    E_ALLdw_cus++;if(E_ALLdw_cus>=ECGN)  E_ALLdw_cus=0;
     	}
     }else{//I或II没有脱落,正常计算
     	while(Edw_cus!=E_ALLdw_cus){
     	//while((Edw_cus-E_ALLdw_cus>4)||((Edw_cus<E_ALLdw_cus)&&(Edw_cus+ECGN-E_ALLdw_cus>4))){
     	    int  tempint;
     	    tempint=127+*(ECGdata[V_II]+E_ALLdw_cus)-*(ECGdata[V_I]+E_ALLdw_cus);
     	    if(tempint>255)tempint=255;
     	    else if(tempint<0)tempint=0;
     	    *(ECGdata[V_III]+E_ALLdw_cus)=tempint;
     	    
     	    tempint=256-(( *(ECGdata[V_II]+E_ALLdw_cus) + *(ECGdata[V_I]+E_ALLdw_cus) )>>1);
     	    if(tempint>255)tempint=255;
     	    else if(tempint<0)tempint=0;
     	    *(ECGdata[V_aVR]+E_ALLdw_cus)=tempint;
     	    
     	    tempint=63+*(ECGdata[V_I]+E_ALLdw_cus)-(*(ECGdata[V_II]+E_ALLdw_cus)>>1);
     	    if(tempint>255)tempint=255;
     	    else if(tempint<0)tempint=0;
     	    *(ECGdata[V_aVL]+E_ALLdw_cus)=tempint;
     	    
     	    tempint=63+*(ECGdata[V_II]+E_ALLdw_cus)-(*(ECGdata[V_I]+E_ALLdw_cus)>>1);
     	    if(tempint>255)tempint=255;
     	    else if(tempint<0)tempint=0;
     	    *(ECGdata[V_aVF]+E_ALLdw_cus)=tempint;
     	    WavePointCount++;
     	    E_ALLdw_cus++;if(E_ALLdw_cus>=ECGN)  E_ALLdw_cus=0;
     	}
     }
     //--------------------7导数据全计算完毕-----------------------

     DrawHeart();

     //----------------------开始画波形处理--------------------------
     while(WavePointCount>4){
    //while((E_ALLdw_cus-Edr_cus>8) || ((E_ALLdw_cus<Edr_cus)&&(E_ALLdw_cus+ECGN-Edr_cus>8))){
        //往ECGcache,PLETHcache中充数据
        int W_point=(ECGwcus-1+EcacheL)%EcacheL;
	int R_point1=Edr_cus, R_point2=(Edr_cus+1)%ECGN;
	if(EF2==0){
	    for(i_i=0; i_i<7; i_i++)
		*(ECGcache[i_i]+W_point)=*(ECGdata[i_i]+R_point1);	//七导数据取样
	    	*(PLETHcache+W_point)=*(PLETHdata+R_point1);		//脉搏氧波形取样
	    EF2=1;
	}
    Esave[0]=W_point;
	for(i_i=0; i_i<7; i_i++)
	    *(ECGcache[i_i]+ECGwcus)=sampling(*(ECGcache[i_i]+W_point),*(ECGdata[i_i]+R_point1),*(ECGdata[i_i]+R_point2));
	*(PLETHcache+ECGwcus)=sampling(*(PLETHcache+W_point),*(PLETHdata+R_point1),*(PLETHdata+R_point2));
    Esave[1]=ECGwcus;
	ECGwcus++; if(ECGwcus>=EcacheL){ ECGwcus=0; }

	W_point=(ECGwcus-1+EcacheL)%EcacheL;
	R_point1=(Edr_cus+2)%ECGN, R_point2=(Edr_cus+3)%ECGN;
	for(i_i=0; i_i<7; i_i++)
	    *(ECGcache[i_i]+ECGwcus)=sampling(*(ECGcache[i_i]+W_point),*(ECGdata[i_i]+R_point1),*(ECGdata[i_i]+R_point2));
	*(PLETHcache+ECGwcus)=sampling(*(PLETHcache+W_point),*(PLETHdata+R_point1),*(PLETHdata+R_point2));
    Esave[2]=ECGwcus;
	ECGwcus++; if(ECGwcus>=EcacheL){ ECGwcus=0; }
	//---------显示-----------------------------------------


	for(i_i=0; i_i<WavSpdCount; i_i++){
    	switch(WAVESPD->value){
    		case	0://12.5mm/s
            		 for(j_j=0;j_j<7;j_j++)
            		  	Epointy[j_j]=sampling(*(ECGcache[j_j]+Esave[0]),*(ECGcache[j_j]+Esave[1]),*(ECGcache[j_j]+Esave[2]));
                     Ppointy=sampling(*(PLETHcache+Esave[0]),*(PLETHcache+Esave[1]),*(PLETHcache+Esave[2]));
                     break;
            case	1://25mm/s
            		 for(j_j=0;j_j<7;j_j++)
                     	Epointy[j_j]=*(ECGcache[j_j]+Esave[i_i+1]);
                     Ppointy=*(PLETHcache+Esave[i_i+1]);
                     break;
            case	2://50mm/s
                     for(j_j=0;j_j<7;j_j++)
			            Epointy[j_j]=*(ECGdata[j_j]+Edr_cus);
                     Ppointy=*(PLETHdata+Edr_cus);
                     break;
        }
		if(LEADDIS->value==V_SINGLE){
	    	ECGwav2(Epointy);
	    }else{
	    	ECGwav7(Epointy);
	    }

	    //画血氧波形
	    if(WaveCont&0x02){//允许血氧波形显示
	    	int high=PLETH_HIGH;
	    	if((LEADDIS->value==V_SEVEN)&&(WaveCont&0x08)){
   			high=67;
   			Ppointy=(Ppointy<<1)/3;
   		}
	    	PLETHwav(Ppointy, high);
	    	fillrect(PLETHWave_row-high, 4, PLETHWave_row-((Ppointy*3)>>2), 12, BLACK);
	    	plethrow=0;
	    	for(k_k=0; k_k<(Ppointy>>3); k_k++){
		    fillrect(PLETHWave_row-(plethrow+4), 4, PLETHWave_row-plethrow, 12, PLETHWCOLOR->value);
		    plethrow+=6;
	    	}
	    	fillrect(PLETHWave_row-(plethrow+(Ppointy&0x03)),4, PLETHWave_row-plethrow, 12, PLETHWCOLOR->value);
	    }
	    intvar=4/WavSpdCount;
	    WavePointCount-=intvar;
	    Edr_cus+=intvar;
	    Edr_cus%=ECGN;
	}//for(i_i=0;..)
     }//ECG PLETH wave display end if()
     //*/
     
     //------------------呼吸显示和呼吸关时候的列表显示----------------------
     if((LEADDIS->value==V_SINGLE) && (WaveCont&0x08)){
     	if(RESPCHK->value==V_ON){//显示呼吸波形
	    //--//while(Rdw_cus!=Rdr_cus){
	    while(Rdw_cus!=Rdr_cus){
	    	RESPwav((*(RESPdata+Rdr_cus)*3>>1));
		Rdr_cus++;	Rdr_cus%=RESPN;
	    }
	    NIBPsave&=0xfb;//NIBPsave bit2=0;
	}else{//显示数据列表
	    if(Listoldsec!=timer.ti_sec){
	    	Listoldsec=timer.ti_sec;
	    	Listtimecount++;
	    }
	    if(Listtimecount>=10){
	    	Listtimecount=0;
	    	
	    	ListTime.ti_hour=timer.ti_hour;
	    	ListTime.ti_min=timer.ti_min;
	    	ListTime.ti_sec=timer.ti_sec;
	    	ListData.HR=HRrate;
	    	ListData.PR=PRrate;
	    	ListData.ST=STvalue;
		ListData.SPO2=SPO2value;
	    	ListData.TEMP1=TEMP1value;
	    	ListData.TEMP2=TEMP2value;
	    	ListData.RESP=RESPvalue;
	    	if(NIBPsave&0x04){
	    		NIBPsave&=0xfb;//bit2=0;
	    		if(ListData.PR==255)
	    		    ListData.PR=NIBPrate;
	    		ListData.SYST=disSYST;
	    		ListData.DIAS=disDIAS;
	    		ListData.MEAN=disMEAN;
	    	}else{  
	    		ListData.MEAN=ListData.DIAS=ListData.SYST=255;
	    	}
	    	Listcount=0;
	    }//end if(Listtimecount==10)
	    #define LIST_STARTY	 PLETH_ENDY+22
	    switch(Listcount){
	    	    case  0:	rectcopy(LIST_STARTY+64, 8,  LIST_STARTY+64+9,  543,  LIST_STARTY+80,  8);  Listcount++;  break;
	    	    case  1:	rectcopy(LIST_STARTY+48, 8,  LIST_STARTY+48+9,  543,  LIST_STARTY+64,  8);  Listcount++;  break;
	    	    case  2:	rectcopy(LIST_STARTY+32, 8,  LIST_STARTY+32+9,  543,  LIST_STARTY+48,  8);  Listcount++;  break;
	    	    case  3:	rectcopy(LIST_STARTY+16, 8,  LIST_STARTY+16+9,  543,  LIST_STARTY+32,  8);  Listcount++;  break;
	    	    case  4:	rectcopy(LIST_STARTY,    8,  LIST_STARTY+9,     543,  LIST_STARTY+16,  8);  Listcount++;  break;
	    	    case  5:    sprintf(tempstr,"%02d:%02d:%02d", ListTime.ti_hour, ListTime.ti_min, ListTime.ti_sec);
			    	outtext(LIST_STARTY, 8, tempstr, WHITE, BLACK, FONT10);
			    	DisListData(LIST_STARTY, &ListData);
	    	    		Listcount++;
	    	    		break;
	    	    default:	break;
	    }//end switch(Listcount)
	    Rdr_cus=Rdw_cus;
	}//end 显示列表数据
     }else{//七导联
     	if(WaveCont&0x08){//允许呼吸血氧波形显示
	    while(Rdw_cus!=Rdr_cus){
	    	RESPsmallwav(*(RESPdata+Rdr_cus));
		Rdr_cus++;	Rdr_cus%=RESPN;
	    }
	}else{
	    Rdr_cus=Rdw_cus;
	}
     }
     //----END--------------呼吸显示和呼吸关时候的列表显示----------------------
     
     DisNum();//各数据值的显示
     
     printlst();//打印列表(查询式)
     
     ItemChange();//界面上的所有标题的改变(取样\记时..)
     
     printwave();//打印波形

     runkey();//need [key]'s value
     ExeCMD();//can control [key]'s value

     SaveSysSet();//保存系统设置
     if(alarmsound<=0xc000&&PulseSound==V_OFF)
     	nosound();
  }while(Quit);

  for(i_i=0; i_i<7; i_i++){
  	farfree(ECGcache[i_i]);
  	farfree(ECGcache2[i_i]);
  	free(ECGdata[i_i]);
  }
  free(PLETHcache);
  free(PLETHcache2);
  free(PLETHdata);
  free(RESPdata);
  farfree(DataHand);
  disable();
  RecINT8();  //恢复时钟频率
  setvect(INT8, oldIQR8);//恢复老的时钟中断
  setvect(INT0c,oldIQR4);//恢复老的COM1口中断
  setvect(INT0b,oldIQR3);//恢复老的COM2口中断
  enable();
  nosound();
  setvgamode(0x03);
  //printf("%d",ReadFrom
  return;
}

⌨️ 快捷键说明

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