zoukankan      html  css  js  c++  java
  • [原创]单片机 HexToStr and HexToBcd BcdToStr

    网上的很多例子都是不好用的

    我这个是我验证过的,大家可以放心用啊

      1 //------------------------------------------
      2 //适合于9999以下的数据转换
      3 // 9999 -> 0x270F Max
      4 //
      5 unsigned int uHex2Bcd_SubFunction(uint16_t sbcd_data)
      6 {
      7     if ((sbcd_data&0x0f)>9)
      8     {
      9         sbcd_data=sbcd_data+6;
     10     }
     11     if ((sbcd_data&0x00f0)>0x90)
     12     {
     13         sbcd_data=sbcd_data+0x60;
     14     }
     15     if ((sbcd_data&0x0f00)>0x0900)
     16     {
     17         sbcd_data=sbcd_data+0x600;
     18     }
     19     if ((sbcd_data&0xf000)>0x9000)
     20     {
     21         sbcd_data=sbcd_data+0x6000;
     22     }
     23     return(sbcd_data);
     24 } 
     25 
     26 
     27 unsigned int uHex2Bcd (unsigned int hex_data)
     28 
     29 {
     30     unsigned int bcd_data;
     31     unsigned char temp;
     32  
     33     temp=hex_data&0x0f;
     34     if (temp>9)
     35     {
     36         bcd_data=temp+6;
     37     }
     38     else
     39     {
     40         bcd_data=temp;
     41     }
     42     temp=(hex_data>>4)&0x0f;
     43     for (;temp>0;temp--)
     44     {
     45         bcd_data=bcd_data+0x16;
     46         bcd_data=uHex2Bcd_SubFunction(bcd_data);
     47     }
     48     temp=(hex_data>>8)&0x0f;
     49     for (;temp>0;temp--)
     50     {
     51         bcd_data=bcd_data+0x256;
     52         bcd_data=uHex2Bcd_SubFunction(bcd_data);
     53     }
     54     temp=(hex_data>>12)&0x0f;
     55     for (;temp>0;temp--)
     56     {
     57         bcd_data=bcd_data+0x4096;
     58         bcd_data=uHex2Bcd_SubFunction(bcd_data);
     59     }
     60     return(bcd_data);
     61 
     62 }
     63 
     64 
     65 
     66 //========================================================================
     67 
     68 uint8_t uInt_HexToStr(void * pDest,void * pSrc,uint8_t Bytes_Of_Src)
     69 {
     70     uint8_t aHex[4];
     71     uint8_t Tmp;
     72     uint8_t *pDest2;
     73     uint8_t *pSrc2; 
     74     
     75     if ((Bytes_Of_Src==1) || (Bytes_Of_Src==2) ||(Bytes_Of_Src==4))
     76     {    
     77         pDest2 = pDest;    
     78         pSrc2  = pSrc;
     79         
     80         if (Bytes_Of_Src==1)
     81         {
     82             aHex[0] = *pSrc2;  
     83         }
     84         
     85         if (Bytes_Of_Src==2)
     86         {
     87             aHex[0] = *(pSrc2+1);
     88             aHex[1] = *pSrc2;  
     89         }
     90         
     91         if (Bytes_Of_Src==4)
     92         { 
     93             aHex[0] = *(pSrc2+3);
     94             aHex[1] = *(pSrc2+2);        
     95             aHex[2] = *(pSrc2+1);
     96             aHex[3] = *pSrc2;       
     97         }
     98         
     99         Tmp = (aHex[0]&0xf0)>>4;
    100         (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    101         *pDest2=Tmp;
    102                      
    103         Tmp = (aHex[0]&0x0f);
    104         (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    105 
    106         *(pDest2+1)=Tmp;
    107         
    108         
    109         if (Bytes_Of_Src>=2)
    110         {
    111             Tmp = (aHex[1]&0xf0)>>4;
    112             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    113             *(pDest2+2)=Tmp;
    114                          
    115             Tmp = (aHex[1]&0x0f);
    116             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    117             *(pDest2+3)=Tmp;
    118         }
    119         //----------------------------------------------
    120         if (Bytes_Of_Src>=4)
    121         {
    122             Tmp = (aHex[2]&0xf0)>>4;
    123             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    124             *(pDest2+4)=Tmp;
    125                          
    126             Tmp = (aHex[2]&0x0f);
    127             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    128 
    129             *(pDest2+5)=Tmp;
    130             
    131             Tmp = (aHex[3]&0xf0)>>4;
    132             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);           
    133             *(pDest2+6)=Tmp;
    134                          
    135             Tmp = (aHex[3]&0x0f);
    136             (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37);     
    137             *(pDest2+7)=Tmp;  
    138         } 
    139         
    140         Tmp=1; // 执行完毕     
    141     }
    142     else
    143     {
    144         Tmp=0; // 源数据字节长度不符合要求,只能是2或者4 字节
    145     }
    146     
    147     return Tmp; //返回执行结果:1-正常,0-异常
    148     
    149 }

    以下是调用举例,把数据发送到串口,显示在电脑的串口调试软件上

    void uUSART_Test(void)
    {
        
        /* 局部变量定义 */
        char src[50];
        uint32_t aaa;
    
        aaa=0x270f;
        
        uInt_HexToStr(src,&aaa,2);
        uUART_PutStr_Len(USART1," 0x",3);
        uUART_PutStr_Len(USART1,(uint8_t *)src,4);
        //uUART_PutStr(USART1,"
    ");    
        
        bbb=uHex2Bcd(aaa);
        uInt_HexToStr(src,&bbb,2);
        uUART_PutStr_Len(USART1," -> ",4);
        uUART_PutStr_Len(USART1,(uint8_t *)src,4);
        uUART_PutStr(USART1,"
    ");   
        
    }

    电脑显示

    欢迎大家    留言评论

  • 相关阅读:
    java 截取pdf
    webService 发送soap请求,并解析返回的soap报文
    常用网址
    扫描文件夹下代码行数
    CodeMIrror 简单使用
    常用 linux 命令(部分)
    windows下RabbitMQ 监控
    一定要写的日志
    创业思路
    10月9日后计划
  • 原文地址:https://www.cnblogs.com/caohenry999/p/12584078.html
Copyright © 2011-2022 走看看