📄 main.c
字号:
}//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 + -