OLED非等宽字体格式
OLED非等宽字体格式
陈拓 2021/07/02-2021/07/07
1. 概述
用Arduino IDE进行ESP32和ESP8266开发时可以使用内置字体:
这3种字体都是非等宽的,在OLED这样的小屏幕上非等宽字体可以显示更多的字符,也更美观。
如果我们使用ESP-IRF进行ESP32开发,或者用RTOS SDK进行ESP8266开发时要使用这些字体就需要自己写OLED的显示驱动。因此我们需要了解这些非等宽字体的结构。
在Arduino IDE安装目录下的
Arduino\arduino-1.8.10\libraries\esp8266-oled-ssd1306-master\src\OLEDDisplayFonts.h文件定义了这三种字体。
如果你没有安装Arduino IDE,也可以从下面的网址找到:
https://github.com/ThingPulse/esp8266-oled-ssd1306/blob/master/src/OLEDDisplayFonts.h
如果需要更多的字体可以通过官方给定的网页定制。网址为:http://oleddisplay.squix.ch
该网页除了可以生成Arduino字体,还可以生成Adafruit GFX字体。Arduino IED也支持Adafruit GFX字体。关于Adafruit GFX字体的规范见:
《Adafruit GFX Library字体规范》
https://zhuanlan.zhihu.com/p/385486474
https://blog.csdn.net/chentuo2000/article/details/118369058
下面我们说明Arduino IDE内置非等宽字体的结构。
2. 非等宽字体的结构
用任意文本编辑工具打开OLEDDisplayFonts.h文件。或者打开网页:
https://github.com/ThingPulse/esp8266-oled-ssd1306/blob/master/src/OLEDDisplayFonts.h
其中包含了三种字体对应的3个数组ArialMT_Plain_10[]、ArialMT_Plain_16[]和ArialMT_Plain_24[]。每种字体数组由3部分组成,我们以ArialMT_Plain_10[]为例进行说明。
2.1 数组和特征说明
前四个字节是字体说明:
0x0A:字符集宽度(可变值,每个字符的实际宽度小于等于字符集宽度)
0x0D:字模高度(固定值)
0x20:第一个字符的ASCII值,从ASCII表的空格开始,空格的ASCII为32。
0xE0:字符个数224
2.2 跳转表
每个字符一行,用4个字节表示:
- 前两个字节表示字符字模所在该数组的起始位置。第一个字节为高位,第二个字节为低位。0xFF表示无地址。
- 第三个字节是字模所占的字节数
- 第四个字节表示字符的宽度,因为宽度是可变的,这是字符的实际宽度
- 注释给出了十进制的ASCII码值和数据的起始地址。例如//35:9表示ASCII码35的数据从9开始。
我们看第1个字符ASCII的空格,其数据地址是0xFF,0xFF,表示这个字符没有数据,也就是空,所以该字符的字节数是0x00。第4个字节0x03表示该字符的宽度。
第2个字符是!,ASCII为33,数据地址为0x0000,字节数为0x04,字符宽度为0x03。
第3个字符是",ASCII为34,数据地址为0x0004,字节数为0x05,字符宽度为0x04。
第4个字符是#,ASCII为35,数据地址为0x0009,字节数为0x09,字符宽度为0x06。
以此类推。
2.3 字符数据
举例,我们看字符”,双引号,ASCII码是34。
先看跳转表:0x00, 0x04, 0x05, 0x04, // 34:4
数据是从// Font Data:的0x0004处开始的0x05个字节:
0x38,0x00,0x00,0x00,0x38, // 34
字模以逐列式排列点阵,因为字符的高是13,所以每列需要2个字节,第二个字节最高3个bit没有使用,总是0。用.代表0,用x代表1,将这5个字节展开成二进制,低位在上,高位在下,按列排列。每列2个字节,第一个字节在上,第二个字节在下,如图所示。
要注意的是,为了节省空间,每个字符最后全零的字节被省略了,例如本例,按照字符的宽和高计算需要8个字节的数据,实际上只有5个字节,后面3个全零字节被省略了。
- 显示效果
下图是ESP8266 RTOS SDK驱动0.96寸OLED显示屏的效果。
注意,要删除OLEDDisplayFonts.h文件中数组定义的关键字PROGMEM。
PROGMEM关键字被Arduino和AVR编程使用,在ESP8266和ESP32的官方开发环境RTOS SDK和ESP-IDF中要删除。
参考文档
- esp8266-oled-ssd1306/src/OLEDDisplayFonts.h
https://github.com/ThingPulse/esp8266-oled-ssd1306/blob/master/src/OLEDDisplayFonts.h - 有关SimpleGUI移植非等宽字符的介绍
https://blog.csdn.net/eaglewzw/article/details/107602173
OLED非等宽字体格式相关推荐
- ffmpegguitool下载不了_-非等宽unicode 点阵字库工具(GuiTool)下载1.06 -旋风软件园...
v1.06 (20120410) FontMaker(点阵字库) 1. 增加系统字体支持,操作更简单,快捷. v1.05 (20120324) FontMaker(点阵字库) 1. 修正了字符对齐问题 ...
- html字体代码大全_Vba群发邮件及HTML设置字体格式的代码
按如下数据群发邮件 Sub 在EXCEL中用VBA群发N个Outlook邮件并简单设置邮件正文格式() Dim a, b As Object '定义2个对象型变量 Dim m, n, i As Lon ...
- 前端图片压缩上传(纯js的质量压缩,非长宽压缩)
前端图片压缩上传(纯js的质量压缩,非长宽压缩) 此demo为大于1M对图片进行压缩上传 若小于1M则原图上传,可以根据自己实际需求更改. demo源码如下: <!DOCTYPE html> ...
- Android实现自定义字体格式液晶数字
最近在研究点心省电,想做个类似的产品,看到界面听炫的, 在实现过程中发现android不支持液晶显示的数字格式,一时陷入 困境. 最后自己,通过查看Linux系统下的字库ttf,查看实现了起功能, 顺 ...
- css linux 等宽字体,CSS3 等宽字体与ch单位的详解
下面我们来看一篇关于CSS3 等宽字体与ch单位的使用方法介绍,希望这篇文章能够让各位理解到css中ch单位及字体等宽问题哦. 一.什么是等宽字体? 所谓等宽字体,一般是针对英文字体而言的.东亚字体, ...
- 关于字体族、字体格式
一.字体族 我们平时泛称的字体(如:Times Consolas Arial 微软雅黑-)其实都是字体族,因为其中包含许多种变体(如:常规 粗体 斜体 斜体加粗-),但是这些变体又是同属于一种字型. ...
- CSS非布局样式-字体
本文内容整理于慕课网视频教程 对于CSS中的字体属性(font-family),有几个方面的知识需要了解. 一:字体的分类 有两个类型的名称可用于分类字体: 字体族名称(family-name) 族类 ...
- Visual Studio 2019 设置等宽字体 DejaVu Sans Mono
Visual Studio 2019 设置等宽字体 DejaVu Sans Mono 文章目录 Visual Studio 2019 设置等宽字体 DejaVu Sans Mono I - 前言 II ...
- Word 参考文献 引用 自动更新 引用字体格式批量改动
目前在写毕业论文,参考文献的改动真是头疼,逐一对照引用不说,一旦文献引用要增删改,后面的都要改.针对这个问题,特意去查了查文献引用然后自动更新的方法,在这记录一下,方便以后查看. V1.0_2020. ...
最新文章
- git常用命令及规范流程
- linux 进程原理内存,linux进程通信之共享内存原理(基于linux 1.2.13)
- 安装smac的注意事项
- C#中Invoke的用法(转)
- 开源netcore前后端分离,前端服务端渲染方案
- 移动端判断手机横竖屏状态
- 前后端开发的心得体会_社招后端三面总结以及学习经验感言(操详细)
- 想要你的HTTP稳定不蹦,必须吃透「负载均衡」
- Origin 去demo水印
- Adobe Premiere Pro (PR) 视频剪辑相关应用
- 美化你的Xfce桌面
- wordpress企业网站模板
- TCP之 select模型
- 用图形计算机玩游戏,专业图形显卡能玩游戏吗?专业图形显卡和游戏显卡区别是什么?...
- java后台生成二维码以及页面显示二维码方式
- 领导的沉默,背后到底隐藏着什么?
- python 上传图片到七牛云上
- CAD编辑器中CAD线型怎么修改?
- kitti rotation,label等细节相关
- android无法启动守护进程,Android Studio无法启动守护进程异常怎么解决?
热门文章
- 响应式布局或自适应网页设计
- 序列流_SequenceInputStream类
- 500 Internal Privoxy Error解决方法
- 列表数据批量删除思想
- 3月19日,30秒知全网,精选7个热点///申请百度智能云文心一言企业版API调用服务测试的企业用户达9万
- 【AI 写作】《开发者思维:技术如何驱动企业的未来》全书目录、什么是开发者思维? 开发者思维与企业战略的关系?
- BITCS2016程序设计 | 20. 猜-丁-壳!
- 幼儿园语言活动包括哪几类_幼儿园语言活动课反思
- 基于MATLAB的GSE、GSS、GDD的五天运行法计算
- 503 Service Unavailable