esp8266 OLED气象图标显示的来龙去脉
通过esp8266+128x64OLED气象站的气象图标显示,在之前像迷一样困惑我好久,这东西是怎么显示出来的,看遍了代码,也没看到出处,今天总算了结了。前面以前介绍了Return的调用图标,它们的指向都指向了:
WeatherStationFonts.h
这个文件,然而里面都是一些16进制数值,很少有能释读的内容代码代码。其实这些代码是通过一个网站自动生成的图形库代码:http://oleddisplay.squix.ch/#/home
- 选择自己所需要的FontFamily类型,然后选择好图形大小Size,即可生成所需要的代码了。
📘字库说明
- 📌https://oleddisplay.squix.ch/
从上面网址获取到的字库数据中,以下面部分内容进行说明:
// Created by http://oleddisplay.squix.ch/ Consider a donation
// In case of problems make sure that you are using the font file with the correct version!
const char Dialog_plain_16[] PROGMEM = {
0x11, // Width: 17 代表该种字符集的宽度(但每个字符实际显示的宽度只会小于或等于它)
0x13, // Height: 19 代表字符集的高度
0x20, // First Char: 32 代表字符集的第一个字符的ASCII值(此处是从ASCII表中的空格开始,空格的ASCII为32)
0xE0, // Numbers of Chars: 224 代表字符集的总共的字符个数(这里总共224个)
// Jump Table:
0xFF, 0xFF, 0x00, 0x05, // 32:65535
0x00, 0x00, 0x08, 0x06, // 33:0
0x00, 0x08, 0x0D, 0x06, // 34:8
0x00, 0x15, 0x22, 0x0D, // 35:21
0x00, 0x37, 0x1A, 0x0A, // 36:55
0x00, 0x51, 0x29, 0x0F, // 37:81
………………………………
// Font Data:
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x67, // 33
0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78, // 34
0x00,0x00,0x00,0x00,0x08,0x00,0x80,0x08,0x00,0x80,0x78,0x00,0x80,0x1F,0x00,0xF0,0x09,0x00,0x90,0x48,0x00,0x80,0x7C,0x00,0xC0,0x0F,0x00,0xF0,0x08,0x00,0x80,0x08,0x00,0x80, // 35
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x21,0x00,0x60,0x42,0x00,0x20,0x42,0x00,0xF8,0xFF,0x01,0x20,0x44,0x00,0x20,0x64,0x00,0x40,0x38, // 36
其中:
- 🌿跳转表(Jump Table):前两个字节表示字符字模所在该数组的起始位置(若为0xFF,0xFF这表示无),第三个则表示字模所占的字节数,最后一个表示其要显示的宽度(记录每个字符字模的实际的宽度).
// Jump Table:
0xFF, 0xFF, 0x00, 0x05, // 32:65535
0x00, 0x00, 0x08, 0x06, // 33:0
0x00, 0x08, 0x0D, 0x06, // 34:8
0x00, 0x15, 0x22, 0x0D, // 35:21
0x00, 0x37, 0x1A, 0x0A, // 36:55
0x00, 0x51, 0x29, 0x0F, // 37:81
- 🌿 字符子模(.Font Data):对应字符集里面的每个字符的字模数据。
// Font Data:
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x67, // 33
0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78, // 34