ST7789 是一款 TFT LCD 显示屏,可以显示 16 位色彩的图形和文本。它的分辨率为 240x240 像素,支持 SPI 和 8 位并行接口。ST7789 显示屏可以用于各种嵌入式系统和物联网设备,如 Arduino,ESP32,树莓派等。
LVGL 是一个开源的图形库,可以在嵌入式系统上创建现代的用户界面。它支持多种显示屏和触摸屏,提供了丰富的控件和动画效果。LVGL 还支持多种字体,可以显示不同的语言和符号。
要在 ST7789 显示屏上使用 LVGL,需要做一些配置和初始化工作。首先,需要在 LVGL 的配置文件中定义 ST7789 的分辨率,颜色深度,旋转方向等参数。然后,需要实现一个自定义的回调函数,用于将 LVGL 的缓冲区数据传输到 ST7789 的显示内存。这个回调函数的名字是 your_st7789_flush_cb,它的参数和返回值都是由 LVGL 规定的。具体的数据传输逻辑要根据硬件平台和驱动方式来实现,例如使用 SPI 或 8 位并行接口。最后,需要将这个回调函数注册到 LVGL 的显示驱动中,以便 LVGL 能够调用它来刷新显示屏。
要在 LVGL 中使用字体,需要先加载字体资源,然后设置字体大小,最后应用到控件或文本中。字体资源可以是 LVGL 自带的字体,也可以是自定义的字体。自定义的字体可以使用 LVGL 的在线工具来生成,或者使用第三方的工具如 FontForge 来制作。生成的字体文件是一个 C 语言的源文件,包含了字体的数据和属性。这个字体文件要添加到工程中,并且要在 LVGL 的配置文件中注册字体。注册字体的方法是使用宏 LV_FONT_DECLARE 来声明字体变量,然后使用函数 lv_font_add 来添加字体到 LVGL 的字体列表中。添加字体后,就可以使用函数 lv_style_set_text_font 来设置字体大小,然后使用函数 lv_label_set_text 或 lv_obj_set_style_local_text_font 来应用字体到控件或文本中。
通过以上的步骤,就可以在 ST7789 显示屏上使用 LVGL 和字体来创建美观的用户界面了。下面是一个简单的示例代码,用于在 ST7789 显示屏上显示一个带有中文和英文的标签。
// 定义 ST7789 的分辨率,颜色深度,旋转方向等参数
// 声明自定义的字体变量
// 实现自定义的回调函数,用于将 LVGL 的缓冲区数据传输到 ST7789 的显示内存
// 根据硬件平台和驱动方式实现数据传输逻辑,例如使用 SPI 或 8 位并行接口
// 这里只是一个示例,具体的代码要根据实际情况编写
st7789_set_window(area->x1, area->y1, area->x2, area->y2); // 设置显示窗口
st7789_write_data((uint8_t *)color_p, (area->x2 area->x1 + 1) * (area->y2 area->y1 + 1) * 2); // 写入数据
lv_disp_flush_ready(disp_drv); // 通知 LVGL 数据传输完成
// 初始化 ST7789 和 LVGL
// 初始化 ST7789 的硬件接口,例如 SPI 或 8 位并行接口
// 这里只是一个示例,具体的代码要根据实际情况编写
// 初始化 LVGL
// 创建一个显示缓冲区
// 创建一个显示驱动
// 添加自定义的字体到 LVGL 的字体列表中
// 创建一个带有中文和英文的标签
// 创建一个标签
// 设置标签的文本
// 设置标签的位置
// 设置标签的样式
// 设置标签的背景颜色为白色
// 设置标签的前景颜色为黑色
// 设置标签的字体大小为 16 像素
// 应用样式到标签
// 初始化
// 创建标签
// 进入循环
// 处理 LVGL 的任务