itloverhpu

/****************************************************************************
* 名 称:     void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...)
* 功 能:     格式化串口输出函数
* 入口参数:USARTx: 指定串口
*Data:      发送数组
...:             不定参数
* 出口参数: 无
* 说 明:      格式化串口输出函数
"\r" 回车符    USART_OUT(USART1, "abcdefg\r")
"\n" 换行符    USART_OUT(USART1, "abcdefg\r\n")
"%s" 字符串  USART_OUT(USART1, "字符串是:%s","abcdefg")
"%d" 十进制  USART_OUT(USART1, "a=%d",10)
* 调用方法:  无
****************************************************************************/

void USART_OUT(USART_TypeDef* USARTx, uint8_t *Data,...){

const char *s;
int d;

char buf[16];
va_list ap;
va_start(ap, Data);

while(*Data!=0){ //判断是否到达字符串结束符
if(*Data==0x5c){ //\'\\'
switch (*++Data){
case \'r\': //回车符
USART_SendData(USARTx, 0x0d);

Data++;
break;
case \'n\': //换行符
USART_SendData(USARTx, 0x0a);
Data++;
break;

default:
Data++;
break;
}


}
else if(*Data==\'%\'){ //
switch (*++Data){
case \'s\': //字符串
s = va_arg(ap, const char *);
for ( ; *s; s++) {
USART_SendData(USARTx,*s);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
Data++;
break;
case \'d\': //十进制
d = va_arg(ap, int);
itoa(d, buf, 10);
for (s = buf; *s; s++) {
USART_SendData(USARTx,*s);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
Data++;
break;
default:
Data++;
break;
}
}
else USART_SendData(USARTx, *Data++);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);
}
}

注:USART_SendData()是库函数  void USART_SendData(USART_TypeDef* USARTx, u16 Data)

      http://wojiushiwolxw.spaces.eepw.com.cn/articles/article/item/93110

分类:

技术点:

相关文章: