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

📄 jzj.cpp

📁 许继的2812开发全套驱动程序,很全很实用的.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
  {
    //----------先转换高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 + -