• luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体


    本节内容,将和大家一同学习,在luatos环境中,使用lvgl库,一步步的编译固件、编写脚本,最终实现中文字体的显示。
    芯片:AIR101
    LCD屏:ST7789

    上一节,我们一同学习了,硬件引脚具体的接法,硬件连接好了,接下来,就是见证奇迹(编写脚本,操控LCD屏显示内容)的时刻了。

    第一步:先初始化外部硬件(让芯片知道增加了一个外部硬件)

    LCD屏,肯定是属于LCD库的操控权限内,所以我们找到LUATOS文档中,lcd驱动模块
    在这里插入图片描述
    接下来的第一步,就是初始化设备了,函数参数,文档里写得很清楚,咱们就不再赘述了
    初始化参数中,注意:lcd初始化之前需要先初始化spi

    local spi_lcd = spi.deviceSetup(0, pin.PB04, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)
    
    • 1
    lcd.init(
            "st7789",
            {
                port = "device",
                pin_dc = pin.PB01,
                pin_pwr = pin.PB00,
                pin_rst = pin.PB03,
                direction = 0,
                w = 240,
                h = 320,
                xoffset = 0,
                yoffset = 0
            },
            spi_lcd
        )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    要想让屏显示内容,必须要先让屏工作起来,亮起来。所以我们把背光点亮

    pwm.open(0,1000,50,0,100)
    lcd.on()  --这句可加可不加,初始状态,就会亮起来
    
    • 1
    • 2

    到这里,LCD屏就准备就绪了,接下来就是LVGL库的使用了

    第二步:先了解luatos LVGL库的使用方法

    与上面LCD模块初始化同理,使用LVGL也需要先做初始化

    lvgl.init()
    
    • 1

    今天我们主要是学习如何显示中文内容
    1、先基于LVGL画布创建一个按钮

    local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)
    
    • 1

    2、设置按钮的位置,LVGL官方源码中是支持多种位置的,比如ALIGN_TOP_MID,ALIGN_LEFT_MID,但是好像LustOS的LVGL库中,并没有支持,至少我使用ALIGN_TOP_MID的时候,会报错

    lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0,0)
    
    • 1

    3、给按钮添加文字前,先要基于按钮创建一个标签,标签才可以显示文字

    label = lvgl.label_create(btn2, nil)
    
    • 1

    4、给标签设置文字,如果是英文字符,就可以使用默认字体,直接显示了

    lvgl.label_set_text(label, "hello world")
    
    • 1

    5、设置中文字体,直接使用中文,按钮将不显示任何文字

    lvgl.label_set_text(label, "中国制造")
    
    • 1

    第三步、重点来了,如何显示中文字体(仅限luatos环境中)

    1、因为芯片的固件中,为了固件的大小考虑,并没有加入中文字体,所以我们要先重新编译一个带有中文字体的固件。
    注意两个红框的地方,先要正确选择芯片型号,另外要保证固件大小
    在这里插入图片描述
    除了上图中基础的要选择以外,下面是本次测试要用到的东西
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    最最重要的,就是上图,因为我们现在用的是LVGL库,所以必须要选择LVGL库专用字体,在这里为了照顾固件的大小 ,选择了10PIX字号的

    第三步,给label标签设置文字,使期支持中文字体

    先看一下lustos 文档
    在这里插入图片描述
    到这里,如果直接使用示例中的代码,你会发现仍然不会显示文字
    问题有两点:
    1)lvgl.font_get(“opposans_m_12”),示例中使用的字体是12号的,我们添加到固件是10号的,正确应该lvgl.font_get(“opposans_m_10”)
    2)最后一句lvgl.scr_load(screen_label),这里会导致整个屏,不显示任何内容,正确应该是重新加载整个画板:lvgl.scr_load(lvgl.scr_act()),这一句不加也可以

    重新回到我们自己的脚本代码中,具体给标签设置中文的代码如下
    第二步中,我们已经创建了标签,也设置了标签的内容,现在只需要给标签增加样式就可以了

    local label_style = lvgl.style_create() --创建一个样式对象
    log.info("set_text_style",lvgl.style_set_text_font(label_style,lvgl.STATE_DEFAULT, lvgl.font_get("opposans_m_10"))) --设置使用的字体
    log.info("add style",lvgl.obj_add_style(label, lvgl.LABEL_PART_MAIN, label_style))
    --把样式增加到标签label
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    最后,送上完整的脚本代码,仅供参考

    PROJECT = "air101_test"
    VERSION = "1.0.1"
    sys = require "sys"
    local spi_lcd = spi.deviceSetup(0, pin.PB04, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)
    log.info(
        "lcd.init",
        lcd.init(
            "st7789",
            {
                port = "device",
                pin_dc = pin.PB01,
                pin_pwr = pin.PB00,
                pin_rst = pin.PB03,
                direction = 0,
                w = 240,
                h = 320,
                xoffset = 0,
                yoffset = 0
            },
            spi_lcd
        )
    )
    pwm.open(0,1000,50,0,100)
    -- lcd.on()
    log.info("lvgl_init",lvgl.init())
    local label
    local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)
    lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0,0)
    label = lvgl.label_create(btn2, nil)
    local str = "中国制造#"
    lvgl.label_set_text(label, str)
    log.info("set_text_style",lvgl.style_set_text_font(label_style,lvgl.STATE_DEFAULT, lvgl.font_get("opposans_m_10")))
    log.info("add style",lvgl.obj_add_style(label, lvgl.LABEL_PART_MAIN, label_style))
    --vgl.scr_load(lvgl.scr_act())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    本次测试,收关结束!

    luatos框架中LVGL如何使用中文字体〈一〉开发板与LCD屏如何连线的基本步骤

  • 相关阅读:
    线性表的基本操作
    SpringBoot整合Mongodb
    二手物品交易管理系统
    java毕业设计研究生实验室综合管理系统Mybatis+系统+数据库+调试部署
    MySQL 是否大小写敏感
    显示支付结果_WebSocket实现_方案2
    ElasticSearch性能原理拆解
    【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻
    Vite -静态资源处理 - 普通的图片
    软考高级架构师下篇-16通信系统架构设计理论与实践
  • 原文地址:https://blog.csdn.net/zxh1220/article/details/136643906