📄 dischar.h
字号:
PLETHWave_row=PLETH_SMALL_ENDY;//血氧波形的基线位置
if(RESPCHK->value==V_OFF){//呼吸关了不显示
WaveCont=0x03;
PLETHWave_row=WAVE_ENDY;
}
EwaveX=PwaveX=RwaveX=WAVXSTART;
ECGWavItstr=PLETHWavItstr=RESPWavItstr=NULL;
}
LeadStr2=VAL_LEAD[SECLEAD->value];
drawECGScaleRule();
SaveCount=0;//立即重新开始保存设置的值
return;
}
void initface(void)
{
char tempstr[20];
//float fvar;
int col, var;
ReviseColor();//重新写调色板颜色
SetBackColor(BACKCOLOR->value);//设置背景色
//SETCOLOR(ITEMUL_COLOR);
fillrect(1, 561, 23, 798, ITEMUL_COLOR);
fillrect(580, 561, 599, 798, ITEMUL_COLOR);
SETCOLOR(CYAN);
commline(0, LEFTMAXX, 599, LEFTMAXX);//左右分界线
Rectangle(0, 0, 599, 799);
//画波形速度标尺-----------------与实际尺寸对应12.1寸液晶800*600分辨率---------
gapbeeline(24, 0, 24, LEFTMAXX);
for(col=560, var=0; ; var++){
if(var&0x01){
col-=32;
}else{
col-=33;
}
if(col<0) break;
commline(24, col, 29, col);
}
gapbeeline(29, 0, 29, LEFTMAXX);
//结束画波形速度标尺-------------实际尺寸对应12.1寸液晶800*600分辨率---------
gapbeeline(ECG_ENDY+1, 0, ECG_ENDY+1, LEFTMAXX); //ECG+I WAVE UP
gapbeeline(ECG_IENDY+1, 0, ECG_IENDY+1, LEFTMAXX); //PLETH WAVE UP
gapbeeline(PLETH_ENDY+1, 0, PLETH_ENDY+1, LEFTMAXX);//RESP WAVE UP
gapbeeline(115, 560, 115, 799);//ECG value 与 ST value 分界线
gapbeeline(180, 560, 180, 799);//ST value 与 NIBP value分界线
gapbeeline(380, 560, 380, 799);//NIBP value 与 SPO2 RESP value 分界线
gapbeeline(490, 560, 490, 799);//SPO2和RESP value 与TEMP1和TEMP2 value 分界线
gapbeeline(380, 683, 490, 683);
gapbeeline(579, 560, 579, 799);
drawECGScaleRule();//画心电增益标尺
sprintf(tempstr,"%4.2fmV",(float)2/(1<<ECGSCALE->value));
outtext( 7 , 160, tempstr, WHITE, BLACK, FONT10);//心电增益
outtext(7, 400, VAL_SCALE[ECGSCALE->value], ECGSCL_COLOR, BLACK, FONT10);//ECG sacle
outtext(7, 72, VAL_LEAD[MAINLEAD->value], LIGHTGREEN, BLACK, FONT10); //I,II,III
outtext(414, 736, VAL_SCALE[RESPSCALE->value], LIGHTRED, BLACK, FONT10);//呼吸增益
//outtext(7, 336, workstastr, LIGHTCYAN, BLACK, FONT12);//工作状态
GAPmin=GAPTIME->value-1; GAPsec=60;//设置间断报警时间
AlarmTime=ALARMTIME->value;//设置报警时间
PRINTmin=PRTTIME->value;//设置自动打印时间
NIBPmin=NIBPsec=0;
sprintf(tempstr,"%02d:%02d", NIBPmin, NIBPsec);
outtext(362, 664, tempstr, WHITE, BLACK, FONT10);
outtext(584, 600, "-01-", WHITE, ITEMUL_COLOR, FONT10); //YEAR[年月日]
outtext(584, 736, ":00:", WHITE, ITEMUL_COLOR, FONT10); //TIME[时间]
//ItemAllow=0x17;
//if(RESPCHK->value==V_OFF){
//ItemAllow=0x13;//呼吸波形标题不刷新
//DisListHd(PLETH_ENDY+4);
//function()发送命令到心电板
//}
pulsering(); //脉搏铃
AlarmRingAllow();//显示所有小的报警铃开关状态
alarmring(); //大的(总的)报警开关铃
outtext(8, 752, ":6.02", WHITE, ITEMUL_COLOR, FONT10);//版本
outtext(340, 656, ":", WHITE, BLACK, FONT10);//标准: 成人 高
outtext(362, 648, ":", WHITE, BLACK, FONT10);//手动测量:04:59清除
if(NIBPUNIT->value==V_KPA)
SYST_UP->type=SYST_LOW->type=MEAN_UP->type=MEAN_LOW->type=DIAS_UP->type=DIAS_LOW->type=TP_KPA;
if(TEMP1UNIT->value==V_F_)
TEMP1_UP->type=TP__F;
if(TEMP2UNIT->value==V_F_)
TEMP2_UP->type=TP__F;
if(SECLEAD->value==MAINLEAD->value){//导联相同时的处理
MAINLEAD->value=V_II;
SECLEAD->value=V_III;
}
ExitMenu();
return;
}
void DataSampling(void)
{
(DataHand+Datapoint)->HR=HRrate; (DataHand+Datapoint)->PR=PRrate;
(DataHand+Datapoint)->ST=STvalue; (DataHand+Datapoint)->SPO2=SPO2value;
(DataHand+Datapoint)->TEMP1=TEMP1value;
(DataHand+Datapoint)->TEMP2=TEMP2value;
(DataHand+Datapoint)->RESP=RESPvalue;
if(NIBPsave&0x01){
if((DataHand+Datapoint)->PR==255)
(DataHand+Datapoint)->PR=NIBPrate;
(DataHand+Datapoint)->SYST=disSYST;
(DataHand+Datapoint)->DIAS=disDIAS;
(DataHand+Datapoint)->MEAN=disMEAN;
NIBPsave&=0xfe;
}else{
(DataHand+Datapoint)->SYST=255;
(DataHand+Datapoint)->DIAS=255;
(DataHand+Datapoint)->MEAN=255;
}
Datapoint++;
if(Datapoint>=MONDATAL){
Datafill=1;
Datapoint=0;
}
return;
}
void SaveRealData(void)
{//实时记录血压测量时的数据
static listlencount=0;
static char pagecount=0;
if(disSYST!=255||disMEAN!=255||disDIAS!=255){
if(NoWriteRealData){//从记录过数据
(RealData_Sta+RealDataCurrnt)->TIME=RealTimeCount=0;
NoWriteRealData=listlencount=pagecount=0;
}else{
(RealData_Sta+RealDataCurrnt)->TIME=RealTimeCount;
}
(RealData_Sta+RealDataCurrnt)->DATA.HR=HRrate;
(RealData_Sta+RealDataCurrnt)->DATA.PR=PRrate;
if((RealData_Sta+RealDataCurrnt)->DATA.PR==255)
(RealData_Sta+RealDataCurrnt)->DATA.PR=NIBPrate;
(RealData_Sta+RealDataCurrnt)->DATA.ST=STvalue;
(RealData_Sta+RealDataCurrnt)->DATA.SPO2=SPO2value;
(RealData_Sta+RealDataCurrnt)->DATA.TEMP1=TEMP1value;
(RealData_Sta+RealDataCurrnt)->DATA.TEMP2=TEMP2value;
(RealData_Sta+RealDataCurrnt)->DATA.RESP=RESPvalue;
(RealData_Sta+RealDataCurrnt)->DATA.SYST=disSYST;
(RealData_Sta+RealDataCurrnt)->DATA.MEAN=disMEAN;
(RealData_Sta+RealDataCurrnt)->DATA.DIAS=disDIAS;
RealDataCurrnt=(RealDataCurrnt+1)%REALDATALEN;
listlencount++; pagecount++;
if(pagecount==PRTLSTLEN){
NIBPLSTPAGE->up++;
pagecount=0;
}
if(listlencount==REALDATALEN){
NIBPListFill=1;
listlencount=0;
}
}
return;
}
void FreeRealData(void)
{ unsigned i_i;
NoWriteRealData=1;//从来未记录过数据
NIBPListFill=0;//数据没有满
RealDataCurrnt=0;//置当前数据为头
NIBPLSTPAGE->up=NIBPLSTPAGE->low=NIBPLSTPAGE->value=1;
for(i_i=0;i_i<REALDATALEN;i_i++){
(RealData_Sta+i_i)->DATA.HR=(RealData_Sta+i_i)->DATA.PR=\
(RealData_Sta+i_i)->DATA.SYST=(RealData_Sta+i_i)->DATA.MEAN=\
(RealData_Sta+i_i)->DATA.DIAS=(RealData_Sta+i_i)->DATA.SPO2=\
(RealData_Sta+i_i)->DATA.RESP=255;
(RealData_Sta+i_i)->DATA.ST=127;
(RealData_Sta+i_i)->DATA.TEMP2=(RealData_Sta+i_i)->DATA.TEMP1=455;
(RealData_Sta+i_i)->TIME=0;
}
return;
}
void ItemChange(void)
{ static unsigned char DisNo=0, oldNIBPsec=0xff, oldNIBPmin=0xff, AlarmPrint=0;
static unsigned char oldsec=60, oldmin=60, oldhour=24, oldday=0, oldmon=0;
static unsigned oldyear=0xff;
unsigned char tempstr[20], color, var;
unsigned char *strpoint;
gettime(&timer);
getdate(&dater);
while(com1count<6)//发送没有执行的命令
sendcom1();
if(!(alarmsound&0x1ff)){//所有值都没有超出报警限
AlarmTime=ALARMTIME->value;
GAPmin=GAPTIME->value-1;
GAPsec=60;
}
if(oldsec!=timer.ti_sec){ //--second counter and display
//=============自动退出菜单处理===================
MenuTime=MenuTime<MENUCOLOCK ? ++MenuTime :MENUCOLOCK;
if(MenuTime>=MENUCOLOCK-1&&CUR_item!=NULL)
ExitMenu();
//====END======自动退出菜单处理===============
//==========记录实时测量血压的时间间隔===============
RealTimeCount++;
if(RealTimeCount>=REALTIMELEN)//如果记录满24小时*60分钟*60秒
RealTimeCount=0;
//===END=====记录实时测量血压的时间间隔===============
//=============秒钟的显示处理==================
TIME_SEC->value=oldsec=timer.ti_sec;
if(oldsec)
TIME_SEC->up=TIME_SEC->low=oldsec;
else
TIME_SEC->up=TIME_SEC->low=1;
sprintf(tempstr,"%02d",oldsec);
outtext(584, 768, tempstr, WHITE, ITEMUL_COLOR, FONT10);
if(CUR_vmenu==VM_DATETIME){//在时间日期菜单
unsigned char bkcolor;
if((CUR_vmenu+CUR_Vcus)==TIME_SEC&&ItemValue==AT_VALUE){//在秒修改中
color=VM_CCOLOR; bkcolor=VM_CBCOLOR;
}else{
color=VM_COLOR; bkcolor=VM_BCOLOR;
}
outtext(TIME_SEC->vy, TIME_SEC->vx, tempstr, color, bkcolor, FONT12);
}//END 在时间日期菜单
//===END==========秒钟的显示处理==================
//=============报警时间处理==================
if(AlarmTime) {//在报警时间中
AlarmTime--; alarmsound|=0x4000;//alarm time allow
}else{//不在报警时间中
if(GAPALARM->value==V_ON){//间断报警开
alarmsound&=0xbfff;//alarm time don't allow
if(GAPsec){//间断记时开始
GAPsec--;
}else{
if(GAPmin){
GAPmin--;
}else{//间断时间到
AlarmTime=ALARMTIME->value;//开启报警时间
GAPsec=59; GAPmin=GAPTIME->value-1;
}
}
}else{//间断报警关
AlarmTime=ALARMTIME->value;//开启报警时间
}
}
//=====END========报警时间处理==================
//=============血压测量(清除)的时间处理==================
if(NIBPsec){//NIBP 记时开始
NIBPsec--;
}else{
if(NIBPmin){
NIBPmin--;
NIBPsec=59;
}else{//NIBP 记时时间到
if(AUTOMANUAL->value==V_AUTO){//自动测量
if(MONDEMO->value==V_MONITOR){
if(!(NIBPStatus&0x01)&&NIBPCheckTure){
NIBPsec=60;
NIBPmin=AUTOTIME->value-1;
com1str[2]=0x01; //启动血压测量
com1str[3]=NIBPCRIT->value|(CHECKMODE->value<<4);
com1str[4]=0;
com1str[5]=((com1str[2]+com1str[3])&255);
com1count=0;
while(com1count<6)
sendcom1();
}
}
}else{//清楚数据
//NIBPmin=CLEARTIME->value;
if(MONDEMO->value==V_MONITOR){
if(disSYST!=255||disMEAN!=255||disDIAS!=255){
com1str[2]=0x0a; //清除血压数据
com1str[3]=0;
com1str[4]=0;
com1str[5]=com1str[2];
com1count=0;
while(com1count<6)
sendcom1();
}
}else{//Demo mode
NIBPmin=CLEARTIME->value-1;
NIBPsec=60;
}
}//END 清除数据
}//END NIBP 时间到
}//END NIBP 记时开始
//====END======血压测量(清除)的时间处理==================
if(alarmstatus&0x01ff){//有报警
if(!AlarmPrint&&ALARMPRT->value==V_ON){//报警开始
AlarmPrint=1;
PRINTmin=PRTTIME->value-1;
PRINTsec=60;
key_code=F5_K;//打印键
}
}else{//没有报警
AlarmPrint=0;
}
if(PRINTsec){
PRINTsec--;
}else{
if(PRINTmin){
PRINTmin--;
PRINTsec=59;
}else{//打印时间到
PRINTmin=PRTTIME->value-1;
PRINTsec=60;
if(AUTOPRT->value==V_ON){//定时打印
key_code=F5_K;//打印键
}
if((ALARMPRT->value==V_ON)&&(alarmstatus&0x01ff)){//警报打印
key_code=F5_K;//打印键
}
}
}//
//====END======自动(报警)打印的时间处理==================
if(NIBPsave&0x02){
static char clock=0;
if(clock>=2){
SaveRealData();//存储当前测量的数据
NIBPsave&=0xfd;
clock=0;
}
clock++;
}
//=============数据保存==================
if(timer.ti_sec==59)
DataSampling();//HR,PR,ST..数据取样
//===============check sum================
//{static char readsta=1;
// if(ReadFromIQR&0x01){//have IQR
//if(readsta){
//ReadNvmemory();//发读心电模块NVmemory数据命令
//GetNVmemorToMap();
//readsta=0;
//}
//if(!(ReadFromIQR&0x02))//head is error;
//Quit=0;
//}
//}
}//end TIME_SEC->value!=timer.ti_sec;
if(oldNIBPsec!=NIBPsec){
sprintf(tempstr, "%02d", NIBPsec);//NIBP秒钟显示
outtext(362, 688, tempstr, WHITE, BLACK, FONT10);
oldNIBPsec=NIBPsec;
}
if(oldNIBPmin!=NIBPmin){
sprintf(tempstr, "%02d", NIBPmin);//NIBP分钟显示
outtext(362, 664, tempstr, WHITE, BLACK, FONT10);
oldNIBPmin=NIBPmin;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -