LVGL 使用自定义字体

如果你只需要 数字 0~9 和冒号 : ,并使用字体 JetBrains Mono ,可以按下面方式用 lv_font_conv 生成最小化字体文件,非常适合做 翻页时钟或数字显示屏


✅ 第一步:准备字体文件

去 JetBrains 官网下载字体:

🔗 https://www.jetbrains.com/lp/mono/

下载后得到 JetBrainsMono-Regular.ttf 文件(或其他变种)。


✅ 第二步:运行命令转换字体

确保你已经装好 lv_font_conv

bash 复制代码
npm install -g lv_font_conv

然后执行:

bash 复制代码
lv_font_conv \
  --font "JetBrainsMono-Regular.ttf" \
  --size 48 \
  --bpp 4 \
  --format lvgl \
  --range 0x30-0x39,0x3A \
  -o lv_font_jetmono_48_digits.c

含义:

  • --size 48:字体大小,和你设计中翻页数字一样高;
  • --range 0x30-0x39,0x3A:只包含 '0''9' 以及 ':'
  • --bpp 4:使用 4-bit 色深(灰度抗锯齿);
  • -o lv_font_jetmono_48_digits.c:输出为 C 文件。

✅ 第三步:在 LVGL 中使用

在代码中添加:

c 复制代码
extern lv_font_t lv_font_jetmono_48_digits;

// 设置到 label
lv_obj_set_style_text_font(label, &lv_font_jetmono_48_digits, LV_PART_MAIN);

注意别忘记将 .c 文件添加进你的工程编译脚本中(RT-Thread 下记得改 SConscript)。


✅ 第四步:修改lvgl_conf 字体配置

修改 lvg_conf.h 字体选项

C 复制代码
/* 可选地在这里声明自定义字体。
 * 你可以把这些字体设置为默认字体,
 * 这样它们就能全局使用。
 * 例如:#define LV_FONT_CUSTOM_DECLARE   LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)
 */
#define LV_FONT_CUSTOM_DECLARE    LV_FONT_DECLARE(lv_font_jetmono_100)

/* 启用对大字体和/或包含大量字符的字体的支持。
 * 支持的大小限制取决于字体大小、字体样式和每像素位数(bpp)。
 * 如果字体需要此支持而未启用,编译时会报错。
 */
#define LV_FONT_FMT_TXT_LARGE 1 //0

/* 启用或禁用压缩字体的支持。 */
#define LV_USE_FONT_COMPRESSED 1 //0

Examples

Merge english from Roboto Regular and icons from Font Awesome, and show debug info:

bash 复制代码
env DEBUG=* lv_font_conv --font Roboto-Regular.ttf -r 0x20-0x7F --font FontAwesome.ttf -r 0xFE00=>0x81 --size 16 --format bin --bpp 3 --no-compress -o output.font

Merge english & russian from Roboto Regular, and show debug info:

bash 复制代码
env DEBUG=* lv_font_conv --font Roboto-Regular.ttf -r 0x20-0x7F -r 0x401,0x410-0x44F,0x451 --size 16 --format bin --bpp 3 --no-compress -o output.font

Dump all Roboto glyphs to inspect icons and font details:

bash 复制代码
lv_font_conv --font Roboto-Regular.ttf -r 0x20-0x7F --size 16 --format dump --bpp 3 -o ./dump

Note. Option --no-compress exists temporary, to avoid confusion until LVGL adds compression support.

相关推荐
女神下凡2 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
从零开始的嵌入式之旅2 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
老当益壮梁奶奶2 天前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机
昌原的儿子LEO2 天前
IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置
arm开发·学习
sunoo-2292 天前
【ARM嵌入式学习笔记Day6】一文打通i.MX6ULL时钟体系:PLL/PFD/预分频+滞回比较器全解析
arm开发·笔记·vscode·单片机·imx6ull·汇编语言
M78佐菲3 天前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
sunoo-2293 天前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机
Doraemomo3 天前
IMX6ULL裸机开发——PWM
arm开发·嵌入式硬件·imx6ull
老当益壮梁奶奶3 天前
ARM汇编学习笔记(五):从按键轮询到 GIC 中断控制器(ARM Cortex-A7 )
arm开发·笔记·单片机·嵌入式硬件
M78佐菲3 天前
ARM学习笔记(五)
linux·arm开发·笔记·嵌入式硬件·学习