APP下载

Arduino平台BDF字库像素数据压缩算法及显示程序设计研究

2021-11-22彭伟

物联网技术 2021年11期

彭 伟

(武汉城市职业学院,湖北 武汉 430064)

0 引 言

物联网嵌入式系统节点微控制器,通常直接提取使用未经压缩的字符像素数据用于驱动显示,导致嵌入式系统资源被大量占用,而U8G2图形驱动库则非常好地解决了这一问题。本文将提取U8G2的像素数据并剖析研究行程编码压缩算法;在Proteus环境下设计Arduino+OLED电路[1-4]进行显示仿真测试,为物联网嵌入式系统类似设计提供重要参考。

1 U8G2驱动与BDF字库简介

1.1 U8G2显示驱动

U8G2是单色LCD、OLED及eInk显示驱动库,以页面缓冲模式下的显示程序为例,针对OLED有语句U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0,/*clock=*/13,/*data=*/11,/*cs=*/10,/*dc=*/9,/*reset=*/8),可构造面向 OLED(SSD1306)的 U8G2对象,同时完成SPI接口引脚配置。U8G2显示字符通过enableUTF8Print()使其能支持Unicode编码,通过setFont设置字体,通过drawStr输出字符串。C程序中的字体像素数据须符合u8g2fontformat要求,其最前面一段为编码个数及比特位0和1的行程编码宽度等,其后是各字符编码、压缩编码长度及行程编码字节等。

1.2 BDF字库结构

BDF是Adobe字形位图格式,使用ASCII编码,以字体全局信息开始,其后是各字形位图数据。以unifont.bdf字库文件为例,其开头部分全局信息如下:

STARTFONT 2.1 /*字体文件版本*/

FONT XXX /*表示字体名*/

SIZE 16 75 75 /*字符大小及在XY方向分辨率

FONTBOUNDINGBOX 16 16 0 -2 /*X方向宽度与Y方向高度及XY方向偏移*/

STARTPROPERTIES 24 /*24为所列属性个数*/

/*这里是大量公共属性,具体内容此略*/

ENDPROPERTIES /*全局属性结束*/

CHARS 57086 /*字库文件字符总个数*/

以下是各字符具体结构信息,以"1"为例:

STARTCHAR U+0031 /*"1"的编码*/

BBX 8 16 0 -2 /*字符边框8*16,偏移0/-2*/

/*限于篇幅,这里略去了其他属性项*/

BITMAP /*字符位图点阵编码起始标识*/

/*以字符"1"的位图像素为例,每1字节占一行,表示8像素,为缩减篇幅以下将16字节列于一行*/

00 00 00 00 08 18 28 08 08 08 08 08 08 3E 00 00

ENDCHAR /*字……

登录APP查看全文