LVGL实现字库的下载和使用

1 字库

字库的概念:相应文字或字符的合集。

点阵字库:按字库顺序排列的字符/汉字字模的合集。

LVGL中字库使用Unicode编码,Unicode 是全球文字统一编码。它把世界上的各种文字的每一个字符指定唯一编码,实现跨语种、跨平台的应用。中文用户最常接触的是汉字 Unicode 编码。中文字符数量巨大,日常使用的汉字数量有数千个,再加上生僻字,数量达到数万个。

注意:一个汉字是需要两个字节

分别为:区码 + 位码

2  LVGL实现字库的两种方式

        第一种方式:内部大数组

        之前显示汉字采用的就是这种形式,如果只是显示少量汉字,用这种方式显示就很便捷,字体加载速度也会比较快。但是如果想要显示任意的汉字时,就需要把常用的字模全部取出,对应的保存字模数据的数组就会占用大量的空间。

        第二种方式:外置字库 

       一般我们会通过软件将常用的汉字全部取模,保存到外部存储介质中,例如SD卡或者Flash。对于LVGL来说,网上有第三方提供的字库制作工具。

我们采用的是W25Q64外部Flash模块来用于储存字库。

2.1 字库制作准备工作

字体下载链接:等宽字体 — 百问网LVGL中文教程文档 文档 (100ask.net)

字体转换工具下载链接:

LvglFontTool字体工具更新V0.4版本 - LittlevGL - 里飞网 - Powered by Discuz! (lfly.xyz)

2.2 字库制作流程

在制作LVGL字库之前需要准备好上述文件,字库制作流程如下:

  1. 字库制作工具下载好之后解压,然后找到对应软件图标双击打开
  2. 选择想要的字体文件,然后点击确定,注意子模高度和实际生成的有偏差
  3. 添加常用汉字,并修改LVGL版本和字库类型,字体名称根据自己需求命名
  4. 点击开始转换,选择自己的想要保存字库的文件夹,等待转换完成即可
  5. 转换完成后生成的内容如下:myFont.bin是生成的字库文件,需要下载到外部Flash里,myFont.c是对应的字模获取源码,需要移植到自己的工程里。

至此字库文件就已经制作完成。

myFont.c :功能函数,要跟myFont.bin,调用功能函数获取字模信息

myFont.bin:放的是所有的字模信息

myFont.bin  --  相当于之前的大数组,我们为了节省单片机的空间,同时尽可能支持全部字体,所有需要把bin文件放到SD卡或者flash中,我们就是放到flash中  

下面会介绍如何放入  

2.3 将字库下载到外部FLASH中

流程示意图:

存在的风险:

简单来说就是,可能会出现两个传输的速率不相同导致一个传输的快,一个接收的慢,到时数据在传输的过程中出现问题。

在STM32中和W25Q64模块进行传输数据中,采用的是SPI协议,搭载在APB1总线,并经过分频,且分频后的频率为:18MHZ --也就是SPI的速率

串口发送1个字节包含起始位和停止位和8位数据,发送1个字节需要10位,串口1s发送11520字节/s==0.01M字节/s<18M.

2.4 字库下载代码实现流程

如果是第一次下载字库,需要先擦除整个芯片,或者按照所使用的扇区大小擦除。

1、确定下载位置,先擦除指定位置的扇区。

2、如使用16号字体,从0地址开始下载,24号字体字号开始的地址要避免覆盖16号字体。

3、在串口接收中断内,每接收一个字节数据,就保存一个字节数据。

4、每接收一个字节,保存地址偏移一下。

5、每用一个1ms自加一次,而每接收一个字节,再清一下变量,用于判断是否接受完毕,如果变量累加100ms,一直位接收到数据,就认为数据已经接收完毕。

2.5 代码流程

2.5.1 定义擦除函数


uint32_t Receive_Cont=0;   //收到的字节数
uint8_t  Receive_time=0;   //用来表示超时时间   超过100ms未收到数据认为接收完成
uint8_t  Receive_flag=0;   //表示接收完成的标志位  0表示未接收完成  1表示接收完成
uint8_t  Receive_ing=0;    //表示是否正在接收  0表示未开始接收  1表示正在接收

//定义函数连续擦除多个扇区
//参数1   扇区的起始地址
//参数2   扇区的数量
void sFLASH_EraseSector_Cont(uint32_t SectorAddr,uint16_t Sector_Cont)
{
	for(uint16_t i=0;i<Sector_Cont;i++)
	{
		sFLASH_EraseSector(SectorAddr+i*sFLASH_SPI_SECTORSIZE);
	}
}

调用扇区擦除函数擦除对应区域

	printf("开始擦除16号字库区域\r\n");
	sFLASH_EraseSector_cont(Font16_ADDR,Font16_sector_Cont);
	printf("擦除16号字库区域完成\r\n");

计算存储空间

用这个大小除上4096就得到占用的空间大小了。

W25Q64的位置分配
	W25Q64的最小擦除函数扇区    1扇区=4096字节
	扇区0    0x0
	扇区1    0x1000
	扇区2    0x2000
	....
	扇区238  0x1000*238
	扇区239  0x1000*239
	16号字体   877339字节    需要占用的扇区  877339/4096=214.19   需要扩大 所以分配 215个扇区
	16号字体  扇区0(0x0)--扇区238(0x1000*238)	

2.5.2 串口接收数据

void USART1_IRQHandler(void)
{
	uint8_t Receive_Data=0;
	if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
	{
		Receive_Data=USART_ReceiveData(USART1);
		
		//参数2一定要在字库起始地址的基础上个偏移已经接收的数量
		sFLASH_WriteBuffer(&Receive_Data,Font16_ADDR+Font16_count,1);
		Font16_count++;//接收到的数量
		Font16_time=0;//接收完成的超时时间清0
		Font16_lvgl=1;//表示正在接收数据
		
		USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除 USARTx 的中断待处理位
	}
}

在主函数中加入是否传输完毕检测函数,然后吧程序下载到开发板上,运行即可。

		if(Font16_time>=100&&Font16_flag==0)
		{
			//超时溢出表示接收完成
			Font16_flag=1;//表示接收完成
			Font16_lvgl=0;
			printf("接收的数量:%d\r\n",Font16_count);
		}

导入字库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/761859.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分体式天线的应用介绍

分体式天线的主要应用广泛且多样化&#xff0c;以下是对其主要应用的归纳&#xff1a; 1、仓储管理 在RFID仓储项目中&#xff0c;使用性能好的RFID分体式天线可以确保系统的稳定性&#xff0c;更能够降低整个项目的成本。 分体式天线通过其多个天线接口与分体式读写器连接&…

K-Planes代码记录

随记 原文 K-Planes: Explicit Radiance Fields in Space, Time, and Appearance&#xff0c;又要换baseline&#xff0c;可是效果不好能怎么办呢&#xff0c;我可不可以发疯。k-planes的代码又是非常工程琐碎的&#xff0c;大佬的代码果然不顾小白死活。随便记录下整个过程。…

哪个牌子的超声波清洗器好?精选四大超强超声波清洗机力荐

生活中戴眼镜的人群不在少数&#xff0c;然而要维持眼镜的干净却不得不每次都需要清洗&#xff0c;只是通过手洗的方式实在太慢并且容易操作不当让镜片磨损更加严重&#xff01;所以超声波清洗机就诞生了&#xff01;超声波清洗机能够轻松清洗机眼镜上面的油脂污渍&#xff0c;…

Spire.PDF for .NET【文档操作】演示:在 PDF 中创建目录 (TOC)

目录在增强文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概述&#xff0c;使他们能够快速找到并访问他们感兴趣的特定部分或信息。这对于较长的文档&#xff08;例如报告、书籍或学术论文&#xff09;尤其有价值&#xff0c;因为读者可能需要多…

国产压缩包工具——JlmPackCore SDK说明(二)——JlmPack_Create函数说明

一、JlmPack_Create函数说明 JlmPack_Create函数是创建jlm压缩文件的核心函数&#xff0c;最大允许CATALOG_MAX_LIMIT&#xff08;请参考Config.h&#xff09;个目录&#xff0c;意思是包括文件夹和文件在内&#xff0c;遍历整个列表最大允许CATALOG_MAX_LIMIT个目录对象&#…

【Unity小技巧】Unity字典序列化

字典序列化 在 Unity 中&#xff0c;标准的 C# 字典&#xff08;Dictionary<TKey, TValue>&#xff09;是不能直接序列化的&#xff0c;因为 Unity 的序列化系统不支持非 Unity 序列化的集合类型。可以通过手写字典实现 效果&#xff1a; 实现步骤&#xff1a; 继承ISe…

2024年制冷与空调设备运行操作证模拟考试题库及制冷与空调设备运行操作理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年制冷与空调设备运行操作证模拟考试题库及制冷与空调设备运行操作理论考试试题是由安全生产模拟考试一点通提供&#xff0c;制冷与空调设备运行操作证模拟考试题库是根据制冷与空调设备运行操作最新版教材&#…

振弦采集仪的工程安全监测实践与案例分析

振弦采集仪的工程安全监测实践与案例分析 振弦采集仪是一种常用的工程安全监测仪器&#xff0c;通过测量被监测结构的振动频率与振型&#xff0c;可以实时监测结构的安全状况。本文将结合实践经验和案例分析&#xff0c;探讨振弦采集仪在工程安全监测中的应用。 一&#xff0c…

奔驰G350升级原厂自适应悬挂系统有哪些作用

奔驰 G350 升级自适应悬挂系统后&#xff0c;可根据行车路况自动调整悬架高度和弹性&#xff0c;从而提升驾乘的舒适性和稳定性。 这套系统的具体功能包括&#xff1a; • 多种模式选择&#xff1a;一般有舒适、弯道、运动及越野等模式。例如&#xff0c;弯道模式在过弯时能为…

elk对于集群实例的日志的整合-基于logstash采集日志

说明&#xff1a;基于logstash采集日志 环境&#xff1a; 物理机192.168.31.151 一.启动2个测试实例&#xff0c;每5-10s随机生成一条订单日志 实例一 包位置&#xff1a;/home/logtest/one/log-test-0.0.1-SNAPSHOT.jar 日志位置:/docker/elastic/logstash_ingest_data/l…

塑造卓越企业家IP:多维度视角下的策略解析

在构建和塑造企业家IP的过程中&#xff0c;我们需要从多个维度进行考量&#xff0c;以确保个人品牌能够全面、立体地展现企业家的独特魅力和价值。以下是从不同角度探讨如何做好一个企业家IP的策略。 一、从个人特质出发 深入了解自我&#xff1a;企业家需要清晰地认识到自己的…

树立行业标杆,林清轩获“以油养肤开创者”市场地位认证

从0到1的创造&#xff0c;才能快速实现从1到100的裂变&#xff0c;这是亘古不变的商业逻辑。 6月25日&#xff0c;知名美妆国货品牌林清轩&#xff0c;获得了CIC灼识的市场地位确认书&#xff0c;确定“以油养肤开创者” 的地位。 近两年&#xff0c;以油养肤的概念逐渐兴起&am…

vivado VIO IP核

参考&#xff1a;pg159 VIO&#xff1a;可以模拟输入/输出功能&#xff0c;实时监视和修改FPGA中的信号&#xff0c;用于调试和验证&#xff0c;与ILA相比&#xff0c;VIO无需占用RAM资源。 VIO IP的输出对于FPGA内部逻辑是输入信号&#xff0c;可以在调试界面设置输入值&…

免费管饱不折腾,无公网NAS访问攻略,国产品牌异地自动组网技巧

前言 说起远程桌面、异地组网、内网穿透等等服务&#xff0c;大家脑海中第一反应是哪款产品&#xff0c;确实&#xff0c;现在市面上同类产品不少&#xff0c;但同时支持组网跟穿透的产品几乎没有。节点小宝作为一款创新型的远程管理工具&#xff0c;凭借其使用简单&#xff0…

欧盟《净零工业法案》通过,全球清洁能源市场迎来新格局

2024年5月27日&#xff0c;欧盟理事会正式通过《净零工业法案》&#xff0c;这意味着欧盟在推动工业绿色转型方面迈出了具有决定性的一步。这一法案的通过&#xff0c;不仅对欧盟的净零排放目标具有深远影响&#xff0c;也将对全球清洁能源市场产生重大影响。 《净零工业法案》…

2024年6月27日~2024年7月1日周报

目录 一、前言 二、完成情况 2.1 生成速度模型剖面图 2.2 吴恩达机器学习系列课程 2.2.1 介绍 2.2.1.1 机器学习 2.2.1.2 监督学习 2.2.1.3 无监督学习 2.2.2 单变量线性回归 2.2.2.1 模型表示 2.2.2.2 代价函数 2.2.2.3 梯度下降 2.2.2.4 梯度下降的线性回归 2.…

Java短剧系统

探索影视新体验 &#x1f4f1;一、引言&#xff1a;短剧时代的来临 在数字化的今天&#xff0c;我们见证了许多内容消费模式的转变。从长篇大论的电视剧到短小精悍的短视频&#xff0c;再到如今备受瞩目的短剧&#xff0c;观众对于影视内容的需求越来越多元化。而短剧系统微信…

网络请求的高效处理:C++ libmicrohttpd库详解

一、libmicrohttpd简介 libmicrohttpd是一个小型的C语言库&#xff0c;用于创建HTTP服务器和客户端。它提供了HTTP 1.1协议的完整实现&#xff0c;包括持久连接、管道化请求、虚拟主机等特性。libmicrohttpd的特点是&#xff1a; 轻量级&#xff1a;易于集成到C或C项目中。跨…

DolphinScheduler分布式集群部署指南(小白版)

官方文档地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9 DolphinScheduler简介 摘自官网&#xff1a;Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流…