你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

教你用C语言编写打印彩色字符,还带闪烁哦!

[复制链接]
gaosmile 发布时间:2020-4-20 13:26
1. ANSI escape code: |! p( S2 u' E; D8 Q* w
最近在研究日志打印组件easylogger,玩转各种彩色日志打印不亦乐乎,好奇心越来越重,遂深入研究,发现了一个非常神奇的东西:ANSIescape code!
escape  sequence code 全称叫做 escapesequence code,即 Escape 序列屏幕控制码,其实就是一些特殊的字符,将这些字符加入到printf打印的内容中,即可轻松实现在终端软件中以各种颜色、各种背景色显示内容,还可以高亮、加粗、闪烁,非常好玩!
2. 序列码格式
3 }/ e$ b$ ]6 \( t# C: c
一串escapecode的内容如下:
·     
特殊字符\033 :通知终端切换到escape模式;
( ?' o% @* J) u3 d# l  K
·     
起始字符[:CSI内容的开始;
6 z2 m# a( ~. b) Y
·     
CSI内容字符(见下表);
; Y3 k3 [. n; c
·     
CSI结束字符m:CSI内容的结束;6 u  e/ F' t3 V) n
其中,CSI模式全称Command Sequence Introduction,当终端软件处于CSI模式时,终端软件读取之后的ASCII码作为CSI内容,直到读入CSI结束字符,代表不同字符的ASCII字符之间用分号隔开。
代表背景颜色的特殊ASCII字符:
   
字符
   
颜色
  
40
  
黑色
  
41
  
红色
  
42
  
绿色
  
43
  
黄色
  
44
  
蓝色
  
45
  
紫色
  
46
  
深绿
  
47
  
白色
代表字体颜色的特殊字符:
   
   
字符
   
颜色
  
30
  
黑色
  
31
  
红色
  
32
  
绿色
  
33
  
黄色
  
34
  
蓝色
  
35
  
紫色
  
36
  
深绿
  
37
  
白色
其它一些屏幕控制ASCII字符:
   
字符
   
动作
  
0
  
关闭所有属性
  
1
  
设置高亮度
  
4
  
下划线
  
5
  
闪烁
  
7
  
反显
  
8
  
消隐
最后还有一些控制终端光标的字符:
  
   
字符
   
动作
  
nA
  
光标上移n行
  
nB
  
光标下移n行
  
nC
  
光标右移n行
  
nD
  
光标左移n行
  
y; xH
  
设置光标位置
  
2J
  
清屏
  
K
  
清除从光标到行尾的内容
  
s
  
保存光标位置
  
u
  
恢复光标位置
  
?25l
  
隐藏光标
  
?25h
  
显示光标
3. 示例' N+ H7 y2 s& n3 m& n. e
blabla一大堆,没法理解,接下来用实例说话,首先准备一份已经重定向printf到串口的工程,保证printf可以正常使用即可,并且使用终端软件查看串口输出(eg.Mobaxterm)。
① 打印没有背景色,字体颜色为绿色,字体正常的字符:
printf("\033[32mHelloWorld\r\n");
编译下载,即可看到效果:
微信图片_20200420131631.png
* _2 l9 }+ }; W/ a6 B8 k
② 及时取消属性
设置属性之后,该属性在终端中一直存在,必须要及时取消,比如在刚刚的printf之后,继续正常打印,不加特殊字符,依然会打印绿色字符:
printf("\033[32mHelloWorld\r\n");; p- t* C) j; Q; m2 n( q
printf("HelloWorld 2\r\n");+ \6 A  N& O% n7 k7 s) ?& [. U
printf("HelloWorld 3\r\n");
微信图片_20200420131635.png

2 t4 C, [$ x( Y* e, Z# _4 ?3 u' [
所以要在使用完毕后及时取消所有属性设置,如下:
printf("\033[32mHelloWorld\033[0m\r\n");
1 K: }& d& p) S/ Q! O3 B# H) |
printf("HelloWorld 2\r\n");
+ v. E. c1 ]0 X( ~
printf("HelloWorld 3\r\n");
微信图片_20200420131639.png
8 Q: ]5 p# n, W0 {) u) U
③ 多个特殊字符一起设置
比如这里我同时设置打印颜色为绿色,字体在终端闪烁:
printf("\033[32;5mHelloWorld\033[0m\r\n");
微信图片_20200420132424.gif
' D" m0 N) w9 o1 f$ |  D
怎么样,在终端打印各种好玩的字符是不是非常简单~自己上手玩玩吧!

7 P: a$ {! d% z' D+ J: ]) Y0 ^/ C6 n
赞 收藏 评论0 发布时间:2020-4-20 13:26

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版