当前位置: 首页 > 科技迭代

ST7789显示屏和LVGL字体的配置和使用

时间:2024-02-17 20:50:24 科技迭代

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 的任务