这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【经验分享】51单片机KEILC51printf的特殊用法

共4条 1/1 1 跳转至

【经验分享】51单片机KEILC51printf的特殊用法

工程师
2020-08-17 22:07:47     打赏

今天碰到一个小问题,以为很简单,结果掉坑。


先说我遇到的问题:

u8 index = 5;

printf(" index = %d",index);


原本希望的结果是:  index=5, 但实际结果是: 5xx (x随机)


后来,查了资料,才发现是这样的解决方案:

KEIL里扩展出了b,h,l来对输入字节宽的设置:

(1)b八位

(2)h十六位(默认)

(3)l三十二位


在Keil C51中用printf输出一个单字节变量时要使用%bd,如

unsigned char counter;

printf(“Current count: %bd\n”, counter);//输出8位”十进制有符号整数”

printf(“Current count: %bx\n”, counter);//输出8位”无符号以十六进制表示的整数”


而在标准C语言中都是使用%d:

printf(“Current count: %d\n”, counter);


综上所述,我需要修改成这样:

u8 index = 5;

printf(" index = %bd",index); 

这样输出就是我想要的结果! index =5 







关键词: printf     经验     keil    

工程师
2020-08-17 22:20:58     打赏
2楼

原来还有这样的操作啊! 



工程师
2020-08-17 22:26:00     打赏
3楼

刚知道吗?

我很早就知道了啊!


大家可以找C51的帮助文档发现这么两句话:

The optional characters l or L may immediately precede the type
character to respectively specify long types for d, i, u, o, x, and
X. The optional characters b or B may immediately precede the type
character to respectively specify char types for d, i, u, o, x, and X.

也就是说要:
显示long类型 %d ===> %ld
显示char类型 %d ===> %bd



工程师
2020-08-17 22:31:17     打赏
4楼

建议printf使用时自己实现,不容易出问题


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]