找回密码
 立即注册
查看: 1886|回复: 14

printf打印输出得不到正确的读数

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-15 13:53:23 | 显示全部楼层 |阅读模式
#define uchar unsigned char

uchar key_flag=0;

void int3() interrupt 11//按键按下,下降沿触发中断
{
        key_flag=1;

}

打印程序:
  TI=1;
  printf("key_flag is %d \n",key_flag);
  while(TI==0);
  TI=0;          
为什么key_flag的打印结果不是1
printf打印输出得不到正确的读数-1.png                     

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-3-15 14:00:46 | 显示全部楼层
printf("key_flag is %d \n",(int)key_flag);

请添加如上部分在进行测试!
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-15 14:44:04 | 显示全部楼层
电子DI*** 发表于 2023-3-15 14:00
printf("key_flag is %d \n",(int)key_flag);

请添加如上部分在进行测试!



可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什么意思呢,可以解释一下吗?谢谢。
1.png
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-3-15 14:51:26 | 显示全部楼层
98057*** 发表于 2023-3-15 14:44
可以了,但是呢(int)key_flag之后,key_flag在单片机内存是不是占用两个字节了?(int)key_flag是什 ...

强制转化为16位数。
%d打印的是16位的有符号整数,后面带的参数也必须要是这个类型的参数,这个(int)就是这个作用
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-15 17:41:37 | 显示全部楼层
也可改为printf("key_flag is %bd \n",key_flag);

可参考如下Keil有关printf的使用帮助
  1. #include <stdio.h>
  2. void tst_printf (void) {
  3.   char a = 1;
  4.   int b  = 12365;
  5.   long c = 0x7FFFFFFF;
  6.   unsigned char x = 'A';
  7.   unsigned int y  = 54321;
  8.   unsigned long z = 0x4A6F6E00;
  9.   float f = 10.0;
  10.   float g = 22.95;
  11.   char buf [] = "Test String";
  12.   char *p = buf;
  13.   printf ("char %bd int %d long %ld\n",a,b,c);
  14.   printf ("Uchar %bu Uint %u Ulong %lu\n",x,y,z);
  15.   printf ("xchar %bx xint %x xlong %lx\n",x,y,z);
  16.   printf ("String %s is at address %p\n",buf,p);
  17.   printf ("%f != %g\n", f, g);
  18.   printf ("%*f != %*g\n", (int)8, f, (int)8, g);
  19. }
复制代码


  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-15 19:46:08 | 显示全部楼层
zh*** 发表于 2023-3-15 17:41
也可改为printf("key_flag is %bd \n",key_flag);

可参考如下Keil有关printf的使用帮助

我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢
1.png

点评

%bd 表示格式化为字节型整数(char) %d 表示格式化为整数(int) %ld 表示格式化为长整型(long)  详情 回复 发表于 2023-3-16 08:58
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-3-16 08:58:12 | 显示全部楼层
98057*** 发表于 2023-3-15 19:46
我找不到这个函数,这是什么原因呢?%bd 是表示什么意思呢?谢谢

%bd 表示格式化为字节型整数(char)
%d 表示格式化为整数(int)
%ld 表示格式化为长整型(long)

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-05-02 09:56:03

19

主题

137

回帖

489

积分

中级会员

积分
489
发表于 2023-3-16 09:40:08 来自手机 | 显示全部楼层
keil有非常丰富得hlp信息,很轻易,自己查一下就ok了
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2023-12-25 15:38:27

39

主题

204

回帖

651

积分

高级会员

积分
651
发表于 2023-3-16 19:14:45 | 显示全部楼层
xhbw*** 发表于 2023-3-16 09:40
keil有非常丰富得hlp信息,很轻易,自己查一下就ok了

hlp是什么
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-3-17 06:57:39 | 显示全部楼层
帮助文档, help
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:32 , Processed in 0.130320 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表