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

📄 tool.c

📁 这个是基于ARM7的相关驱动代码
💻 C
字号:
/************************************************************
  Copyright (C), 2005, comba. Co., Ltd.
  FileName:      tool.c
  Author:        laifuqi  
  Version :      1.0      
  Date:          2005.6.14       
  Description:   字符串 API函数      
  Function List:   
                 1. AsciiToHex
                 2. HexToAscii
                 3. DecToAscii
                 4. FloatToAscii
                 5. HexToDec
                 6. DecToHex
                 7. LowToUpperCase
                 8. UpperToLowCase
                 10.IsUpperCase
                 11.IsLowCase
                 12.IsDigit
                 13.FloatToDecAscii
  History:         
      <author>  <time>     <version >   <desc>
      laifuqi   2005.6.14     1.0       create  
***********************************************************/
#include "tool.h"

/*************************************************
  Function:    AsciiToHex   
  Description: ascii to hexa conversion
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
INT32U AsciiToHex(char *s, INT32U *val)
{
	INT32S n;

	*val=0;
	
	if(s[0] == '0' && ((s[1] == 'x') || (s[1] == 'X')))
		s+=2;
	n = 0;	
	while((n < 8) && (s[n] !=0))
	{
		*val <<= 4;
		if ( (s[n] >= '0') && (s[n] <='9'))
		{
			*val += (s[n] - '0');
		}
		else
		{	
			if ((s[n] >= 'a') && (s[n] <='f'))
			{
				*val += (s[n] - 0x57);
			}
			else if ((s[n] >= 'A') && (s[n] <='F'))
			{
					*val += (s[n] - 0x37);
			}
			else
				return 0;
		}		
		n++;
	}

	return 1;				
}

/*************************************************
  Function:    HexToAscii   
  Description: hex转换为ASCII
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
void HexToAscii(INT32U val,char *pBuff)
{
    INT32S i;
    
    *pBuff++ = '0';
    *pBuff++ = 'x';
    for(i=8;i>0;i--)
    {
       if(((val>>28)&0x0f)<=9 )
       {
          *pBuff++ = ((val>>28)&0x0f)+ 0x30;
       }
       else
       {
          *pBuff++ = ((val>>28)&0x0f)+ 0x57;
       }
       val <<= 4;
    }
    *pBuff = 0;
}

/*************************************************
  Function:    DecToAscii   
  Description: 十进制转换为ASCII
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
void DecToAscii(INT32U val,char *pBuff)
{
    int i;
    int flag;
    
    flag = 0;
    for(i=8;i>0;i--)
    {
       if(((val>>28)&0x0f)>0 )  /* 数据为1~9 */
       {
             *pBuff++ = ((val>>28)&0x0f)+ 0x30;
             flag = 1;            /* 有效数据后的0有效 */
       }
       else    
       {
          if(0!=flag) /* 有效0需转换 */
          {
             *pBuff++ = ((val>>28)&0x0f)+ 0x30;
          }
       }
       val <<= 4;
    }
    if(flag==0)
        *pBuff++ = '0';
         
    *pBuff = 0;
}

/*************************************************
  Function:    FloatToAscii   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
void FloatToAscii(INT32U val,char *pBuff)
{
    INT32S i;
    INT16U temp;
    temp = (INT16U) val;
    
    for(i=4;i>0;i--)
    {
       *pBuff++ = ((temp>>12)&0x0f)+ 0x30;
       temp <<= 4;
    }
    *pBuff = 0;
}

/*************************************************
  Function:    HexToDec   
  Description: HEX转换为十进制
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
#define DEC_MAX_VAL 0x05F5E0FF    /* 最大转换数值:十进制 99999999 */

INT32U HexToDec(INT32U val)
{
    INT32U tmp;
    INT32S i;
    INT32U rc;
	INT32U decVal;

    
    if(val>DEC_MAX_VAL)
    {
    #ifdef UART1_EN	
         UART1Printf("\n\rError: the maximum dec val: 999999!\n\r");
   #endif
         while(1); /* error !!!! */
    }
    
    tmp = 10000000;
    rc = 0;
    
    for(i=0;i<8;i++)
    {
         decVal = val/tmp;
		 rc <<= 4;
		 rc |= decVal&0x0f;
		 if((decVal&0x0f)>0)
		 {
		    val = val -(decVal&0x0f)*tmp;
		 }
		 tmp = tmp/10;
    }    
    return rc;
}

/*************************************************
  Function:    DecToHex   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
INT32U DecToHex(INT32U val)
{
    INT32U tmp;
    tmp = (val&0x000f)+((val>>4)&0x000f)*10+((val>>8)&0x000f)*100+((val>>12)&0x000f)*1000;
    
    return tmp;	
}

/*************************************************
  Function:    LowToUpperCase   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
char LowToUpperCase( char ch)
{
    return (ch-'a'+'A');
}

/*************************************************
  Function:    UpperToLowCase   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
char UpperToLowCase( char ch)
{
    return (ch+'a'-'A');
}

/*************************************************
  Function:    IsUpperCase   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
unsigned int IsUpperCase(char ch)
{
    if((ch>='A')&&(ch<='F')) 
    {
       return 1;
    }
    else
    {
       return 0;
    }
}

/*************************************************
  Function:    IsLowCase   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
unsigned int IsLowCase(char ch)
{
    if((ch>='a')&&(ch<='f')) 
    {
       return 1;
    }
    else
    {
       return 0;
    }
    
}

/*************************************************
  Function:    IsDigit   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
unsigned int IsDigit(char ch)
{
    if((ch>='0')&&(ch<='9')) 
    {
       return 1;
    }
    else
    {
       return 0;
    }
}

/*************************************************
  Function:    FloatToDecAscii   
  Description: 
  Calls:         
  Called By:     
  Input:       none
  Output:      none   
  Return:      none  
  Others:      none   
*************************************************/
void FloatToDecAscii(float ch,char *DecBuff)
{
    INT32U tmp;
    INT32U rc;
    INT32U decVal;
    
    char   tempBuff[6];
    
    tmp   = (INT32U) ch;                    /* 得到浮点数的整数部分 */
    decVal = HexToDec(tmp);
    
    tmp   = (INT32U)((ch-(float)tmp)*10000);/* 得到浮点的小数部分 */
    rc    = HexToDec(tmp);
    
    DecToAscii(decVal,DecBuff);
    strcat(DecBuff,".");
    
    FloatToAscii(rc,tempBuff);
    strcat(DecBuff,tempBuff);   
}

/* end of file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -