📄 jzj.cpp
字号:
{
//----------先转换高4位-------------
Buffer[i]=0;
if(i==0) Div=1000;
else Div=10;
TempInt=Value/Div;
TempChar=(uCHAR)TempInt;
TempChar=TempChar<<4;
Buffer[i]=Buffer[i]|TempChar;
Value=Value-TempInt*Div;
//----------再转换低8位-------------
if(i==0) Div=100;
else Div=1;
TempInt=Value/Div;
TempChar=(uCHAR)TempInt;
Buffer[i]=Buffer[i]|TempChar;
Value=Value-TempInt*Div;
}
}
//----------将浮点数 235.8转换位0x03 0x23 0x58 --------------
//----------将浮点数 -235.8转换位0xf3 0x23 0x58 -------------
void Decode_Three(sFLOAT Value,uCHAR Buffer[3])
{
sFLOAT TempFloat;
uINT TempInt;
uCHAR Exp=0;
uCHAR i=0;
for(i=0;i<3;i++) Buffer[i]=0;
if(Value>=0) Buffer[0]=Buffer[0]&0x0f;//高四位为0
else Buffer[0]=Buffer[0]|0xf0;//高四位为f
Value=fabs(Value);//取绝对值
if(Value>(0.9999e+15)) Value=0.9999e+15; //保证Exp<16
TempFloat=Value;
while(TempFloat>=1)
{
Exp++;
TempFloat=TempFloat/10;
}
Buffer[0]=Buffer[0]|Exp;//填写10的次方
TempInt=(int)(TempFloat*10000);
INT_TO_BCD(TempInt,&Buffer[1]);
}
//------"查 表 法 计 算 CRC 校 验-----------------
uINT crc16(uCHAR *buf,uINT n)
{
uCHAR CRCHi=0xff;
uCHAR CRCLow=0xff;
uINT CRC=0xffff;
uINT CRCFlag=0;
uINT i=0,j=0;
for(j=0;j<n;j++)
{
CRC=CRC^buf[j];
for(i=0;i<8;i++)
{
CRCFlag=CRC&0x0001;
CRC=CRC>>1;
if(CRCFlag==1)
{
CRC=CRC^0xa001;//0xa001 CRC校验多项式
}
}
}
CRCHi=CRC&0x00ff;
CRCLow=(CRC>>8)&0x00ff;
return (CRCHi<<8|CRCLow);
}
//----------将整型值转换为CDT格式数据-----------------
void ChangeCDTFormat(uINT Data,uCHAR * Buffer)
{
uCHAR IsZero=0;
if(Data>2047) Data=2047;
if(Data<=0)
{
Data=-Data;
IsZero=1;
}
Buffer[0]=Data&0xff;
Buffer[1]=(Data>>8)&0xff;
if(IsZero==1) Buffer[1]=Buffer[1]|0x08;
}
//---------------计算法---------------------
uCHAR CalcCRC(uCHAR *pBuff, uINT len)
{
uINT q, r;
uINT crc;
uINT i;
crc = 0;
q = 0; /* 字节计数器 */
r = 0; /* 字节内位的计数器 */
while(q < len)
{
if(pBuff[q] & (0x80>>r)) /*当字节内某位为1时, 在余数末尾置1, 否则置0*/
crc |= 0x01;
if(crc >= 0x100)
crc ^= 0x107; /*异或多相余子式*/
crc <<= 1;
r++;
if(r==8) /*处理下一个字节*/
{
r=0;
q++;
}
}
for(i=0; i<8; i++) /*对位流的后8为计算CRC校验码*/
{
if(crc >= 0x100)
crc ^=0x107;
crc <<= 1;
}
crc >>= 1;
crc = (~crc); /*余数取反*/
crc = crc & 0xff;
return crc;
}
//----------------------将0x45 转换为 0x34 0x 35 --------------------------------
void Change_Address(uCHAR Address,uCHAR * Buffer)
{
uCHAR TempValue;
uINT Temp;
TempValue=Address&0xf0;//屏蔽低4位
TempValue=TempValue>>4;//右移4位
if(TempValue>9)
Buffer[0]=65+(TempValue-10);//'A'=0x41=65;
else
Buffer[0]=48+TempValue;//'0'=0x30=48;
Temp=Address&0x0f;//屏蔽高4位
if(Temp>9)
Buffer[1]=65+(Temp-10);//'A'=0x41=65;
else
Buffer[1]=48+Temp;//'0'=0x30=48;
}
//----------------------将0x34 0x35 转换为 0x45 --------------------------------
uCHAR Reverse_Address(uCHAR * Buffer)
{
uCHAR TempValue1=0;
uCHAR TempValue2=0;
if((Buffer[0]>=0x30)&&(Buffer[0]<=0x39))
{
TempValue1=Buffer[0]-0x30;
}
else if((Buffer[0]>=0x41)&&(Buffer[0]<=0x46))
{
TempValue1=Buffer[0]-0x41+10;
}
if((Buffer[1]>=0x30)&&(Buffer[1]<=0x39))
{
TempValue2=Buffer[1]-0x30;
}
else if((Buffer[1]>=0x41)&&(Buffer[1]<=0x46))
{
TempValue2=Buffer[1]-0x41+10;
}
TempValue1=TempValue1*16+TempValue2;
return TempValue1;
}
//-----------------译码表的上送数据格式--------------------
sFLOAT Get_Value_Hex(uCHAR * Data)
{
uCHAR ConvertString[8];
sFLOAT Value;
uINT i=0;
if(Data[0]==0x2b)
{
for(i=0;i<5;i++)
ConvertString[i]=Data[i+1];
ConvertString[5]=0;
Value=atof(ConvertString);
}
else if(Data[0]==0x2d)
{
for(i=0;i<5;i++)
ConvertString[i]=Data[i+1];
ConvertString[5]=0;
Value=atof(ConvertString);
Value=Value*(-1);
}
return Value;
}
//-------------------------开入板置位译码--------------------------
uCHAR ChangeToBit(uCHAR Byte,uCHAR Bit)
{
uCHAR Value;
switch(Bit)
{
case 0:
{
Value=Byte&0x08;
break;
}
case 1:
{
Value=Byte&0x04;
break;
}
case 2:
{
Value=Byte&0x02;
break;
}
case 3:
{
Value=Byte&0x01;
break;
}
}
if(Value)
Value=0x01;
else Value=0x00;
return Value;
}
//-------------------------------------------------------
uCHAR SetBit(uCHAR Data,uCHAR BitNum,uCHAR flag)
{
switch(BitNum)
{
case 7:
{
if(flag==0)
Data=Data&0x7f;
else
Data=Data|0x80;
break;
}
case 6:
{
if(flag==0)
Data=Data&0xbf;
else
Data=Data|0x40;
break;
}
case 5:
{
if(flag==0)
Data=Data&0xdf;
else
Data=Data|0x20;
break;
}
case 4:
{
if(flag==0)
Data=Data&0xef;
else
Data=Data|0x10;
break;
}
case 3:
{
if(flag==0)
Data=Data&0xf7;
else
Data=Data|0x08;
break;
}
case 2:
{
if(flag==0)
Data=Data&0xfb;
else
Data=Data|0x04;
break;
}
case 1:
{
if(flag==0)
Data=Data&0xfd;
else
Data=Data|0x02;
break;
}
case 0:
{
if(flag==0)
Data=Data&0xfe;
else
Data=Data|0x01;
break;
}
}
return Data;
}
//---------将浮点数Value按一定的格式转换为字符串存入String[]中--------
void GetString_FromFloat(sFLOAT Value,uCHAR Type,char String[32])
{
switch(Type)
{
case 0://一位小数
{
sprintf(String,"%.1f",Value);
break;
}
case 1://一位小数
{
sprintf(String,"%.2f",Value);
break;
}
case 2://一位小数
{
sprintf(String,"%.3f",Value);
break;
}
default:
break;
}
}
//--------将整数Value按一定的格式转换为字符串存入String[]中--------
void GetString_FromInt(uINT Value,char * String)
{
if(Value>=9999) Value=9999;
if((Value>=1000)&&(Value<=9999))
{
String[0]=Value/1000+0x30;
String[1]=(Value%1000)/100+0x30;
String[2]=(Value%100)/10+0x30;
String[3]=Value%10+0x30;
String[4]='\0';
}
else if((Value>=100)&&(Value<=999))
{
String[0]=Value/100+0x30;
String[1]=(Value%100)/10+0x30;
String[2]=Value%10+0x30;
String[3]='\0';
}
else if((Value>=10)&&(Value<=99))
{
String[0]=Value/10+0x30;
String[1]=Value%10+0x30;
String[2]='\0';
}
else if(Value<=9)
{
String[0]=Value+0x30;
String[1]='\0';
}
}
//--------------将一个字符串转换为整数---------------------
uINT Get_IntFromString(char * String)
{
char TempString[32];
uINT Value;
uCHAR i;
for(i=0;i<strlen(String);i++)
{
if((String[i]>0x39)||(String[i]<0x30)) break;
else TempString[i]=String[i];
}
TempString[i]=0;
if(i) Value=atoi(TempString);
else Value=0;
return Value;
}
//---------------将一个字符串转换为浮点数-----------------------
sFLOAT Get_FloatFromString(char * String)
{
char TempString[32];
sFLOAT Value;
uCHAR i;
for(i=0;i<strlen(String);i++)
{
if(((String[i]<=0x39)&&(String[i]>=0x30))||(String[i]==46))
TempString[i]=String[i];
else break;
}
TempString[i]=0;
if(i) Value=atof(TempString);
else Value=0.00;
return Value;
}
//---------------------------将0x55 转换为 字符串 "55"--------------------------
void ChangeHex_ToString(uCHAR Source,char * Resault)
{
char TempChar[32]=" ";
char NewChar[32]=" ";
if(Source<=0x0f)
{
strcpy(TempChar,"0");
sprintf(NewChar,"%x",Source);
strcat(TempChar,NewChar);
}
else
sprintf(TempChar,"%x",Source);
strcpy(Resault,TempChar);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -