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

📄 print.h

📁 该程序是基于PC104的工控板的多参数监护仪的源程序.监护内容包含:心电血氧呼吸无创血压等等.
💻 H
字号:
#ifndef __PRINT_H
#define __PRINT_H
#ifndef __STDIO_H
#include <stdio.h>
#endif
#ifndef __STRING_H
#include <string.h>
#endif
#ifndef __BIOS_H
#include <bios.h>
#endif
#ifndef  __MENU_H
#include "menu.h"
#endif
//#define Pspace 8    //打印空格数
#define EVERY_PRINT_POINT 15
//打印机的点阵为8点/mm
//本项目中冻结(或实时打印的时候是560点,换成实际长度为171.5mm)
//对于打印长度来说的话就需要 171.5mm*8点/mm=1372个点,需要在原来的560点的基础上均匀插入812个点

union aa{//打印用
	int i;
	char ii[2];
};

#define FONTPRT

extern unsigned char *PLETHcache2;
extern unsigned char far *ECGcache2[7];
//extern int printlength;//波形长

//0x439b=汣=`C
//0x469b=汧=`F

//打印函数点函数
void printpoint(int ECGy, int PLETHy)
{ union aa aa1, aa2;
  aa1.i=ECGy+45;
  if(aa1.i==26||aa1.i==282)
  	aa1.i--;
  //if(aa1.i<10) aa1.i=10;
  if(aa1.i>380)aa1.i=383;
  
  aa2.i=PLETHy;
  if(aa2.i==26||aa2.i==282)
  	aa2.i--;
  //if(aa2.i<10) aa2.i=10;
  if(aa2.i>380)aa2.i=383;
  fprintf(stdprn,"%c",27);fprintf(stdprn,"%c",39);fprintf(stdprn,"%c",2);
  fprintf(stdprn,"%c",aa1.ii[0]);
  fprintf(stdprn,"%c",aa1.ii[1]);
  fprintf(stdprn,"%c",aa2.ii[0]);
  fprintf(stdprn,"%c",aa2.ii[1]);
  fprintf(stdprn,"%c",13);
  return ;
}

void printwave(void){
 int status;//, abyte=0;//打印状态字节
 int pspace;
 int py,pyy;
 char tempstr[25];
 static int pointer;
 static int ECGy, PLETHy;
 static char PrtPointCtrl;
 int Etemp_y, Ptemp_y;
 
 if(PrtWavCount==255)  return;
 
 status=biosprint(2,0,0);
 if(status==0x90)  ///打印准备好
 {
  switch(PrtWavCount){
      case 0:	//init printer for text
      		#ifdef FONTPRT
		fprintf(stdprn,"%c",27);fprintf(stdprn,"%c",64);//初使化
		fprintf(stdprn,"%c",27);fprintf(stdprn,"%c",99);fprintf(stdprn,"%c",0);
                fprintf(stdprn,"%c",13);
                #endif
                PrtWavCount++;
		break;
     case 1:	//space
     		#ifdef FONTPRT
		//fprintf(stdprn,"%c",28);  fprintf(stdprn,"%c",38);//汉字方式
		fprintf(stdprn,"%c",27); fprintf(stdprn,"%c",87);fprintf(stdprn,"%c",1);
		fprintf(stdprn,"%c",27); fprintf(stdprn,"%c",87);fprintf(stdprn,"%c",3);//打印字体放大3倍
		fprintf(stdprn,"%c",27); fprintf(stdprn,"%c",49);fprintf(stdprn,"%c",5);//行间距5点
		#endif
		PrtWavCount++;
		break;
    case 2:	//day
    		#ifdef FONTPRT
                sprintf(tempstr,"%4d-%02d-%02d",frzdate.da_year,frzdate.da_mon,frzdate.da_day);
                for(pspace=0;pspace<10;pspace++)
                    fprintf(stdprn,"%c",tempstr[pspace]);
                #endif
                PrtWavCount++;
		break;
    case 3:	//time base 4
    		#ifdef FONTPRT
                sprintf(tempstr,"  %02d:%02d:%02d\n",frztime.ti_hour,frztime.ti_min,frztime.ti_sec);
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 4:	//HR
    		#ifdef FONTPRT
                if(FrzData.HR>0&&FrzData.HR<255)
                    	sprintf(tempstr,"HR=%-3d   ",FrzData.HR);
		else sprintf(tempstr,"HR=---   ");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 5:	//PR
    		#ifdef FONTPRT
                if(FrzData.PR>0&&FrzData.PR<255)
                    sprintf(tempstr,"    PR=%-3d\n",FrzData.PR);
                else sprintf(tempstr,"    PR=---\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 6:	//ST
    		#ifdef FONTPRT
                if(FrzData.ST!=127)
                    sprintf(tempstr,"ST=%-5.2f  ",(float)FrzData.ST/100.0);
                else sprintf(tempstr,"ST=-.--   ");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 7:	//SP02
    		#ifdef FONTPRT
           	if(FrzData.SPO2>0&&FrzData.SPO2<100)
           	    sprintf(tempstr,"   SPO2=%-2d\n",FrzData.SPO2);
                else sprintf(tempstr,"   SPO2=--\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 8:	//SYST
    		#ifdef FONTPRT
           	if(FrzData.SYST>0&&FrzData.SYST<255)
           	    sprintf(tempstr,"SYST=%-3dmmHg %4.1fKpa\n",FrzData.SYST,(float)FrzData.SYST/7.5);
                else sprintf(tempstr,"SYST=---mmHg --.-Kpa\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 9:	//MEAN
    		#ifdef FONTPRT
           	if(FrzData.MEAN>0&&FrzData.MEAN<255)
           	    sprintf(tempstr,"MEAN=%-3dmmHg %4.1fKpa\n",FrzData.MEAN,(float)FrzData.MEAN/7.5);
                else sprintf(tempstr,"MEAN=---mmHg --.-Kpa\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 10:	//DIAS
    		#ifdef FONTPRT
           	if(FrzData.DIAS>0 && FrzData.DIAS<255)
           	    sprintf(tempstr,"DIAS=%-3dmmHg %4.1fKpa\n",FrzData.DIAS,(float)FrzData.DIAS/7.5);
                else sprintf(tempstr,"DIAS=---mmHG --.-Kpa\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 11:	//TEMP1
    		#ifdef FONTPRT
                if(FrzData.TEMP1>250&&FrzData.TEMP1<455)
                    sprintf(tempstr,"TEMP1=%-3.1f汣 %-4.1f汧\n",(float)FrzData.TEMP1/10.0,(float)FrzData.TEMP1*0.18+32);
                else  sprintf(tempstr,"TEMP1=--.-汣 ---.-汧\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		if(FrzData.TEMP2>250&&FrzData.TEMP2<455)
                    sprintf(tempstr,"TEMP2=%-3.1f汣 %-4.1f汧\n",(float)FrzData.TEMP2/10.0,(float)FrzData.TEMP2*0.18+32);
                else  sprintf(tempstr,"TEMP2=--.-汣 ---.-汧\n");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
		#endif
		PrtWavCount++;
		break;
    case 12:	//RESP
    		#ifdef FONTPRT
           	if(FrzData.RESP>0&&FrzData.RESP<99)
           	    sprintf(tempstr,"RESP=%-2d    LEAD=",FrzData.RESP);
                else sprintf(tempstr,"RESP=--     LEAD=");
                for(pspace=0;pspace<strlen(tempstr);pspace++)
		    fprintf(stdprn,"%c",tempstr[pspace]);
                for(pspace=0;pspace<3;pspace++)
		    fprintf(stdprn,"%c",*(VAL_LEAD[PrtECG_Lead]+pspace));
		fprintf(stdprn,"%c",13);
		#endif
		PrtWavCount++;
		break;
    case 13:	//init for graph
		fprintf(stdprn,"%c",27);   fprintf(stdprn,"%c",64);//初始化
	    	fprintf(stdprn,"%c",27);   fprintf(stdprn,"%c",99);fprintf(stdprn,"%c",0);//禁止反向打印
		pointer=0;
		PrtPointCtrl=0;//打印点数的控制
		PrtWavCount++;
		break;
    case 14:	//print wave
    		for(pspace=0; pspace<EVERY_PRINT_POINT; pspace++){
		    if(pointer>=FRZWAVELEN){
			PrtWavCount++;
			break;
		    }
		    if(ECGSCALE->value!=V_X4)
			Etemp_y=*(ECGcache2[PrtECG_Lead]+EWavPrtHd+pointer)>>1;
		    else
	    	    Etemp_y=*(ECGcache2[PrtECG_Lead]+EWavPrtHd+pointer)-64;
	    	    if(Etemp_y<=0)	Etemp_y=1;
		    if(Etemp_y>=128)	Etemp_y=127;
		    Etemp_y*=3;
		    Ptemp_y=PLETHcache2[PWavPrtHd+pointer]*3;
		    if(!pointer){
		    	ECGy=Etemp_y; PLETHy=Ptemp_y;
		    }
		    printpoint(ECGy,PLETHy);
		    PrtPointCtrl=!PrtPointCtrl;
		    if(PrtPointCtrl){
		    	printpoint(ECGy+((Etemp_y-ECGy)>>1), PLETHy+((Ptemp_y-PLETHy)>>1));
		    }else{
		    	//printpoint(ECGy+((Etemp_y-ECGy)>>1), PLETHy+((Ptemp_y-PLETHy)>>1));
		    	//printpoint(ECGy+((Etemp_y-ECGy)>>1), PLETHy+((Ptemp_y-PLETHy)>>1));
		    	printpoint(ECGy+(Etemp_y-ECGy)/3, PLETHy+(Ptemp_y-PLETHy)/3);
		    	printpoint(ECGy+(Etemp_y-ECGy)*2/3, PLETHy+(Ptemp_y-PLETHy)*2/3);
		    }
		    ECGy=Etemp_y;
		    PLETHy=Ptemp_y;
		    pointer++;
		}
                break;
    case 15://restore print mode
           	for(pspace=0;pspace<9;pspace++)
           	    fprintf(stdprn,"%c",10);
  	        fprintf(stdprn,"%c",27);   fprintf(stdprn,"%c",64);
		PrtWavCount++;
		break;
    default:	PrtWavCount=255;
    		break;
   }//switch end
 }//printer ready
 return;
}//print wave function
#endif

⌨️ 快捷键说明

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