打印
[开发工具]

在C51单片机上使用printf函数

[复制链接]
5528|86
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
hudi008|  楼主 | 2023-5-18 21:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

在Keil C51中这里的b表示byte,即1个字符,%bd就是输出一个byte宽度的整型数(char)。
#include <stdio.h>

void tst_printf (void) {
  char a = 1;
  int b  = 12365;
  long c = 0x7FFFFFFF;

  unsigned char x = 'A';
  unsigned int y  = 54321;
  unsigned long z = 0x4A6F6E00;

  float f = 10.0;
  float g = 22.95;

  char buf [] = "Test String";//不定长数组
  char *p = buf;

  printf ("char %bd int %d long %ld\n",a,b,c);
  printf ("Uchar %bu Uint %u Ulong %lu\n",x,y,z);
  printf ("xchar %bx xint %x xlong %lx\n",x,y,z);
  printf ("String %s is at address %p\n",buf,p);
  printf ("%f != %g\n", f, g);
  printf ("%*f != %*g\n", (int)8, f, (int)8, g);
}



使用特权

评论回复
86
jdqdan| | 2025-4-2 22:13 | 只看该作者
printf通过串口发送数据,外部设备接收并显示或处理。

使用特权

评论回复
85
懒癌晚期患者| | 2025-4-1 21:30 | 只看该作者
感谢楼主分享这么详细的STM32定时器使用教程,对于初学者来说非常有帮助

使用特权

评论回复
84
我是一颗胖蘑菇| | 2025-3-18 10:34 | 只看该作者
在C51上,最大支持的输出宽度是多少呢

使用特权

评论回复
83
jkl21| | 2025-3-15 11:42 | 只看该作者
单片机有足够的内存来支持printf及其相关的缓冲区。

使用特权

评论回复
82
janewood| | 2025-3-15 08:31 | 只看该作者
printf函数默认输出到标准设备,在单片机中需要将其重定向到串口

使用特权

评论回复
81
elsaflower| | 2025-3-15 01:27 | 只看该作者
未重写putchar函数,printf输出 无法到达串口

使用特权

评论回复
80
zerorobert| | 2025-3-14 22:20 | 只看该作者
初始化串口并重写putchar函数后,即可在程序中使用printf函数

使用特权

评论回复
79
wangdezhi| | 2025-3-14 16:29 | 只看该作者
printf 函数可能会消耗较多的栈空间,因此需要确保有足够的栈空间来支持它的使用。

使用特权

评论回复
78
albertaabbot| | 2025-3-14 14:19 | 只看该作者
printf函数在内部会调用putchar函数来输出单个字符,因此需要重写putchar函数,使其将字符通过串口发送出去。

使用特权

评论回复
77
wengh2016| | 2025-3-14 12:07 | 只看该作者
在C51单片机上使用 printf 函数,通常需要包含标准输入输出库 <stdio.h>,并且需要配置一个适当的输出函数

使用特权

评论回复
76
abotomson| | 2025-3-14 09:56 | 只看该作者
printf函数会占用一定的程序存储空间和运行时间,对于资源有限的 C51 单片机,应尽量避免在实时性要求较高的场景中频繁使用。

使用特权

评论回复
75
ingramward| | 2025-3-12 21:37 | 只看该作者
标准 C 库中的printf函数是用于格式化输出的强大工具

使用特权

评论回复
74
yorkbarney| | 2025-3-12 19:26 | 只看该作者
printf 函数最终会调用 putchar 函数来发送单个字符。

使用特权

评论回复
73
saservice| | 2025-3-12 17:18 | 只看该作者
printf函数最终调用的是putchar函数来输出单个字符。因此,需要自定义一个putchar函数,将数据通过串口发送出去。

使用特权

评论回复
72
zerorobert| | 2025-3-12 15:01 | 只看该作者
#include <stdio.h>

char fputc(char ch, FILE *fp) {
    while (!TI);       // 等待发送完成
    SBUF = ch;        // 发送数据到串口
    TI = 0;           // 清除发送标志
    return ch;
}

使用特权

评论回复
71
biechedan| | 2025-3-11 19:52 | 只看该作者
尽量减少传递的参数数量,防止超出限制。

使用特权

评论回复
70
kkzz| | 2025-3-11 16:20 | 只看该作者
在C51中,通过自定义fputc函数将字符发送到UART,从而实现printf的输出。

使用特权

评论回复
69
sanfuzi| | 2025-3-10 15:50 | 只看该作者
需要将输出重定向到串口,通过串口将数据发送出去,然后在 PC 端使用串口调试助手等工具接收并显示这些数据。

使用特权

评论回复
68
jtracy3| | 2025-3-10 12:47 | 只看该作者
使用 printf 可能会影响程序的实时性能,因为它比直接操作硬件寄存器要慢。

使用特权

评论回复
67
eefas| | 2025-3-10 09:46 | 只看该作者
自定义的printf函数,使用vsnprintf来处理可变参数,然后将结果发送到串口。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

251

主题

9717

帖子

11

粉丝