您现在的位置: 主页 > MCU > 单片机技术应用 > avr单片机 串口实现printf(使用变参函数) -
本文所属标签:
为本文创立个标签吧:

avr单片机 串口实现printf(使用变参函数) -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]avr单片机 串口实现printf(使用变参函数)

 #include

本文引用地址: http://www.21ic.com/app/mcu/201711/745225.htm

#include

#include

typedef unsigned char uint8;

static void usart_init(void)

{

UCSRA = 0x02;

UCSRB = 0x18;

UCSRC = 0x06;

UBRRH = 0x00;

UBRRL = 103;

}

static void put_char(uint8 data)

{

if (data == '/r')

put_char(0x09);

while ( !(UCSRA & (1<

;

UDR = data;

}

static void myprintf(const char* fmt,...)

{

const char* s;

int d;

char buf[16];

va_list ap;

va_start(ap,fmt); // 将ap指向fmt(即可变参数的第一个?下一个?)

while (*fmt)

{

if (*fmt != '%')

{

put_char(*fmt++); // 正常发送

continue;

}

switch (*++fmt) // next %

{

case 's':

s = va_arg(ap,const char*); // 将ap指向者转成char*型,并返回之

for (; *s; s++)

put_char(*s);

break;

case 'x':

d = va_arg(ap,int); // 将ap指向者转成int型,并返回之

itoa(d,buf,16); // 将整型d以16进制转到buf中

for (s = buf; *s; s++)

put_char(*s);

break;

case 'd':

d = va_arg(ap,int);

itoa(d,buf,10); // 将整型d以10进制转到buf中

for (s = buf; *s; s++)

put_char(*s);

break;

default:

put_char(*fmt);

break;

}

fmt++;

}

va_end(ap);

}

int main(void)

{

usart_init(); // 初始化串口

uint8 i = 100;

uint8* s = "Word!";

while(1)

{

myprintf("/n/rHello %s/n/r0x%x = %d/n",s,i,i);

}

return 0;

}



              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > avr单片机 串口实现printf(使用变参函数) -
 

"avr单片机 串口实现printf(使用变参函数) -"的相关文章

网站地图

围观()