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

📄 dischar.h

📁 该程序是基于PC104的工控板的多参数监护仪的源程序.监护内容包含:心电血氧呼吸无创血压等等.
💻 H
📖 第 1 页 / 共 5 页
字号:
#ifndef __DISCHAR_H
#define __DISCHAR_H

#ifndef __VIDEO_H
#include "video.h"
#endif
#ifndef __MENU_H
#include "menu.h"
#endif
#ifndef __INTERUPT_H
#include "interupt.h"
#endif
#ifndef __MENU_H
#include "menu.h"
#endif
#ifndef __STDIO_H
#include <stdio.h>
#endif
#ifndef __STRING_H
#include <string.h>
#endif
#define ITEMUL_COLOR	DARKGRAY
#define ECG_ICOLOR	GREEN
#define PLETH_ICOLOR	12
#define COMP_ICOLOR	16
#define MV_COLOR	15
#define ON_COLOR	4
#define OFF_COLOR	7
#define WORKSTA_COLOR	9
#define ECGSCL_COLOR	LIGHTMAGENTA
#define WAVESPD_COLOR	14
#define VER_COLOR	19
#define ALARM_COLOR	LIGHTRED
#define CUFF_COLOR	YELLOW

#define MENUCOLOCK	60	//menu colock counter

void SetNIBPTime(void)
{
  if(AUTOMANUAL->value==V_MANUAL){
     //if(disSYST!=255||disMEAN!=255||disDIAS!=255){
       	NIBPmin=CLEARTIME->value-1;
       	NIBPsec=60;
  	 //}else{
       //	NIBPmin=NIBPsec=0;
     //}
  }else{
     NIBPmin=AUTOTIME->value-1;
     NIBPsec=60;
  }
  return;
}

void DisListHd(int row)
{
  //呼吸波形关时 ROW=448;
  //开趋势列表时 ROW=304;
  char *ITEM_TIME[]={"TIME","时 间"};//ASCII FONT12
  char *ITEM_SMD[]={"(S,M,D)","(收,均,舒)"};
  char font;
  int  i;
  #define LISTHD_COLOR	LIGHTMAGENTA
  if(LANGUAGE->value==V_ENGLISH){
	font=FONT10;
  }else{
	font=FONT12;
  }
  //列表头不用再擦除,因为之前该擦除的地方已经擦除
  outtext(row,  16, ITEM_TIME[LANGUAGE->value], LISTHD_COLOR, BLACK, font);
  outtext(row,  88, VAL_PARA[0+LANGUAGE->value],   LISTHD_COLOR, BLACK, font);//HR
  outtext(row, 136, VAL_PARA[2+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//PR
  outtext(row, 184, VAL_PARA[4+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//ST
  outtext(row, 224, VAL_PARA[6+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//SPO2
  outtext(row, 272, VAL_PARA[8+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//TEMP1
  outtext(row, 328, VAL_PARA[10+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//TEMP2
  outtext(row, 384, VAL_PARA[12+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//RESP
  outtext(row, 440, VAL_PARA[14+LANGUAGE->value], LISTHD_COLOR, BLACK, font);//NIBP
  outtext(row, 480, ITEM_SMD[LANGUAGE->value], YELLOW, BLACK, font);
  #undef  LISTHD_COLOR
 return;
}

void DisListData(int row, MonData * data)
{
  #define LISTDA_COLOR	WHITE
  char tempstr[10];
  if(data->HR!=255)//----HR 心率值
  	sprintf(tempstr, "%3d", data->HR);
  else	sprintf(tempstr, "---");
  outtext(row, 88, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(data->PR!=255)//----PR 脉率值
  	sprintf(tempstr, "%3d", data->PR);
  else	sprintf(tempstr, "---");
  outtext(row, 136, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(data->ST!=127)//----ST段值
  	sprintf(tempstr, "%5.2f", (float)data->ST/100.0);
  else	sprintf(tempstr, "-.-- ");
  outtext(row, 176, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(data->SPO2!=255)//----SPO2值
  	sprintf(tempstr, "%2d", data->SPO2);
  else	sprintf(tempstr, "--");
  outtext(row, 232, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(data->TEMP1<=450){//----TEMP1体温值
      if(TEMP1UNIT->value==V_C_)
  	   sprintf(tempstr, "%5.1f", (float)data->TEMP1/10.0);
      else sprintf(tempstr, "%5.1f", (float)data->TEMP1*0.18+32.0);
  }else{
      sprintf(tempstr, "--.- ");
  }
  outtext(row, 272, tempstr, LISTDA_COLOR, BLACK, FONT10);

  if(data->TEMP2<=450){//----TEMP2体温值
      if(TEMP2UNIT->value==V_C_)
  	   sprintf(tempstr, "%5.1f", (float)data->TEMP2/10.0);
      else sprintf(tempstr, "%5.1f", (float)data->TEMP2*0.18+32.0);
  }else{
      sprintf(tempstr, "--.- ");
  }
  outtext(row, 328, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(data->RESP!=255)//----呼吸值
  	sprintf(tempstr, "%2d", data->RESP);
  else  sprintf(tempstr, "--");
  outtext(row, 392, tempstr, LISTDA_COLOR, BLACK, FONT10);
  
  if(NIBPUNIT->value==V_MMHG){
      if(data->SYST!=255)
	  sprintf(tempstr, "%3d,",  data->SYST);
      else
      	  sprintf(tempstr, "---,");
      outtext(row, 432, tempstr, LISTDA_COLOR, BLACK, FONT10);//SYST
      
      if(data->MEAN!=255)
	  sprintf(tempstr, "%3d,",  data->MEAN);
      else
      	  sprintf(tempstr, "---,");
      outtext(row, 472, tempstr, LISTDA_COLOR, BLACK, FONT10);
      
      if(data->DIAS!=255)
	  sprintf(tempstr, "%3d",  data->DIAS);
      else
      	  sprintf(tempstr, "---");
      outtext(row, 512, tempstr, LISTDA_COLOR, BLACK, FONT10);
  }else{//NIBP unit is Kpa
      if(data->SYST!=255)
	  sprintf(tempstr, "%4.1f,",  (float)data->SYST/7.5);
      else
      	  sprintf(tempstr, "--.-,");
      outtext(row, 432, tempstr, LISTDA_COLOR, BLACK, FONT10);
      
      if(data->MEAN!=255)
	  sprintf(tempstr, "%4.1f,",  (float)data->MEAN/7.5);
      else
      	  sprintf(tempstr, "--.-,");
      outtext(row, 472, tempstr, LISTDA_COLOR, BLACK, FONT10);
      
      if(data->DIAS!=255)
	  sprintf(tempstr, "%4.1f",  (float)data->DIAS/7.5);
      else
      	  sprintf(tempstr, "--.-");
      outtext(row, 512, tempstr, LISTDA_COLOR, BLACK, FONT10);
  }
  return;
  #undef  LISTDA_COLOR
}


/////心电增益标尺-----------12.1寸液晶800*600分辨率---------
void drawECGScaleRule(void)
{
  SETCOLOR(GREEN);
  if((LEADDIS->value==V_SINGLE)||(LEADDIS->value==V_SEVEN&&WaveCont&0x04)){
 	commline(YSTART+69,XSTART,YSTART+69,XSTART+8);
 	commline(YSTART+69,XSTART+4,YSTART+101,XSTART+4);
 	commline(YSTART+101,XSTART,YSTART+101,XSTART+8);
  }else{
  	#define MOVELINE	15
  	commline(YSTART+MOVELINE+40, XSTART, YSTART+MOVELINE+40, XSTART+8);
  	commline(YSTART+MOVELINE+40, XSTART+4, YSTART+MOVELINE+62, XSTART+4);
  	commline(YSTART+MOVELINE+62, XSTART, YSTART+MOVELINE+62, XSTART+8);
  	#undef MOVELINE
  }
  return;
}


void SetBackColor(unsigned rgb_val)
{RGB rgb;
 #define RGBINDEX_RED	0
 #define RGBINDEX_GREEN 1
 #define RGBINDEX_BLUE	2
 if(rgb_val<16){
   unsigned char ColorIdx[16][3]=
   {//R,    G,    B
     {0x00, 0x00, 0x00},//0黑色背景
     {0x05, 0x10, 0x18},//1
     {0x10, 0x04, 0x20},//2
     {0x04, 0x20, 0x07},//3
     {0x0b, 0x24, 0x38},//4{0b,24,38}
     {0x18, 0x18, 0x00},//5
     {0x13, 0x00, 0x17},//6
     {0x20, 0x08, 0x15},//7
     {0x10, 0x05, 0x1f},//8
     {0x1a, 0x01, 0x19},//9
     {0x08, 0x0f, 0x10},//10
     {0x17, 0x12, 0x0f},//11
     {0x04, 0x16, 0x04},//12
     {0x17, 0x00, 0x1f},//13
     {0x17, 0x1f, 0x10},//14
     {0x04, 0x10, 0x0d}//15
   };
 
   rgb.R=ColorIdx[rgb_val][RGBINDEX_RED];
   rgb.G=ColorIdx[rgb_val][RGBINDEX_GREEN];
   rgb.B=ColorIdx[rgb_val][RGBINDEX_BLUE];
   SetRGBColor(0, &rgb);//SET BACK COLOR
 }
 #undef RGBINDEX_RED
 #undef RGBINDEX_GREEN
 #undef RGBINDEX_BLUE
 return;
}

//---颜色的修正只能是0~5
void ReviseColor(void)
{
  RGB rgb;
  rgb.R=0x10;
  rgb.G=0x20;
  rgb.B=0x3f;
  SetRGBColor(1, &rgb);	//LIGHT BLUE
  rgb.R=0x00;
  rgb.G=0x3f;
  rgb.B=0x00;
  SetRGBColor(2, &rgb);//LIGHT GREEN
  rgb.R=0x03;
  rgb.G=0x1f;
  rgb.B=0x1f;
  SetRGBColor(3, &rgb);//LIGHT CYAN
  rgb.R=0x3f;
  rgb.G=0x00;
  rgb.B=0x00;
  SetRGBColor(4, &rgb);//LIGHT RED
  rgb.R=0x3f;
  rgb.G=0x08;
  rgb.B=0x2f;
  SetRGBColor(5, &rgb);//LIGHT MAGENTA
  return;
}

void AlarmRingAllow(void)
{
 #define HRPR_ARMRINGY	30
 #define HRPR_ARMRINGX	776
 #define ST_ARMRINGY	120
 #define ST_ARMRINGX	776
 #define NIBP_ARMRINGY	190
 #define NIBP_ARMRINGX	776
 #define SPO2_ARMRINGY	390
 #define SPO2_ARMRINGX	568
 #define RESP_ARMRINGY	390
 #define RESP_ARMRINGX	776
 #define TEMP1_ARMRINGY	496
 #define TEMP1_ARMRINGX	648
 #define TEMP2_ARMRINGY	541
 #define TEMP2_ARMRINGX	648
 //HRPR ALARM RING
 if(HRPR_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(HRPR_ARMRINGY, HRPR_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(HRPR_ARMRINGY, HRPR_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(HRPR_ARMRINGY+0,HRPR_ARMRINGX+4,HRPR_ARMRINGY+15,HRPR_ARMRINGX+11);
    //commline(HRPR_ARMRINGY+0,HRPR_ARMRINGX+5,HRPR_ARMRINGY+15,HRPR_ARMRINGX+10);
	    
    //commline(HRPR_ARMRINGY+15,HRPR_ARMRINGX+5,HRPR_ARMRINGY+0,HRPR_ARMRINGX+10);
    //commline(HRPR_ARMRINGY+15,HRPR_ARMRINGX+4,HRPR_ARMRINGY+0,HRPR_ARMRINGX+11);
 }
 //ST ALARM RING
 if(ST_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(ST_ARMRINGY, ST_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(ST_ARMRINGY, ST_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(ST_ARMRINGY+0,ST_ARMRINGX+4,ST_ARMRINGY+15,ST_ARMRINGX+11);
    //commline(ST_ARMRINGY+15,ST_ARMRINGX+4,ST_ARMRINGY+0,ST_ARMRINGX+11);
 }
 //SPO2 ALARM RING
 if(SPO2_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(SPO2_ARMRINGY, SPO2_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(SPO2_ARMRINGY, SPO2_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(SPO2_ARMRINGY+0,SPO2_ARMRINGX+4,SPO2_ARMRINGY+15,SPO2_ARMRINGX+11);
    //commline(SPO2_ARMRINGY+15,SPO2_ARMRINGX+4,SPO2_ARMRINGY+0,SPO2_ARMRINGX+11);
 }
 //NIBP ALARM RING
 if(NIBP_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(NIBP_ARMRINGY, NIBP_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(NIBP_ARMRINGY, NIBP_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(NIBP_ARMRINGY+0,NIBP_ARMRINGX+4,NIBP_ARMRINGY+15,NIBP_ARMRINGX+11);
    //commline(NIBP_ARMRINGY+15,NIBP_ARMRINGX+4,NIBP_ARMRINGY+0,NIBP_ARMRINGX+11);
 }
 //RESP ALARM RING
 if(RESP_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(RESP_ARMRINGY, RESP_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(RESP_ARMRINGY, RESP_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(RESP_ARMRINGY+0,RESP_ARMRINGX+4,RESP_ARMRINGY+15,RESP_ARMRINGX+11);
    //commline(RESP_ARMRINGY+15,RESP_ARMRINGX+4,RESP_ARMRINGY+0,RESP_ARMRINGX+11);
 }
 //TEMP1 ALARM RING
 if(TEMP1_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(TEMP1_ARMRINGY, TEMP1_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(TEMP1_ARMRINGY, TEMP1_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(TEMP1_ARMRINGY+0,TEMP1_ARMRINGX+4,TEMP1_ARMRINGY+15,TEMP1_ARMRINGX+11);
    //commline(TEMP1_ARMRINGY+15,TEMP1_ARMRINGX+4,TEMP1_ARMRINGY+0,TEMP1_ARMRINGX+11);
 }
 //TEMP2 ALARM RING
 if(TEMP2_ALLOW->value==V_ON&&ARMALLOW->value==V_ON){
    outtext(TEMP2_ARMRINGY, TEMP2_ARMRINGX, GRP_ARMRIGN, YELLOW, BLACK, FONT16);
 }else{
    outtext(TEMP2_ARMRINGY, TEMP2_ARMRINGX, GRP_ARMRIGN, BLACK, WHITE, FONT16);
    //SETCOLOR(LIGHTRED);
    //commline(TEMP2_ARMRINGY+0,TEMP2_ARMRINGX+4,TEMP2_ARMRINGY+15,TEMP2_ARMRINGX+11);
    //commline(TEMP2_ARMRINGY+15,TEMP2_ARMRINGX+4,TEMP2_ARMRINGY+0,TEMP2_ARMRINGX+11);
 }
 #undef HRPR_ARMRINGY
 #undef HRPR_ARMRINGX
 #undef ST_ARMRINGY
 #undef ST_ARMRINGX
 #undef NIBP_ARMRINGY
 #undef NIBP_ARMRINGX
 #undef SPO2_ARMRINGY
 #undef SPO2_ARMRINGX
 #undef RESP_ARMRINGY
 #undef RESP_ARMRINGX
 #undef TEMP1_ARMRINGY
 #undef TEMP1_ARMRINGX
 #undef TEMP2_ARMRINGY
 #undef TEMP2_ARMRINGX
 return;
}

void ExitMenu(void)
{
  CUR_item=NULL;	CUR_vmenu=NULL;
  CUR_Icus=0;		CUR_Vcus=0;
  MenuTime=MENUCOLOCK;	//退出菜单记时器
  ItemValue=AT_ITEM;	//在标题菜单的标题中
  SETCOLOR(CYAN);
  if(LEADDIS->value==V_SINGLE){//在单导联显示
      ItemAllow=0x17;
      WaveCont=0x0f;	//所有波形显示(开呼吸开关控制RESP波形显示或者实时列表显示)
      fillrect(WAVE_STARTY,  1, WAVE_ENDY, LEFTMAXX-1, BLACK);//擦除所有波形
      gapbeeline(ECG_ENDY+1, 0, ECG_ENDY+1, LEFTMAXX);	//ECG +I
      gapbeeline(ECG_IENDY+1, 0, ECG_IENDY+1, LEFTMAXX);	//PLETH
      gapbeeline(PLETH_ENDY+1, 0, PLETH_ENDY+1, LEFTMAXX);	//RESP
      if(RESPCHK->value==V_OFF){
  	DisListHd(PLETH_ENDY+4);
  	ItemAllow=0x13;	//"RESP"不允许刷新
      }
      ECGWavItstr=PLETHWavItstr=RESPWavItstr=NULL;
      EwaveX=PwaveX=RwaveX=WAVXSTART;//ECG PLETH RESP wave x is return start point;
      PLETHWave_row=PLETH_ENDY;
  }else{//七导联显示
      ItemAllow=0x0c;//I,II..V PLETH标题显示
      WaveCont=0x0b;//I,II..V PLETH,RESP波形显示
      fillrect(WAVE_STARTY,  1,  WAVE_ENDY,  LEFTMAXX-1, BLACK);
      gapbeeline(PLETH_ENDY+1, 0, PLETH_ENDY+1, LEFTMAXX);	//PLETH

⌨️ 快捷键说明

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