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

/************************************************
功能:将整形转换为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);
}

发布了83 篇原创文章 · 获赞 25 · 访问量 26万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览