OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3076|回复: 15

怎么样能让串口只在一行显示不同的数据

[复制链接]

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
发表于 2018-7-17 20:36:51 | 显示全部楼层 |阅读模式
10金钱

for(i=0;i<100;i++)
{
    printf("当前值为%d",i);
}
然后打印出来的时候 “当前值为” 是固定的,数字一直在变,而且不换行。

最佳答案

查看完整内容[请看2#楼]

可以用支持VT100的终端软件,然后用\033控制码指定光标位置就行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2018-7-17 20:36:52 来自手机 | 显示全部楼层
可以用支持VT100的终端软件,然后用\033控制码指定光标位置就行了。
回复

使用道具 举报

4

主题

211

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2600
金钱
2600
注册时间
2016-7-6
在线时间
546 小时
发表于 2018-7-17 20:47:26 | 显示全部楼层
printf("当前值为%d/r/n",i);试试
把复杂的事,做简单!
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-7-17 20:50:03 | 显示全部楼层
月无缺 发表于 2018-7-17 20:47
printf("当前值为%d/r/n",i);试试

那样会换行,不能换行,只在同一个位置让i一直打印
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2018-7-17 20:53:39 | 显示全部楼层
需要你的串口显示软件支持退格符\b,而且前面的%d最好格式化成%03d,要不然你就要根据i的值判断退格符\b的数量
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-7-10
在线时间
3 小时
发表于 2018-7-17 20:53:56 来自手机 | 显示全部楼层
不在pritntf里面有\n和\r就应该不会出现换行的情况。如果还出现,你有可能是你串口助手设置的问题,或者你的串口助手本身就帮忙换行咯,最直接的办法就是printf打印一个数据,然后串口助手16进制显示,观察结尾是出现0x0d  0x0a,如果没有,说明串口发送\n和\r
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2018-7-10
在线时间
3 小时
发表于 2018-7-17 20:55:45 来自手机 | 显示全部楼层
如果你想做成电子表那样刷新显示,那是不可能的,上一条消息会在窗口上,等待你手动清楚
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-7-17 21:00:30 | 显示全部楼层
mack13013 发表于 2018-7-17 20:53
需要你的串口显示软件支持退格符\b,而且前面的%d最好格式化成%03d,要不然你就要根据i的值判断退格符\b的 ...

麻烦能再具体说一下嘛
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2018-7-17 22:21:39 | 显示全部楼层
ljfljf 发表于 2018-7-17 21:00
麻烦能再具体说一下嘛

\b这个转义符就相当于键盘上的backspace按键,会回删一个字符。

打印方法可以如下:

printf("当前值为%03d",0);//第一次打印,会输出  [当前值为000]
for(i=1;i<100;i++)
{
     printf("\b\b\b%03d",i);   //前面的 [当前值为000]一句会先被\b\b\b删除000变成  [当前值为]  ,然后再被%03d补充
}

这么做的前提是要你用的串口显示软件支持回退转义符\b。

你可以搜索一下:dos命令行进度条
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-7-18 09:13:11 | 显示全部楼层
实现了吗?9楼的方法
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-7-18 09:34:25 | 显示全部楼层
ssssssssssss 发表于 2018-7-18 09:13
实现了吗?9楼的方法

不行,串口助手不支持退格符,放弃了
回复

使用道具 举报

160

主题

967

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2097
金钱
2097
注册时间
2014-3-7
在线时间
491 小时
发表于 2018-7-18 09:37:20 | 显示全部楼层
ljfljf 发表于 2018-7-18 09:34
不行,串口助手不支持退格符,放弃了

只能自己写了上位机了,很简单的,就在每次显示后加一句清空函数就行
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-7-18 09:48:20 | 显示全部楼层
有一个转义字符是光标回到一行的开始好像。如果不是转义字符就是C语言有这个函数,你试试,每次打印完成后回到一行的开始。好像是\r。你试试。逻辑上可以在每次写之前把光标回零,不要再写之后回零。
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-7-18 10:20:24 | 显示全部楼层
jinfeihan57 发表于 2018-7-18 09:48
有一个转义字符是光标回到一行的开始好像。如果不是转义字符就是C语言有这个函数,你试试,每次打印完成后 ...

在串口助手中\r打印出来只占一个字符的大小,不会回到行首,不知道为什么
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2018-7-18 10:46:57 | 显示全部楼层
需要区分串口助手和终端。
串口助手是用来调试串口的,注重的功能是16进制、批量发送、特定数据帧调试什么的;
终端软件是用来模拟终端机的输入输出的,有特定的格式控制命令,也不只支持串口。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

21

主题

122

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2018-6-6
在线时间
96 小时
 楼主| 发表于 2018-7-18 15:24:34 | 显示全部楼层
K.O.Carnivist 发表于 2018-7-17 20:36
可以用支持VT100的终端软件,然后用\033控制码指定光标位置就行了。

已用securecrt解决
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 21:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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