51单片机STC8G使用printf函数的方法

单片机型号:STC8G1K08,其他型号请自行测试;
IDE:KEIL C51;
包含头文件stdio.h:

#include <stdio.h>

添加以下函数,使用串口1,可根据需要修改:

char putchar(char ch)
{
    SBUF = ch;//串口1数据寄存器
    while(TI == 0);//串口1中断发送请求标志
    TI = 0;
    return ch;
}

测试程序,主频为为22.1184MHz,串口1配置为9600bps,打印“Hello World!”,效果如下图,

printf("Hello World!");

在这里插入图片描述
下面每隔1s打印计时数,计时变量为Sec,unsigned char型:

printf("Sec:%d ", Sec);

打印效果如下图
在这里插入图片描述
可看出输出的并不是我们想要的数值0,1,2…,而是放大了256倍,
原来是因为Keil C51的printf函数与标准C语言的printf函数不同,可在keil的菜单“Help-μVision Help”的帮助文件中查看关于printf函数的介绍,在使用C51的printf函数打印%d/i/u/o/x/X格式时的数值时,需要指定该变量的存储格式l/L/b/B。
如输出十进制数,规则总结如下:
①8位数据,格式为%bd;
②16位数据,格式为%hd;
③32位数据,格式为%ld;
因此将前述代码改为:

printf("Sec:%bd ", Sec);

即可正常打印,如下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值