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)
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() --这句可加可不加,初始状态,就会亮起来
到这里,LCD屏就准备就绪了,接下来就是LVGL库的使用了
第二步:先了解luatos LVGL库的使用方法
与上面LCD模块初始化同理,使用LVGL也需要先做初始化
lvgl.init()
今天我们主要是学习如何显示中文内容
1、先基于LVGL画布创建一个按钮
local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)
2、设置按钮的位置,LVGL官方源码中是支持多种位置的,比如ALIGN_TOP_MID,ALIGN_LEFT_MID,但是好像LustOS的LVGL库中,并没有支持,至少我使用ALIGN_TOP_MID的时候,会报错
lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0,0)
3、给按钮添加文字前,先要基于按钮创建一个标签,标签才可以显示文字
label = lvgl.label_create(btn2, nil)
4、给标签设置文字,如果是英文字符,就可以使用默认字体,直接显示了
lvgl.label_set_text(label, "hello world")
5、设置中文字体,直接使用中文,按钮将不显示任何文字
lvgl.label_set_text(label, "中国制造")
第三步、重点来了,如何显示中文字体(仅限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

最后,送上完整的脚本代码,仅供参考
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())
本次测试,收关结束!
luatos框架中LVGL如何使用中文字体〈一〉开发板与LCD屏如何连线的基本步骤
相关文章:
luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体
本节内容,将和大家一同学习,在luatos环境中,使用lvgl库,一步步的编译固件、编写脚本,最终实现中文字体的显示。 芯片:AIR101 LCD屏:ST7789 上一节,我们一同学习了,硬件引…...
c++单例模式和call_once函数
单例模式是一种常见的设计模式,用于确保某个类只能创建一个实例。由于单例模式是全局唯一的,因此在多线程中使用单例模式时需要考虑线程安全问题。 1.GetInstance()实例化一个对象 懒汉式:第一次用到类的时候才会去实例化。 懒汉式创建对象…...
AutoMQ 携手阿里云共同发布新一代云原生 Kafka,帮助得物有效压缩 85% Kafka 云支出!
3 月 9 日,“AutoMQ x 阿里云云原生创新论坛”在阿里巴巴西溪园区圆满落幕。本次论坛现场不仅重磅发布了新一代云原生 Kafka 产品(AutoMQ On-Prem 版),还邀请了来自得物的稳定生产负责人分享 AutoMQ 在生产场景中的应用实践&…...
力扣977. 有序数组的平方
思路:暴力法:全部平方,然后调用排序API,排序算法最快是N*log(N)时间复制度。 双指针法:要利用好原本的数组本就是有序的数组这个条件, 只是有负数 导致平方后变大了,那么平方后的最大值就是在两…...
VSCode设置
VSCode设置 VSCode设置1.双击和点击显示设置2.快捷键设置 VSCode设置 1.双击和点击显示设置 VSCode设置双击才能打开文件、文件夹 打开文件夹:在设置页中搜索 expandMode,将 singleClick 改为 doubleClick 即可。 双击打开文件:在设置页中搜索workben…...
2.2 评估方法 机器学习
我们若有一个包含m个样例的数据集,若我们既需要训练,也需要测试,我们该如何处理呢?下面是几种方法: 2.2.1 留出法 “留出法”直接将数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作…...
第一类换元法(凑微分,凑狗)【高数笔记】
1.第一类换元法,解决的是什么类型的问题 2.不同的问题,应该有什么解法 3.13个基本积分公式,应该注意什么...
PostgreSQL数据库优化指南
默认安装下的 PostgreSQL 配置无法完全利用现有硬件,影响Netbox的性能。 本文章讲解了如何简单去优化。 优化 项目地址:https://github.com/le0pard/pgtune 首先打开:https://pgtune.leopard.in.ua/ (此网站会根据你的选择自动生成优化配置…...
VScode Error Lens插件
安装完成之后,当我们输入一些错误的语法格式的时候,它都会有一些提示! 一开始是英文提示 修改为中文提示 设置搜索 typescript.local...
Fiddler抓包教程
一、Fiddler安装: Fiddler原理 B/S模式的工作过程,简单的讲述访问一个网站的过程 。 Fiddler的位置: Fiddler是位于浏览器和服务器之间的请求和响应代理,所以它可以截获浏览器和服务器之间的所有HTTP通讯,࿰…...
TypeScript编译选项
编译单个文件:终端 tsc 文件名 自动编译单个文件:终端 tsc 文件名 -w 编译整个项目:tsc 前提是得有ts的配置文件tsconfig.json 自动编译整个项目:tsc --w tsconfig.json默认文件内容: tsconfig.json是ts编译器的配…...
个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商
自华为官方宣布HarmonyOS NEXT鸿蒙星河版开放申请以来,越来越多的头部APP宣布启动鸿蒙原生开发,鸿蒙生态也随之进入全新发展的第二阶段。 作为华为鸿蒙生态的重要合作伙伴,个推一直积极参与鸿蒙生态建设。为帮助用户在HarmonyOS NEXT上持续享…...
TypeScript开发100问?
开发人员在日常工作中常常需要处理各种各样的问题,而 TypeScript 作为 JavaScript 的一个超集,为我们提供了更加强大和可靠的工具来编写高质量的代码。在使用 TypeScript 进行开发时,我们可能会遇到各种各样的技术基础问题、开发过程中的挑战…...
数据结构和算法:栈与队列
栈 栈 (stack)是一种遵循先入后出逻辑的线性数据结构 把堆叠元素的顶部称为“栈顶”,底部称为“栈底”。 将把元素添加到栈顶的操作叫作“入栈”,删除栈顶元素的操作叫作“出栈”。 栈的常用操作 /* 初始化栈 */ stack<int&g…...
LeetCode(力扣)算法题_1261_在受污染的二叉树中查找元素
今天是2024年3月12日,可能是因为今天是植树节的原因,今天的每日一题是二叉树🙏🏻 在受污染的二叉树中查找元素 题目描述 给出一个满足下述规则的二叉树: root.val 0 如果 treeNode.val x 且 treeNode.left ! n…...
Topaz DeNoise AI for Mac/Win:引领图片降噪新纪元,让你的照片焕然一新!
在数字化时代,摄影已成为我们记录生活、表达情感的重要方式。然而,随着摄影技术的不断发展,我们也不得不面对一个令人头疼的问题——图片噪点。无论是低光环境下的拍摄,还是高ISO带来的画质损失,噪点总是如影随形&…...
云计算OpenStack KVM迁移
动态迁移 static migration 静态迁移 cold migration 冷迁移 offline migration 离线迁移 live migration 动态迁移 hot migration 热迁移 online migration 在线迁移 衡量 整体迁移时间 服务器停机时间 性能影响(迁移后和其它客户机) 特点 负载均衡 解除硬件依赖…...
【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)
免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…...
2024年华为OD机试真题-查找众数及中位数-Java-OD统一考试(C卷)
题目描述: 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以2,所得的结果就是中位数。 查找整型数…...
力扣思路题:重复的子字符串
注意比较j与j-i是否相同 bool repeatedSubstringPattern(char* s) {int i;int nstrlen(s);bool flag;for(int i1;i<n/2;i){if(n%i0){flagtrue;}for(int ji;j<n;j){if(s[j]!s[j-i]){flagfalse;break;}}if(flagtrue){return true;}}return false; }...
AI智能体架构设计:从成本黑洞到价值引擎的解耦之道
1. 从成本黑洞到价值引擎:为什么你的AI智能体架构正在吞噬预算又到了季度技术复盘会,财务那边递过来的云账单和工程人力成本,是不是又让你倒吸一口凉气?你看着报表上那个名为“AI智能体平台”的项目,它的资源消耗曲线几…...
DeepSeek代码质量评估实战手册:7步完成从混沌到可度量的质变跃迁
更多请点击: https://kaifayun.com 第一章:DeepSeek代码质量评估的底层逻辑与核心价值 DeepSeek代码质量评估并非简单地统计行数或检测语法错误,而是基于多维语义理解构建的推理系统。其底层逻辑融合了静态分析、符号执行与大语言模型生成式…...
机器学习模型评估中的构念效度:超越基准测试分数的科学推断
1. 项目概述与核心问题在机器学习的日常研究和工程实践中,我们每天都在和各种各样的基准测试(Benchmark)打交道。无论是为了比较新提出的ResNet变体在ImageNet上的Top-1准确率,还是评估一个大型语言模型在MMLU上的常识推理能力&am…...
软阴影:那个让虚拟世界“温柔起来“的光影小秘密
一、从一只小猫的影子说起 前几天我在朋友家做客,他家养了一只胖乎乎的橘猫,正趴在阳台的窗边晒太阳。我无意间瞥了一眼那只猫脚边的影子,突然被一个细节震撼了—— 那只猫的影子——并不是一片均匀的黑。 仔细看——猫肚子紧贴地板的地方——…...
内网环境下Win7系统批量离线补丁部署实战指南
1. 内网Win7补丁部署的挑战与解决方案老旧Win7系统在内网环境中的安全隐患就像漏雨的屋顶,看似不影响日常使用,但随时可能引发严重后果。我经手过几十家单位的系统加固项目,发现这些场景存在三个典型痛点:首先是补丁来源问题&…...
美团外卖mtgsig与waimai_sign双层签名逆向解析
1. 这不是“爬虫教程”,而是一份反向工程现场笔记你搜到这篇内容,大概率正卡在某个调试窗口前:抓包看到mtgsig和waimai_sign两个参数像两堵墙,无论怎么改请求头、换UA、清缓存,返回永远是{"code":403,"…...
Taotoken平台快速获取APIKey并开始你的第一个Python调用示例
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken平台快速获取APIKey并开始你的第一个Python调用示例 1. 准备工作:注册与登录 要开始使用Taotoken,…...
TorchDynamo与TorchInductor:PyTorch编译器生态的完整解析
TorchDynamo与TorchInductor:PyTorch编译器生态的完整解析 【免费下载链接】torchdynamo A Python-level JIT compiler designed to make unmodified PyTorch programs faster. 项目地址: https://gitcode.com/gh_mirrors/to/torchdynamo TorchDynamo 是一个…...
十年以上经验的建站公司推荐|策划强、落地稳的网站制作公司盘点
互联网时代,企业官网已从单纯的信息展示窗口升级为集品牌价值传递、用户体验连接与业务高效转化于一体的核心数字阵地。行业报告显示,优质官网可帮助企业线上转化率提升35%-60%,而低效官网则可能导致潜在客户大量流失。面对市场上众多的网站建…...
HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器
HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和复杂的操作界面而烦恼吗?Hiv…...
