您的位置:首页 > 其它

单片机串口收发字符和数字的函数

2014-01-18 15:42 302 查看
/************************************************

功能:将整形转换为ascii码字符串

示例:dat = 12345   buffer[10]

      转换后

   buffer[0] = '1'

   buffer[1] = '2'

   ...

   buffer[4] = '5'

   buffer[5] = '\n'

**********************************************/

void DtoA(unsigned long dat, unsigned char* buffer)

{

  unsigned long tmp = dat;

  char length = 0;

  while(tmp != 0)//求出数字的实际长度

  {

    tmp = tmp/10;

    length++;

  }

  buffer[length] = '\0';//长度数为字符串截止位

  length--;

  while(length >= 0)//数字的低位放入数组的高位

  {

    tmp = dat%10;

    buffer[length--] = 0x30|tmp;

    dat = dat/10;

  }  

}

/****************************************************

功能:将ascii码字符串(非ascii也可)转换成对应数字

unsigned char code date[] = "1234567";     ->   返回 1234567

unsigned char code date_neg[] = "-1234567";      ->   返回 -1234567

****************************************************/

long mi(unsigned char dat, unsigned char mi)

{

  unsigned char i;

  long sum = 1;

  for(i=0; i<mi; i++)

  {

    sum = sum * dat;         

  }

  return sum;

}

long AtoD(unsigned char* buffer)

{

   long dat = 0, tmp = 0,k;

   unsigned char i;

   char j = 0;

   i = strlen(buffer);

   if(buffer[0] == '-')

   {

      j = 1;   

   }

   for(; j<i; j++)

   {

        tmp = buffer[j]&0x0f;//如果原数组中存放的是ascii码,直接将其转换为数字

   k = mi(10,i-j-1);

   tmp = k * tmp;

   dat += tmp;

    }

    if(buffer[0] == '-')

    {

      return -dat;

    }

 

    return dat;

}

void SendString(unsigned char* String)

{

  int i=0;

  while(String[i] != '\0')

  {

    SendData(String[i]);

    i++;

  }

}

void SendDig(long dat)

{

  char buffer[36];

  DtoA(dat, buffer);

  SendString(buffer);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: