📄 rs485.c
字号:
j++;
}
}
}
else for(i=0;i<f1/10;i++)
ppp[i]=*(quan+i);
}
//********************************************************************
//函数名:uint8 Alarmswitch(void)
//输入:NULL
//输出:NULL
//功能描述:报警处理,返回报警序列
//全局变量:
//********************************************************************
uint8 Alarmswitch(void)
{
uint8 temp,i,k;
temp=0;k=0;
for(i=1;i<=8;i++)
{
if(alarmstate[i]>temp)
{
temp=alarmstate[i];
k=i;
}
}
return k;
}
//********************************************************************
//函数名:void Rs485_TapWave(uint8 TapNum)
//输入:uint8 TapNum 抱文序列
//输出:NULL
//功能描述:实时波形抱文处理
//全局变量:
//********************************************************************
void Rs485_TapWave(uint8 TapNum)
{
uint8 m,i,j,Rs485_Crc;
uint8 buf,temp1,buf2[4],tt[4],tempptr=0;
int8 ttt[14]=0;
for(i=1;i<95;i++)
{TapAll[i]=0;}
stateh=1;statel=1;
for(i=0;i<12;i++)
{
Rs485_Ecg1[i]=0x00;
Rs485_Ecg3[i]=0x00;
Rs485_Ecg4[i]=0x00;
}
for(i=0;i<14;i++)
{
if(Rs485_Ecgrp2==1200) Rs485_Ecgrp2=0;
ttt[i]=saveecg[Rs485_Ecgrp2++];
}
getin(ttt,140,120);
for(i=0;i<12;i++)
Rs485_Ecg2[i]=ppp[i];
for(i=0;i<14;i++)
{
if(Rs485_Pulrp==1200) Rs485_Pulrp=0;
ttt[i]=saveple[Rs485_Pulrp++];
}
getin(ttt,140,120);
for(i=0;i<12;i++)
Rs485_Pul[i]=ppp[i];
for(i=0;i<7;i++)
{
if(Rs485_Brearp==1200) Rs485_Brearp=0;
ttt[i]=saverep[Rs485_Brearp++];
}
getin(ttt,70,60);
for(i=0;i<6;i++)
Rs485_Brea[i]=ppp[i];
TapAll[3]=Rs485_Ecg1[0];tt[0]=Rs485_Ecg1[0];
TapAll[4]=Rs485_Ecg2[0];tt[1]=Rs485_Ecg2[0];
TapAll[5]=Rs485_Ecg3[0];tt[2]=Rs485_Ecg3[0];
TapAll[6]=Rs485_Ecg4[0];tt[3]=Rs485_Ecg4[0];
m=6;
tempptr=0;
for(i=1;i<12;i++)
{
tempptr++;
buf2[0]=Rs485_Ecg1[tempptr];
buf2[1]=Rs485_Ecg2[tempptr];
buf2[2]=Rs485_Ecg3[tempptr];
buf2[3]=Rs485_Ecg4[tempptr];
for(j=0;j<4;j++)
{
Rs485_Dec(tt[j],buf2[j]);
m=Rs485_DataAdd(m);
tt[j]=buf2[j];
}
}
tempptr=0;
temp1=Rs485_Brea[tempptr++];
m=Rs485_DataAccr(temp1&0x0f,m);
m=Rs485_DataAccr(((temp1>>4)&0x0f),m);
for(i=1;i<6;i++)
{
buf=Rs485_Brea[tempptr++];
Rs485_Dec(temp1,buf);
m=Rs485_DataAdd(m);
temp1=buf;
}
tempptr=0;
buf=0;
temp1=0;
temp1=Rs485_Pul[2*tempptr++]*2;
m=Rs485_DataAccr(temp1&0x0f,m);
m=Rs485_DataAccr(((temp1>>4)&0x0f),m);
for(i=1;i<6;i++)
{
buf=Rs485_Pul[2*tempptr++]*2;
Rs485_Dec(temp1,buf);
m=Rs485_DataAdd(m);
temp1=buf;
}
TapAll[0]=ID_SIZE+9;
TapAll[2]=TapNum;
TapAll[1]=m;
Rs485_Crc=0;
for(i=0;i<TapAll[1]+1;i++)
{Rs485_Crc+=TapAll[i];}
TapAll[(TapAll[1]+1)]=0-Rs485_Crc;
Rs485_BagAcc(TapAll);
}
//********************************************************************
//函数名:void Rs485_RealData(void)
//输入:NULL
//输出:NULL
//功能描述:实时数据抱文处理
//全局变量:
//********************************************************************
void Rs485_RealData(void)
{
uint8 m=0,n=0;
uint8 BagData[16];
uint8 Rs485_Crc;
n=Alarmswitch();
switch(n)
{
case 0:m=0;break;
case 1:m=12;break;
case 2:m=10;break;
case 3:m=9;break;
case 4:m=8;break;
case 5:m=7;break;
case 6:m=11;break;
case 7:m=6;break;
case 8:m=5;break;
default:m=0;break;
}
if(flag_newnibp)
{m|=0x80;flag_newnibp=0;}
BagData[0]=ID_SIZE+4;
BagData[1]=DATA_SIZE+1;
BagData[2]=m;
BagData[3]=heartrate;
BagData[4]=resp;
if(-128<=stval&&stval<=127) BagData[5]=stval+128;
else BagData[5]=0xff;
BagData[6]=spo2;
BagData[7]=pulse;
if(temp>=200&&temp<=450) BagData[8]=temp-200;
else BagData[8]=0xff;
BagData[9]=0xff;
if(sbp>=30&&sbp<=270) BagData[10]=sbp;
else if(sbp<30) BagData[10]=0;
else BagData[10]=0xff;
if(10<=dbp&&dbp<=230) BagData[11]=dbp;
else if(dbp<10) BagData[11]=0;
else BagData[11]=0xff;
BagData[12]=mbp;
BagData[13]=0xff;
Rs485_Crc=0;
for(m=0;m<14;m++)
{
Rs485_Crc+=BagData[m];
}
BagData[14]=0-Rs485_Crc;
BagData[15]=0;
Rs485_BagAcc(BagData);
}
//********************************************************************
//函数名:void printstart(void)
//输入:NULL
//输出:NULL
//功能描述:实时波形打印开始处理
//全局变量:
//********************************************************************
void printstart(void)
{
uint16 m,i;
int8 max,min,v;
char crc;
char bag[9];
bag[0]=0x1e;
m=2;
bag[m++]=0x77;
bag[m++]=calender.year/100;
bag[m++]=calender.year%100;
bag[m++]=calender.mon;
bag[m++]=calender.day;
bag[m++]=calender.hour;
bag[m++]=calender.min;
if(saveep>250) i=saveep-250;
else i=950;
maxmin(&saveecg[i],&max,&min);
v=(max+min)/2;
bag[m++]=v;
bag[1]=m-1;
crc=0;
for(i=1;i<m;i++)
crc+=bag[i];
bag[m]=-crc;
I2cTxdata(bag);
print_Ecgrp2=saveep;
print_Pulrp=savepp;
print_Brearp=saverp;
print_RxBufNum=0;
print_TxbufNum=0;
printbusy_flag=0;
}
//********************************************************************
//函数名:void print_tap(uchar num)
//输入:uchar m 打印速度
//输出:NULL
//功能描述:波形数据打包处理
//全局变量:
//********************************************************************
void print_tap(uint8 num)
{
char bag[50];
int8 i,m;
char crc=0;
int8 ttt[24];
bag[0]=0x1e;
bag[2]=0x00;
m=3;
for(i=0;i<num;i++)
{
print_Ecg1[i]=0x00;
print_Ecg3[i]=0x00;
print_Ecg4[i]=0x00;
}
for(i=0;i<14;i++)
{
if(print_Ecgrp2==1200) print_Ecgrp2=0;
ttt[i]=saveecg[print_Ecgrp2++];
}
getin(ttt,140,num*10);
for(i=0;i<num;i++)
bag[m++]=ppp[i];
for(i=0;i<14;i++)
{
if(print_Pulrp==1200) print_Pulrp=0;
ttt[i]=saveple[print_Pulrp++];
}
getin(ttt,140,num*10);
for(i=0;i<num;i++)
bag[m++]=ppp[i];
for(i=0;i<7;i++)
{
if(print_Brearp==1200) print_Brearp=0;
ttt[i]=saverep[print_Brearp++];
}
getin(ttt,70,10*num);
for(i=0;i<num;i++)
bag[m++]=ppp[i];
bag[1]=m-1;
for(i=1;i<m;i++)
crc+=bag[i];
bag[m]=-crc;
I2cTxdata(bag);
}
//********************************************************************
//函数名:void print_alarmtap(uint8 num)
//输入:uint8 num 报警序列
//输出:NULL
//功能描述:报警打印处理
//全局变量:
//********************************************************************
void print_alarmtap(uint8 num)
{
int8 m,i;
char crc=0;
char bag[25];
bag[0]=0x1e;
//if(!num&0x10)
// bag[2]=0xc0;
//else
bag[2]=0xc0;//+(((char)(setpara.reinforce)<<2)&0xc)+((char)(setpara.speed)&0x3);
bag[3]=num;
m=4;
bag[m++]=calender.year/100;
bag[m++]=calender.year%100;
bag[m++]=calender.mon;
bag[m++]=calender.day;
bag[m++]=calender.hour;
bag[m++]=calender.min;
bag[m++]=heartrate;
bag[m++]=resp;
if(-128<=stval&&stval<=127) bag[m++]=stval;
else bag[m++]=0xff;
bag[m++]=spo2;
bag[m++]=pulse;
if(temp>=200&&temp<=450) bag[m++]=temp-200;
else bag[m++]=0xff;
bag[m++]=0xff;
if(sbp>=30&&sbp<=270) bag[m++]=sbp-30;
else if(sbp<30) bag[m++]=0;
else bag[m++]=0xff;
if(10<=dbp&&dbp<=230) bag[m++]=dbp-10;
else if(dbp<10) bag[m++]=0;
else bag[m++]=0xff;
bag[m++]=0xff;
bag[1]=m-1;
for(i=1;i<m;i++)
crc+=bag[i];
bag[m]=-crc;
I2cTxdata(bag);
}
//********************************************************************
//函数名:void print_timetap(uint8 num)
//输入:NULL
//输出:NULL
//功能描述:定时数据打印处理
//全局变量:
//********************************************************************
void print_timetap(uint8 num)
{
uint16 m,i;
int8 max,min,v;
char crc=0;
char bag[25];
bag[0]=0x1e;
if(setpara.content==1)
bag[2]=0x90+(((char)(setpara.reinforce)<<2)&0xc)+((char)(setpara.speed)&0x3);
else bag[2]=0x80+(((char)(setpara.reinforce)<<2)&0xc)+((char)(setpara.speed)&0x3);
bag[3]=num+0x80;
m=4;
bag[m++]=calender.year/100;
bag[m++]=calender.year%100;
bag[m++]=calender.mon;
bag[m++]=calender.day;
bag[m++]=calender.hour;
bag[m++]=calender.min;
bag[m++]=heartrate;
bag[m++]=resp;
if(-128<=stval&&stval<=127) bag[m++]=stval;
else bag[m++]=0xff;
bag[m++]=spo2;
bag[m++]=pulse;
if(temp>=200&&temp<=450) bag[m++]=temp-200;
else bag[m++]=0xff;
bag[m++]=0xff;
if(sbp>=30&&sbp<=270) bag[m++]=sbp-30;
else if(sbp<30) bag[m++]=0;
else bag[m++]=0xff;
if(10<=dbp&&dbp<=230) bag[m++]=dbp-10;
else if(dbp<10) bag[m++]=0;
else bag[m++]=0xff;
bag[m++]=0xff;
if(saveep>250) i=saveep-250;
else i=950;
maxmin(&saveecg[i],&max,&min);
v=(max+min)/2;
bag[m++]=v;
bag[1]=m-1;
for(i=1;i<m;i++)
crc+=bag[i];
bag[m]=-crc;
I2cTxdata(bag);
}
//********************************************************************
//函数名:void print_timewave(void)
//输入:NULL
//输出:NULL
//功能描述:定时波形打印开始处理
//全局变量:
//********************************************************************
void print_timewave(void)
{
char bag[155];
int8 i,m,n;
char crc=0;
int8 ttt[50];
bag[0]=0x1e;
bag[2]=0xb0;
switch((char)(setpara.speed))
{
case 0:n=12;break;
case 1:n=24;break;
case 2:n=48;break;
}
m=3;
for(i=0;i<n;i++)
{
print_Ecg1[i]=0x00;
print_Ecg3[i]=0x00;
print_Ecg4[i]=0x00;
}
for(i=0;i<14;i++)
{
if(print_Ecgrp2==1200) print_Ecgrp2=0;
ttt[i]=saveecg[print_Ecgrp2++];
}
getin(ttt,140,10*n);
for(i=0;i<n;i++)
bag[m++]=ppp[i];
for(i=0;i<14;i++)
{
if(print_Pulrp==1200) print_Pulrp=0;
ttt[i]=saveple[print_Pulrp++];
}
getin(ttt,140,10*n);
for(i=0;i<n;i++)
bag[m++]=ppp[i];
for(i=0;i<7;i++)
{
if(print_Brearp==1200) print_Brearp=0;
ttt[i]=saverep[print_Brearp++];
}
getin(ttt,70,10*n);
for(i=0;i<n;i++)
bag[m++]=ppp[i];
bag[1]=m-1;
for(i=1;i<m;i++)
crc+=bag[i];
bag[m]=-crc;
I2cTxdata(bag);
}
//********************************************************************
//函数名:void maxmin(int8 *data,int8 *max,int8 *min)
//输入:int8 *data,int8 *a,int8 *b 数据串地址,最大最小值存储地址
//输出:NULL
//功能描述:在一串数据中找出最大和最小值
//全局变量:
//********************************************************************
void maxmin(int8 *data,int8 *max,int8 *min)
{
uint8 i;
*max=*data;
*min=*data;
for(i=0;i<250;i++)
{
if(*(data+i)>*max) *max=*(data+i);
if(*(data+i)<*min) *min=*(data+i);
}
}
//********************************************************************
//函数名:void printpro(void)
//输入:NULL
//输出:NULL
//功能描述:与打印机转接板通信的一个历程,在住函数中调用
//全局变量:
//********************************************************************
void print_pro(void)
{
int8 n,m;
if(flag_print&&!printbusy_flag) //实时打印处理
{
if(((saveep>(14+print_Ecgrp2))||(print_Ecgrp2<(saveep+1186)&&print_Ecgrp2>saveep))&&((savepp>(14+print_Pulrp))||(print_Pulrp<(savepp+1186)&&print_Pulrp>savepp))&&((saverp>(7+print_Brearp))||(print_Brearp<(saverp+1193)&&print_Brearp>saverp)))
print_tap(12);
}
n=Alarmswitch(); //判是否有报警
switch(n)
{
case 1:m=12;break;
case 2:m=10;break;
case 3:m=9;break;
case 4:m=8;break;
case 5:m=7;break;
case 6:m=11;break;
case 7:m=6;break;
case 8:m=5;break;
default:m=0;break;
}
if(!alarmitem) {printalarm_flag=0;printalarmstate=0;}
if(setpara.alarm&&(n&&!printalarm_flag||alarmitem>printalarmstate)&&!printbusy_flag)
{
//发送报警数据
print_alarmtap(m);
printalarm_flag=1;
printalarmstate=alarmitem;
}
if(setpara.time&&!flag_print&&!flag_timeprint&&!printbusy_flag) //定时打印数据处理
{
if(calender.hour*60+calender.min-printlasttime==setpara.timelong||24*60-printlasttime+calender.hour*60+calender.min==setpara.timelong)
{
// if(!setpara.content) print_alarmtap(m);
// else
print_timetap(m);
printlasttime=calender.hour*60+calender.min;
if(setpara.content)
{
flag_timeprint=1;
print_Ecgrp2=saveep;
print_Pulrp=savepp;
print_Brearp=saverp;
timeprintcount=0;
switch((char)(setpara.speed))
{
case 0:timecount=40;
case 1:timecount=80;
// case 2:timecount=100;
}
time=0;
}
}
}
if(flag_timeprint&&!printbusy_flag&&timeprintcount>=timecount)
{
if(((saveep>(14+print_Ecgrp2))||(print_Ecgrp2<(saveep+1186)&&print_Ecgrp2>saveep))&&((savepp>(14+print_Pulrp))||(print_Pulrp<(savepp+1186)&&print_Pulrp>savepp))&&((saverp>(7+print_Brearp))||(print_Brearp<(saverp+1193)&&print_Brearp>saverp)))
{print_timewave();time++;timeprintcount=0;}
if(time==100) flag_timeprint=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -