登录/注册

c51的printf语法

更多

在C51(针对8051单片机的C语言编译器,如Keil C51)中使用printf函数时,语法与标准C语言基本一致,但需注意重定向输出目标(如串口),因为嵌入式系统通常没有默认的控制台输出。以下是详细说明:


基础语法:

#include <stdio.h>  // 包含标准输入输出头文件

void main() {
    char ch = 'A';
    int num = 100;
    float f = 3.14;

    printf("字符串: %s\n", "Hello C51"); // 打印字符串
    printf("字符: %c\n", ch);           // 打印字符
    printf("整数: %d\n", num);          // 打印十进制整数
    printf("十六进制: %x\n", num);      // 打印十六进制整数
    printf("浮点数: %f\n", f);          // 打印浮点数(需确保支持浮点)
}

关键注意事项:

  1. 输出重定向:

    • 默认情况下,printf的输出是空操作(无效果)。
    • 需重定向到具体硬件(如串口),通过重写 putchar 函数实现:
      #include <stdio.h>
      void putchar(char c) {
       while (!TI);    // 等待串口发送就绪
       SBUF = c;       // 将字符发送到串口
       TI = 0;         // 清除发送中断标志
      }
  2. 浮点数支持:

    • C51默认不支持浮点数格式化输出(如 %f)。
    • 若需使用浮点数:
      • 在Keil中勾选 "Use float..." 选项。
      • 调用前包含 #pragma printf=float 编译指令(会增加代码大小)。
  3. 格式说明符: 说明符 用途 示例
    %d 十进制整数 printf("%d", 100)
    %u 无符号十进制整数 printf("%u", 200)
    %x/%X 十六进制整数 printf("%x", 255)ff
    %c 单个字符 printf("%c", 'A')
    %s 字符串 printf("%s", "Text")
    %f 浮点数(需启用支持) printf("%f", 3.14)
  4. 代码优化:

    • printf 会显著增大代码体积(需链接格式化库)。
    • 精简替代方案:直接使用串口发送函数(如 UART_SendString)输出简单数据。

完整示例(带串口重定向):

#include <reg51.h>
#include <stdio.h>

// 重定向putchar到串口
void putchar(char c) {
    while (!TI);        // 等待串口发送就绪
    SBUF = c;           // 将字符写入串口缓冲
    TI = 0;             // 清零发送中断标志
}

void main() {
    SCON = 0x50;        // 设置串口模式1,允许接收
    TMOD = 0x20;        // 定时器1模式2(自动重载)
    TH1 = 0xFD;         // 波特率9600(11.0592MHz晶振)
    TR1 = 1;            // 启动定时器

    int count = 0;
    while (1) {
        printf("计数: %d\n", count++);  // 通过串口输出
        delay_ms(1000);                 // 延时1秒
    }
}

常见问题:

  1. 无输出?
    • 检查串口重定向是否正确(putchar是否实现)。
    • 确认串口波特率、硬件连接无误。
  2. 浮点数异常?
    • 启用Keil的浮点支持选项(Project → Options → Target → Use float...)。
  3. 代码过大?
    • 避免使用 %f%s;改用整数或字符输出。
    • 直接操作串口代替 printf

提示:不同编译器(如SDCC)的实现可能略有差异,请参考具体编译器手册。

51单片机中为什么很少出现printf的身影

51单片机中为什么很少出现 printf 的身影?是用不了吗? 不是的,51单片机可以用

2024-12-03 10:46:15

C51单片机的IO口介绍(下)

上一篇文章我们对C51的IO简单的介绍了一下,现在我们来简单了解C51的IO的结构

2023-11-02 10:57:34

KEIL C51使用标准printf输出数值不对怎么解决

KEIL里扩展出了b,h,l来对输入字节宽的设置:(1)b八位(2)h十六位(默认)(3)l三十二位在Keil C51中用printf输出一个单字节变量时要使用%bd,如unsigned char

2022-01-24 07:59:43

KEIL C51使用标准printf输出数值不对解决方法

KEIL里扩展出了b,h,l来对输入字节宽的设置:(1)b八位(2)h十六位(默认)(3)l三十二位在Keil C51中用printf输出一个单字节变量时要使用%bd,如unsigned char

资料下载 xymbmcu 2021-11-29 10:51:03

51单片机学习笔记4 C51语言

使用的是C51语言。  C51语言基本语法与标准C相同,是在标准

资料下载 overheat 2021-11-21 09:51:02

Keil C51 V9.00开发环境程序下载

Keil C51 V9.00开发环境程序下载

资料下载 lynyh 2021-08-23 10:49:10

51单片机C51语言的scanf和printf是如何使用的详细程序说明

本文档的主要内容详细介绍的是51单片机C语言的scanf和printf是如何使用的详细程序说明。

资料下载 绝代双骄 2019-08-26 17:30:00

如何使用KEIL C51和proteus实现C51汇编程序的设计实例

本文档的主要内容详细介绍的是如何使用KEIL C51和proteus实现C51汇编程序的设计实例。

资料下载 佚名 2019-07-30 17:35:00

什么是Keil C51、MDK?

一、什么是Keil C51、MDK?Keil C51和MDK是Keil公司开发的两套不同的工具集,包括了编译器、链接器等工具,以及集成了这些工具的集成开发环境(IDE),这个集成开发环境叫

2022-01-24 07:30:03

C51与MDK安装包

C51与MDK安装包在任意盘建立文件夹命名为“keil”(自己取),首先安装C51,安装路径为建立的“keil”文件夹。激活C51关闭

2021-12-13 07:45:23

C51程序与标准的C程序有哪些不一样

C51的语法规定、程序结构及程序设计方法都与标准的C语言程序设计相同,但C51

2021-07-15 08:37:33

51单片机读写AT29C040的C51程序

本文档的主要内容详细介绍的是给大家介绍一个51单片机读写AT29C040的c51程序。

2020-11-07 12:01:16

安装了keil c51和keil for arm,怎样使用c51打开51程序?

安装了keil c51和keil for arm,怎样使用c51打开51程序,keil for arm 打开STM32程序。我先安装了for a

2020-07-16 04:59:07

一个X25045的C51读写程序

本文档的主要内容详细介绍的是一个X25045的C51读写程序。

2020-01-18 11:13:00

Keil c51的应用及特性解析

如:因为51内的RAM很小,C51的函数并不通过堆栈传递参数(重入函数除外),局部变量也不存储在堆栈中,而是存在于固定的RAM中及寄存器中。

2019-10-30 16:55:29

7天热门专题 换一换
相关标签