STM32F1与STM32CubeIDE快速入门-FSCM驱动TFT-LCD(ILI9325)

FSCM驱动TFT-LCD(ILI9325)

文章目录

1、FSCM介绍

STM32F10xxx 灵活静态存储器控制器 (Flexible Static Memory Controller,FSMC) 是一款嵌入式外部存储器控制器,允许 STM32F10xxx 微控制器与各种存储器接口,包括 SRAM、NOR 闪存、NAND 闪存和 LCD 模块。FSMC NOR Flash/SRAM bank 适用于 MCU 并行彩色 LCD 接口。

在这里插入图片描述

FSMC主要用于:

  • 将 AHB 数据通信事务转换为适当的外部设备协议
  • 外部设备的访问时序要求

所有外部存储器共享地址、数据和控制信号,但有自己的片选信号。 FSMC 一次只能访问一个外部设备。

FSMC可以连接同步或异步内存和16位PC内存卡,STM32的FSMC接口支持的内存包括SRAM、NANDFLASH、NORFLASH、PSRAM。

1.2 FSMC外部设备地址映射

FSMC的外部设备地址映像,STM32 FSMC将外部存储器分为4个固定大小为256M字节的存储器块:

  • Block 1 用于 4 个 Norflash 或 PSRAM 存储设备。 Block 1 分为 4 个带有独立片选信号的 Norflash / PSRAM。
  • Block 2和Block 3用于连接NANDFLASH(一个block驱动一个设备)
  • Block 4 用于连接 PC 块设备

对于每个存储区域,要使用的内存类型由用户在配置寄存器中定义。

在这里插入图片描述

NOR/PSRAM 地址映射

Bank1 的 256M 字节空间由 28 条地址线 (Haddr [27: 0]) 寻址。 这里的Haddr是内部AHB地址总线,但也参与了外部存储器的寻址,其中Haddr[25:0]是从外部存储器地址FSMC_A[25:0],Haddr[26:27]对4个区进行寻址 . 如下表所示:

在这里插入图片描述

Haddr [25: 0] 包含外部存储器地址。 由于 Haddr 是字节地址,所以内存不同,发送到内存的地址会根据内存数据宽度的不同而不同,如下表所示:

在这里插入图片描述

1.1 FSMC NOR Flash/SRAM bank 描述

为了控制 NOR Flash/SRAM 存储器,FSMC 提供了以下特性:

  • 选择要用于映射 NOR Flash/SRAM 存储器的 bank:有四个独立的 bank 可用于与 NOR Flash/SRAM/PSRAM 存储器接口,每个 bank 使用单独的芯片选择引脚进行选择。
  • 启用或禁用地址/数据多路复用功能
  • 选择要使用的存储器类型:NOR Flash/SRAM/PSRAM
  • 定义外部存储器数据总线宽度:8/16 位
  • 启用或禁用 NOR Flash 同步存储器的突发访问模式
  • 配置等待信号的使用:启用/禁用、极性设置和时序配置
  • 启用或禁用扩展模式:该模式用于访问具有不同时序配置的内存,以进行读写操作。

由于 NOR Flash/PSRAM 控制器同时支持异步和同步存储器,用户应根据存储器特性仅选择有用的参数。

FSMC 还提供了对多个参数进行编程以与外部存储器正确连接的可能性。 根据内存类型,某些参数未使用。

如果使用外部异步存储器,用户必须根据存储器数据表中指定的 AC 时序信息计算和设置以下参数:

  • ADDSET:地址建立时间
  • ADDHOLD:地址保持时间
  • DATAST:数据建立时间
  • ACCMOD:访问模式

该参数使 FSMC 能够灵活地访问各种异步静态存储器。 如果内存支持这种功能,则有四种扩展访问模式允许在读取内存时以不同的时序进行写访问。 当使能扩展模式时,FSMC_BTR 寄存器用于读操作,FSMC_BWR 寄存器用于写操作。

在使用同步存储器的情况下,用户必须计算和设置以下参数:

  • CLKDIV:时钟分频比
  • DATLAT:数据延迟

请注意,如果存储器支持这种模式,NOR Flash 存储器读取操作可以是同步的,而写入操作通常保持异步。

对同步NOR Flash进行编程时,存储器会自动在同步和异步模式之间切换,所以在这种情况下,必须正确设置所有参数。下图显示了两种模式下的时序图:

在这里插入图片描述

2、TFT-LCD与 FSMC接口

2.1 常用彩色液晶接口介绍

点阵 LCD 单元通常由硅嵌入式玻璃 LCD 驱动器控制,可以使用串行接口与微控制器连接。 这种类型的 LCD 单元具有用于显示的嵌入式 RAM,不需要任何特殊的微控制器功能。与点阵 LCD 单元不同,彩色 LCD 需要特定的控制器。

使用彩色 LCD 控制器意味着每个像素需要四根线:三根用于红、绿和蓝的模拟电压线(horizontal,水平)和一根用于选择的电压线(vertical,垂直)。

通常,彩色 LCD 可以通过两种方式连接:

  • 带同步信号的 RGB 接口
  • MPU(微处理器单元)接口(并行或串行)

所有图形 LCD 都带有芯片或玻璃上硅形式的内置驱动程序。 这些驱动程序在 RGB 信号和同步和像素控制之间进行转换。

许多 LCD 还带有一个 LCD 控制器,用于在 MPU 接口和 RGB 信号之间进行转换。 有些芯片既是驱动程序又是控制器。 控制器的作用是不断刷新LCD。

下表列出了集成控制器的 LCD 与需要 MPU LCD 控制器的 LCD 之间的区别(MCU中LCD控制器的优缺点):

MCU中的LCD控制器 LCD中的LCD控制器
需要外部 RAM(成本高) RAM 包含在 LCD 控制器中
LCD 的持续刷新导致高功耗和高 MCU 带宽使用 MCU 接口仅在 LCD 显示变化时有效
适合菜单和界面,不适合电影、游戏、高端操作系统(需要 MPU 架构) 适合菜单和界面,不适合电影、游戏、高端操作系统。
未经 MCU 验证(实际产品中仅设计了带 LCD 的 MPU) 具有成本效益的 QVGA(240 × 320 像素)及以下。 广泛应用于家电和工业市场。

最常见的 LCD MPU 并行接口是 Intel 8080 (I80) 和 Motorola 6800 (M68) 类型。

下一节重点介绍如何将 LCD Intel 8080-like 和 Motorola 6800-like 接口与 STM32F10xxx FSMC 连接。

LCD控制器信号分为两种:数据信号控制信号

数据信号连接到 LCD 数据总线并取决于 LCD 色深(8 位、9 位、16 位、18 位或 24 位(真彩色))。

控制信号用于定义操作类型(读或写),以及操作是否包括寻址(写入命令) LCD 寄存器或显示 RAM。

下表描述了 LCD Intel 8080-like 和 Motorola 6800-like 接口的控制信号:

在这里插入图片描述

2.2 FSMC 与 LCD 模块接口的典型用途

STM32F10xxx FSMC 有四个不同的 64 MB 存储库,以支持 NOR 闪存/PSRAM 和类似的外部存储器。

外部存储器与控制器共享地址、数据和控制信号。

每个外部设备都通过唯一的芯片选择信号进行访问,但 FSMC 一次只能访问一个外部设备。 每个存储库都通过专用寄存器进行配置,包括不同的功能和时序参数。

正如我们在上面看到的,FSMC 提供了 LCD 控制器所需的所有信号。用于 LCD 接口的 FSMC 信号如下所述:

  • FSMC [D0:D15]:FSMC 数据总线:16 位宽
  • FSMC NEx:FSMC 片选
  • FSMC NOE:FSMC 输出使能
  • FSMC NWE:FSMC 写使能
  • FSMC Ax:地址线,用于在 LCD 寄存器和 LCD 显示 RAM 之间进行选择,其中 x 可以是 0 到 25

信号名称中的前缀“N”表示信号低电平有效

LCD 地址取决于使用的 FSMC NOR Flash/PSRAM bank (NEx) 和选择的地址 (Ax) 来驱动 LCD RS 引脚。

例如:NE2 和 A4,LCD 基地址为 0x6400 0000 和 0x6400 0020;NE4 和 A0,LCD 基地址为 0x6C00 0000 和 0x6C00 0002。

2.3 将FSMC连接到Intel 8080-like (I80) 接口LCD

LCD Intel 8080 类 MPU 接口基于四个控制信号和一个数据总线,其宽度取决于 MPU 接口能力。如下表所示:

LCD信号 信号描述
RS LCD 寄存器选择
D0-D15 数据 D0-D15

C

S

\overline {CS}

CS | 片选 |
|

R

D

\overline {RD}

RD | 读操作:低电平有效 |
|

W

R

\overline {WR}

WR | 写操作:低电平有效 |

FSMC 和 LCD Intel 8080 之间的典型连接如下图所示:

在这里插入图片描述

2.4 将 FSMC 连接到类似摩托罗拉 6800 (M68) 接口LCD

类似于 LCD 摩托罗拉 6800 的 MPU 接口基于四个控制信号和一个数据总线,其宽度取决于 MPU 接口能力。 如下表所示:

LCD信号 信号描述
RS LCD 寄存器选择
D0-D15 数据 D0-D15

C

S

\overline {CS}

CS | 片选 |
| E | 读写启用/禁用 |
|

R

W

R\overline {W}

RW | 读操作/写操作 |

下面两张图显示了 FSMC 和 类似 Intel 6800接口的 LCD之间的典型连接:

在这里插入图片描述

在这里插入图片描述

2.5 将LCD与STM32F10xxx的FSMC连接

STM32F101VC/D/E 和 STM32F103VC/D/E 是采用 100 引脚封装的高密度器件。 它们的 FSMC 信号数量减少。 下图描述了如何在100 引脚封装的器件上将彩色 LCD 与 FSMC 连接。

在这里插入图片描述

3、STM32CubeIDE中配置FSMC

STM32CubeIDE创建工程、系统配置、调试配置,在这里不再做介绍,请参考:

1)FSMC配置

本次使用开发板的硬件电路如下:

在这里插入图片描述

TFT-LCD驱动器芯片为ILI9325,分辨为:240x320。请根据使用的硬件进行配置。

在这里插入图片描述

FSMC的参数配置如下:

在这里插入图片描述

保存配置生成代码。

4、TFT-LCD的驱动实现

4.1 TFT-LCD驱动基本定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
#ifndef \_ILI9325\_FSMC\_H\_
#define \_ILI9325\_FSMC\_H\_

#ifdef \_\_cplusplus
extern "C" {
#endif

#include "stm32f1xx\_hal.h"
#include "stm32f1xx\_hal\_gpio.h"
#include "stm32f1xx\_hal\_rcc.h"
#include "stm32f1xx\_ll\_fsmc.h"

#include <stdlib.h>
#include <string.h>

/\*LCD FSMC命令寄存器地址\*/
#define LCD\_CMD \*(uint16\_t \*)0x60000000
/\*LCD FSMC数据寄存器地址\*/
#define LCD\_DATA \*(uint16\_t \*)0x60020000


#define MIRROR\_V 0
#define MIRROR\_H 0

/\*LCD的复位引脚配置\*/
#define LCD\_RST\_SET HAL\_GPIO\_WritePin(GPIOC, GPIO\_PIN\_13, GPIO\_PIN\_SET);
#define LCD\_RST\_RESET HAL\_GPIO\_WritePin(GPIOC, GPIO\_PIN\_13, GPIO\_PIN\_RESET);

// 颜色格式
#define BGR 1

/\*常用颜色定义\*/
#define BLACK 0x000000
#define WHITE 0xFFFFFF
#define RED HUE\_17
#define BLUE HUE\_01
#define BLUE\_D 0x0000A0 /\* 0, 0, 160 \*/
#define CYAN HUE\_05
#define YELLOW HUE\_13 /\* 255, 255, 0 \*/
#define MAGENTA HUE\_21 /\* 255, 0, 255 \*/
#define GREEN HUE\_09 /\* 0, 255, 0 \*/
#define GREEN\_D 0x007F00 /\* 0, 128, 0 \*/
#define PURPLE 0x7F007F /\* 128, 0, 128 \*/
#define TEAL 0x007F7F /\* 0, 128, 128 \*/
#define NAVY 0x00007F /\* 0, 0, 128 \*/
#define SILVER 0xBFBFBF /\* 191, 191, 191 \*/
#define GRAY 0x7F7F7F /\* 128, 128, 128 \*/
#define ORANGE 0xFFA500 /\* 255, 165, 0 \*/
#define BROWN 0xA52A2A /\* 165, 255, 42 \*/
#define MAROON 0x7F0000 /\* 128, 0, 0 \*/
#define OLIVE 0x7F7F00 /\* 128, 128, 0 \*/
#define LIME HUE\_12

#define HUE\_01 0x0000FF // 000, 000, 255 - BLUE
#define HUE\_02 0x003FFF // 000, 063, 255 -
#define HUE\_03 0x007FFF // 000, 127, 255 -
#define HUE\_04 0x00BFFF // 000, 191, 255 -
#define HUE\_05 0x00FFFF // 000, 255, 255 - CYAN
#define HUE\_06 0x00FFBF // 000, 255, 191 -
#define HUE\_07 0x00FF7F // 000, 255, 127 -
#define HUE\_08 0x00FF00 // 000, 255, 063 -
#define HUE\_09 0x00FF00 // 000, 255, 000 - GREEN
#define HUE\_10 0x3FFF00 // 063, 255, 000 -
#define HUE\_11 0x7FFF7F // 127, 255, 000 -
#define HUE\_12 0xBFFF00 // 191, 255, 000 - LIME
#define HUE\_13 0xFFFF00 // 255, 255, 000 - YELLOW
#define HUE\_14 0xFFBF00 // 255, 191, 000 -
#define HUE\_15 0xFF7F00 // 255, 127, 000 -
#define HUE\_16 0xFF3F00 // 255, 063, 000 -
#define HUE\_17 0xFF0000 // 255, 000, 000 - RED
#define HUE\_18 0xFF003F // 255, 000, 063 -
#define HUE\_19 0xFF007F // 255, 000, 127 -
#define HUE\_20 0xFF00BF // 255, 000, 191 -
#define HUE\_21 0xFF00FF // 255, 000, 255 - MAGENTA
#define HUE\_22 0xBF00FF // 191, 000, 255 -
#define HUE\_23 0x7F00FF // 127, 000, 255 -
#define HUE\_24 0x3F00FF // 063, 000, 255 -

/\*字体数据信息定义\*/
typedef struct { // Data stored PER GLYPH
uint16\_t bitmapOffset; // Pointer into GFXfont->bitmap
uint8\_t width, height; // Bitmap dimensions in pixels
uint8\_t xAdvance; // Distance to advance cursor (x axis)
int8\_t xOffset, yOffset; // Dist from cursor position to UL corner
} GFXglyph;

/\*字体定义\*/
typedef struct { // Data stored for FONT AS A WHOLE:
uint8\_t \*bitmap; // Glyph bitmaps, concatenated
GFXglyph \*glyph; // Glyph array
uint8\_t first, last; // ASCII extents
uint8\_t yAdvance; // Newline distance (y axis)
} GFXfont;

/\*生成RGB数据\*/
uint32\_t RGB(uint8\_t r, uint8\_t g, uint8\_t b);
// LCD初始化
void LCD\_Init(void);
// LCD矩形填充
void LCD\_Rect\_Fill(uint16\_t Xpos, uint16\_t Ypos, uint16\_t Width, uint16\_t Height, uint32\_t color24);
// 绘制直线
void LCD\_Line(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint8\_t size, uint32\_t color24);
// 绘制矩形
void LCD\_Rect(uint16\_t x, uint16\_t y, uint16\_t w, uint16\_t h, uint8\_t size, uint32\_t color24);
// 绘制三角形
void LCD\_Triangle(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint16\_t x3, uint16\_t y3, uint8\_t size, uint32\_t color24);
// 填充三角形
void LCD\_Triangle\_Fill(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint16\_t x3, uint16\_t y3, uint32\_t color24);
// 绘制椭圆
void LCD\_Ellipse(int16\_t x0, int16\_t y0, int16\_t rx, int16\_t ry, uint8\_t fill, uint8\_t size, uint32\_t color24);
// 绘制圆形
void LCD\_Circle(uint16\_t x, uint16\_t y, uint8\_t radius, uint8\_t fill, uint8\_t size, uint32\_t color24);
// 绘制圆角矩形
void LCD\_Rect\_Round(uint16\_t x, uint16\_t y, uint16\_t length, uint16\_t width, uint16\_t r, uint8\_t size, uint32\_t color24);
// 填充圆角矩形
void LCD\_Rect\_Round\_Fill(uint16\_t x, uint16\_t y, uint16\_t length, uint16\_t width, uint16\_t r, uint32\_t color24);
// 设置字体
void LCD\_Font(uint16\_t x, uint16\_t y, const char \*text, const GFXfont \*p_font, uint8\_t size, uint32\_t color24);
// 设置屏幕方向
void LCD\_SetOrientation(uint8\_t orientation);
//显示十字
void LCD\_Draw\_SZ(uint16\_t x, uint16\_t y, uint32\_t color);
/\*LCD寄存器\*/
#define R0 0x00
#define R1 0x01
#define R2 0x02
#define R3 0x03
#define R4 0x04
#define R5 0x05
#define R6 0x06
#define R7 0x07
#define R8 0x08
#define R9 0x09
#define R10 0x0A
#define R12 0x0C
#define R13 0x0D
#define R14 0x0E
#define R15 0x0F
#define R16 0x10
#define R17 0x11
#define R18 0x12
#define R19 0x13
#define R20 0x14
#define R21 0x15
#define R22 0x16
#define R23 0x17
#define R24 0x18
#define R25 0x19
#define R26 0x1A
#define R27 0x1B
#define R28 0x1C
#define R29 0x1D
#define R30 0x1E
#define R31 0x1F
#define R32 0x20
#define R33 0x21
#define R34 0x22
#define R36 0x24
#define R37 0x25
#define R40 0x28
#define R41 0x29
#define R43 0x2B
#define R45 0x2D
#define R48 0x30
#define R49 0x31
#define R50 0x32
#define R51 0x33
#define R52 0x34
#define R53 0x35
#define R54 0x36
#define R55 0x37
#define R56 0x38
#define R57 0x39
#define R59 0x3B
#define R60 0x3C
#define R61 0x3D
#define R62 0x3E
#define R63 0x3F
#define R64 0x40
#define R65 0x41
#define R66 0x42
#define R67 0x43
#define R68 0x44
#define R69 0x45
#define R70 0x46
#define R71 0x47
#define R72 0x48
#define R73 0x49
#define R74 0x4A
#define R75 0x4B
#define R76 0x4C
#define R77 0x4D
#define R78 0x4E
#define R79 0x4F
#define R80 0x50
#define R81 0x51
#define R82 0x52
#define R83 0x53
#define R96 0x60
#define R97 0x61
#define R106 0x6A
#define R118 0x76
#define R128 0x80
#define R129 0x81
#define R130 0x82
#define R131 0x83
#define R132 0x84
#define R133 0x85
#define R134 0x86
#define R135 0x87
#define R136 0x88
#define R137 0x89
#define R139 0x8B
#define R140 0x8C
#define R141 0x8D
#define R143 0x8F
#define R144 0x90
#define R145 0x91
#define R146 0x92
#define R147 0x93
#define R148 0x94
#define R149 0x95
#define R150 0x96
#define R151 0x97
#define R152 0x98
#define R153 0x99
#define R154 0x9A
#define R157 0x9D
#define R192 0xC0
#define R193 0xC1
#define R227 0xE3
#define R231 0xE7
#define R239 0xEF

#define R16\_VAL 0x1290
#define R17\_VAL 0x0007 //(0>0.95 1>0.90 2>0.85 3>0.80 4>0.75 5>0.70 6>Off 7>1.0
#define R18\_VAL 0x0090 | 0XE // 8->F >> 1.60->1.95 1->7 > 2.0->2.40
#define R19\_VAL 0x0F00 //F00
#define R41\_VAL 0x0005

/\*LCD背景开关\*/
#define LCD\_ON LCD\_Send\_Reg(R7, 0x0133);
#define LCD\_OFF LCD\_Send\_Reg(R7, 0x0);
/\*LCD内存比较\*/
#define LCD\_RAM\_PREPARE LCD\_Send\_Cmd(0x0022);

/\*LCD方向\*/
#define LCD\_ORIENTATION\_PORTRAIT 0x01
#define LCD\_ORIENTATION\_LANDSCAPE 0x02

// LED重置引脚
#define LCD\_RESET\_Pin GPIO\_PIN\_1
#define LCD\_RESET\_GPIO\_Port GPIOE

#ifdef \_\_cplusplus
}
#endif

#endif /\* \_ILI9325\_FSMC\_H\_ \*/


4.2 TFT-LCD寄存器操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 向LCD发送命令
inline static void LCD\_Send\_Cmd(uint16\_t cmd)
{
LCD_CMD = cmd;
}
// 向LCD发送数据
inline static void LCD\_Send\_Dat(uint16\_t dat)
{
LCD_DATA = dat;
}
// 向LCD发送命令和数据
inline static void LCD\_Send\_Reg(uint16\_t cmd, uint16\_t dat)
{
LCD_CMD = cmd;
LCD_DATA = dat;
}

// 设置光标位置
inline static void LCD\_SetCursor(uint8\_t Xpos, uint16\_t Ypos) {
LCD\_Send\_Reg(R32, Xpos);
LCD\_Send\_Reg(R33, Ypos);
}
// 在指定位置绘制单个指定颜色像素
inline static void LCD\_Pixel(uint16\_t x, uint16\_t y, uint32\_t color24)
{
LCD\_SetCursor(x, y);
LCD_RAM_PREPARE
LCD\_Send\_Dat(H24\_RGB565(BGR, color24));
}
/\*重置LCD
\* 需要指定LCD重置引脚
\*/
void LCD\_Reset(void){
HAL\_GPIO\_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_RESET);
HAL\_Delay(100);
HAL\_GPIO\_WritePin(LCD_RESET_GPIO_Port, LCD_RESET_Pin, GPIO_PIN_SET);
}

4.3 LCD初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void LCD\_Init(void) {
LCD\_Reset(); // 重置LCD
LCD\_Send\_Reg(0x07, 0); // DTE=0, D[1:0]=00, GON=0
LCD\_Send\_Reg(0x10, 0); // BT[2:0]=0, SAP=0
LCD\_Send\_Reg(0x11, 0); // VC[2:0]=0
LCD\_Send\_Reg(0x12, 0); // PON=0, VRH[3:0]=0
LCD\_Send\_Reg(0x13, 0); // VDV[4:0]=0
LCD\_Send\_Reg(0x29, 0x0); // VCM[5:0]=0
HAL\_Delay(50);
LCD\_Send\_Reg(0x10, 0x0090); // BT[2:0]=0, AP[2:0}=001, APE=1, SAP=0
LCD\_Send\_Reg(0x11, 0x0); // DC1[2:0]=000, DC0[2:0]=000
LCD\_Send\_Reg(0x12, 0x0011); // VCIRE=0, PON=1, VRH[3:0}=0001
HAL\_Delay(80);
LCD\_Send\_Reg(0x07, 0x0133); // BASEE=1, DTE=1, GON=1, D[1:0]=11
LCD\_Send\_Reg(0x10, 0x1090); // SAP=1
LCD\_Send\_Reg(0x2B, 0x000e); // frame rate 112hz
LCD\_Send\_Reg(0x0060, 0xA700); // Gate Scan Line
LCD\_Send\_Reg(0x0061, 0x0001); // REV=1
HAL\_Delay(1);
LCD\_SetOrientation(LCD_ORIENTATION_LANDSCAPE); // 设置方向
LCD\_Rect\_Fill(0, 0, 320, 240, BLACK); // 将屏幕填充为黑色

}

4.4 颜色转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint32\_t RGB(uint8\_t r, uint8\_t g, uint8\_t b)
{
return ((r & 0xFF) << 16) + ((g & 0xFF) << 8) + (b & 0xFF);
}

inline static uint16\_t H24\_RGB565(uint8\_t reverse, uint32\_t color24)
{
uint8\_t b = (color24 >> 16) & 0xFF;
uint8\_t g = (color24 >> 8) & 0xFF;
uint8\_t r = color24 & 0xFF;
if (reverse) return ((b / 8) << 11) | ((g / 4) << 5) | (r / 8);
else return ((r / 8) << 11) | ((g / 4) << 5) | (b / 8);
}

4.5 基本图元绘制
4.5.1 填充矩形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void LCD\_Rect\_Fill(uint16\_t Xpos, uint16\_t Ypos, uint16\_t Width, uint16\_t Height, uint32\_t color24)
{
uint16\_t x = 0;
uint16\_t y = 0;
while (x < Width) {
while (y < Height) {
LCD\_Pixel(Ypos + y, Xpos + x, color24);
y++;
}
y = 0;
x++;
}
}

4.5.2 绘制直线
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void LCD\_Line(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint8\_t size, uint32\_t color24)
{
int deltaX = abs(x2 - x1);
int deltaY = abs(y2 - y1);
int signX = x1 < x2 ? 1 : -1;
int signY = y1 < y2 ? 1 : -1;
int error = deltaX - deltaY;
int error2 = 0;
for (;;)
{
LCD\_Rect\_Fill(x1, y1, size, size, color24);
if (x1 == x2 && y1 == y2)
break;
error2 = error \* 2;
if (error2 > -deltaY)
{
error -= deltaY;
x1 += signX;
}
if (error2 < deltaX)
{
error += deltaX;
y1 += signY;
}
}
}

4.5.3 绘制三角形
1
2
3
4
5
6
7
void LCD\_Triangle(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2, uint16\_t x3, uint16\_t y3, uint8\_t size, uint32\_t color24)
{
LCD\_Line(x1, y1, x2, y2, size, color24);
LCD\_Line(x2, y2, x3, y3, size, color24);
LCD\_Line(x3, y3, x1, y1, size, color24);
}

4.5.4 填充三角形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#define ABS(x) ((x) > 0 ? (x) : -(x))

void LCD\_Triangle\_Fill(uint16\_t x1, uint16\_t y1, uint16\_t x2, uint16\_t y2,
uint16\_t x3, uint16\_t y3, uint32\_t color24) {
int16\_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, yinc1 =
0, yinc2 = 0, den = 0, num = 0, numadd = 0, numpixels = 0,
curpixel = 0;

deltax = ABS(x2 - x1);
deltay = ABS(y2 - y1);
x = x1;
y = y1;

if (x2 >= x1) {
xinc1 = 1;
xinc2 = 1;
} else {
xinc1 = -1;
xinc2 = -1;
}

if (y2 >= y1) {
yinc1 = 1;
yinc2 = 1;
} else {
yinc1 = -1;
yinc2 = -1;
}

if (deltax >= deltay) {
xinc1 = 0;
yinc2 = 0;
den = deltax;
num = deltax / 2;
numadd = deltay;
numpixels = deltax;
} else {
xinc2 = 0;
yinc1 = 0;
den = deltay;
num = deltay / 2;
numadd = deltax;
numpixels = deltay;
}

for (curpixel = 0; curpixel <= numpixels; curpixel++) {
LCD\_Line(x, y, x3, y3, 1, color24);

num += numadd;
if (num >= den) {
num -= den;
x += xinc1;
y += yinc1;
}
x += xinc2;
y += yinc2;
}
}

4.5.5 绘制矩形
1
2
3
4
5
6
7
8
void LCD\_Rect(uint16\_t x, uint16\_t y, uint16\_t w, uint16\_t h, uint8\_t size,
uint32\_t color24) {
LCD\_Line(x, y, x + w, y, size, color24);
LCD\_Line(x, y + h, x + w, y + h, size, color24);
LCD\_Line(x, y, x, y + h, size, color24);
LCD\_Line(x + w, y, x + w, y + h, size, color24);
}

4.5.6 绘制椭圆
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void LCD\_Ellipse(int16\_t x0, int16\_t y0, int16\_t rx, int16\_t ry, uint8\_t fill,
uint8\_t size, uint32\_t color24) {
int16\_t x, y;
int32\_t rx2 = rx \* rx;
int32\_t ry2 = ry \* ry;
int32\_t fx2 = 4 \* rx2;
int32\_t fy2 = 4 \* ry2;
int32\_t s;
if (fill) {
for (x = 0, y = ry, s = 2 \* ry2 + rx2 \* (1 - 2 \* ry);
ry2 \* x <= rx2 \* y; x++) {
LCD\_Line(x0 - x, y0 - y, x0 + x + 1 - size, y0 - y, size, color24);
LCD\_Line(x0 - x, y0 + y, x0 + x + 1 - size, y0 + y, size, color24);
if (s >= 0) {
s += fx2 \* (1 - y);
y--;
}
s += ry2 \* ((4 \* x) + 6);
}
for (x = rx, y = 0, s = 2 \* rx2 + ry2 \* (1 - 2 \* rx);
rx2 \* y <= ry2 \* x; y++) {
LCD\_Line(x0 - x, y0 - y, x0 + x + 1 - size, y0 - y, size, color24);
LCD\_Line(x0 - x, y0 + y, x0 + x + 1 - size, y0 + y, size, color24);
if (s >= 0) {
s += fy2 \* (1 - x);
x--;
}
s += rx2 \* ((4 \* y) + 6);
}
} else {
for (x = 0, y = ry, s = 2 \* ry2 + rx2 \* (1 - 2 \* ry);
ry2 \* x <= rx2 \* y; x++) {
LCD\_Rect\_Fill(x0 + x, y0 + y, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 + y, size, size, color24);
LCD\_Rect\_Fill(x0 + x, y0 - y, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 - y, size, size, color24);
if (s >= 0) {
s += fx2 \* (1 - y);
y--;
}
s += ry2 \* ((4 \* x) + 6);
}
for (x = rx, y = 0, s = 2 \* rx2 + ry2 \* (1 - 2 \* rx);
rx2 \* y <= ry2 \* x; y++) {
LCD\_Rect\_Fill(x0 + x, y0 + y, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 + y, size, size, color24);
LCD\_Rect\_Fill(x0 + x, y0 - y, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 - y, size, size, color24);
if (s >= 0) {
s += fy2 \* (1 - x);
x--;
}
s += rx2 \* ((4 \* y) + 6);
}
}
}

4.5.7 绘制圆形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
void LCD\_Circle(uint16\_t x, uint16\_t y, uint8\_t radius, uint8\_t fill,
uint8\_t size, uint32\_t color24) {
int a_, b_, P;
a_ = 0;
b_ = radius;
P = 1 - radius;
while (a_ <= b_) {
if (fill == 1) {
LCD\_Rect\_Fill(x - a_, y - b_, 2 \* a_ + 1, 2 \* b_ + 1, color24);
LCD\_Rect\_Fill(x - b_, y - a_, 2 \* b_ + 1, 2 \* a_ + 1, color24);
} else {
LCD\_Rect\_Fill(a_ + x, b_ + y, size, size, color24);
LCD\_Rect\_Fill(b_ + x, a_ + y, size, size, color24);
LCD\_Rect\_Fill(x - a_, b_ + y, size, size, color24);
LCD\_Rect\_Fill(x - b_, a_ + y, size, size, color24);
LCD\_Rect\_Fill(b_ + x, y - a_, size, size, color24);
LCD\_Rect\_Fill(a_ + x, y - b_, size, size, color24);
LCD\_Rect\_Fill(x - a_, y - b_, size, size, color24);
LCD\_Rect\_Fill(x - b_, y - a_, size, size, color24);
}
if (P < 0) {
P = (P + 3) + (2 \* a_);
a_++;
} else {
P = (P + 5) + (2 \* (a_ - b_));
a_++;
b_--;
}
}
}

void LCD\_Circle\_Helper(int16\_t x0, int16\_t y0, int16\_t r, uint8\_t cornername,
uint8\_t size, uint32\_t color24) {
int16\_t f = 1 - r;
int16\_t ddF_x = 1;
int16\_t ddF_y = -2 \* r;
int16\_t x = 0;
int16\_t y = r;

while (x < y) {
if (f >= 0) {
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
if (cornername & 0x4) {
LCD\_Rect\_Fill(x0 + x, y0 + y, size, size, color24);
LCD\_Rect\_Fill(x0 + y, y0 + x, size, size, color24);
}
if (cornername & 0x2) {
LCD\_Rect\_Fill(x0 + x, y0 - y, size, size, color24);
LCD\_Rect\_Fill(x0 + y, y0 - x, size, size, color24);
}
if (cornername & 0x8) {
LCD\_Rect\_Fill(x0 - y, y0 + x, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 + y, size, size, color24);
}
if (cornername & 0x1) {
LCD\_Rect\_Fill(x0 - y, y0 - x, size, size, color24);
LCD\_Rect\_Fill(x0 - x, y0 - y, size, size, color24);
}
}
}



4.5.8 绘制圆角矩形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
void LCD\_Rect\_Round(uint16\_t x, uint16\_t y, uint16\_t length, uint16\_t width,
uint16\_t r, uint8\_t size, uint32\_t color24) {
LCD\_Line(x + (r + 2), y, x + length + size - (r + 2), y, size, color24);
LCD\_Line(x + (r + 2), y + width - 1, x + length + size - (r + 2),
y + width - 1, size, color24);
LCD\_Line(x, y + (r + 2), x, y + width - size - (r + 2), size, color24);
LCD\_Line(x + length - 1, y + (r + 2), x + length - 1,
y + width - size - (r + 2), size, color24);

LCD\_Circle\_Helper(x + (r + 2), y + (r + 2), (r + 2), 1, size, color24);
LCD\_Circle\_Helper(x + length - (r + 2) - 1, y + (r + 2), (r + 2), 2, size,
color24);
LCD\_Circle\_Helper(x + length - (r + 2) - 1, y + width - (r + 2) - 1,
(r + 2), 4, size, color24);
LCD\_Circle\_Helper(x + (r + 2), y + width - (r + 2) - 1, (r + 2), 8, size,
color24);
}

void LCD\_Circle\_Fill\_Helper(int16\_t x0, int16\_t y0, int16\_t r,
uint8\_t cornername, int16\_t delta, uint32\_t color24) {
int16\_t f = 1 - r;
int16\_t ddF_x = 1;
int16\_t ddF_y = -2 \* r;
int16\_t x = 0;
int16\_t y = r;

while (x < y) {
if (f >= 0) {
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;

if (cornername & 0x1) {
LCD\_Line(x0 + x, y0 - y, x0 + x, y0 - y + 2 \* y + delta, 1,
color24);
LCD\_Line(x0 + y, y0 - x, x0 + y, y0 - x + 2 \* x + delta, 1,
color24);
}
if (cornername & 0x2) {
LCD\_Line(x0 - x, y0 - y, x0 - x, y0 - y + 2 \* y + delta, 1,
color24);
LCD\_Line(x0 - y, y0 - x, x0 - y, y0 - x + 2 \* x + delta, 1,
color24);
}
}
}

4.5.9 填充圆角矩形
1
2
3
4
5
6
7
8
void LCD\_Rect\_Round\_Fill(uint16\_t x, uint16\_t y, uint16\_t length,
uint16\_t width, uint16\_t r, uint32\_t color24) {
LCD\_Rect\_Fill(x + r, y, length - 2 \* r, width, color24);
LCD\_Circle\_Fill\_Helper(x + length - r - 1, y + r, r, 1, width - 2 \* r - 1,
color24);
LCD\_Circle\_Fill\_Helper(x + r, y + r, r, 2, width - 2 \* r - 1, color24);
}

4.5.10绘制字符及字体设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
static void LCD\_Char(int16\_t x, int16\_t y, const GFXglyph \*glyph,
const GFXfont \*font, uint8\_t size, uint32\_t color24) {
uint8\_t \*bitmap = font->bitmap;
uint16\_t bo = glyph->bitmapOffset;
uint8\_t bits = 0, bit = 0;
uint16\_t set_pixels = 0;
uint8\_t cur_x, cur_y;
for (cur_y = 0; cur_y < glyph->height; cur_y++) {
for (cur_x = 0; cur_x < glyph->width; cur_x++) {
if (bit == 0) {
bits = (\*(const unsigned char\*) (&bitmap[bo++]));
bit = 0x80;
}
if (bits & bit) {
set_pixels++;
} else if (set_pixels > 0) {
LCD\_Rect\_Fill(x + (glyph->xOffset + cur_x - set_pixels) \* size,
y + (glyph->yOffset + cur_y) \* size, size \* set_pixels,
size, color24);
set_pixels = 0;
}
bit >>= 1;
}
if (set_pixels > 0) {
LCD\_Rect\_Fill(x + (glyph->xOffset + cur_x - set_pixels) \* size,
y + (glyph->yOffset + cur_y) \* size, size \* set_pixels,
size, color24);
set_pixels = 0;
}
}
}

void LCD\_Font(uint16\_t x, uint16\_t y, const char \*text, const GFXfont \*p_font,
uint8\_t size, uint32\_t color24) {
int16\_t cursor_x = x;
int16\_t cursor_y = y;
GFXfont font;
memcpy((&font), (p_font), (sizeof(GFXfont)));
for (uint16\_t text_pos = 0; text_pos < strlen(text); text_pos++) {
char c = text[text_pos];
if (c == '\n') {
cursor_x = x;
cursor_y += font.yAdvance \* size;
} else if (c >= font.first && c <= font.last && c != '\r') {
GFXglyph glyph;
memcpy((&glyph), (&font.glyph[c - font.first]), (sizeof(GFXglyph)));
LCD\_Char(cursor_x, cursor_y, &glyph, &font, size, color24);
cursor_x += glyph.xAdvance \* size;
}
}
}

4.5.11 设置屏幕方向
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void LCD\_SetOrientation(uint8\_t orientation) {
uint16\_t entryMode = 0x1030;
uint16\_t outputControl = 0x0100;

switch (orientation) {
case LCD_ORIENTATION_PORTRAIT: // 垂直
entryMode = 0x1030;
outputControl = 0x0100;
break;
case LCD_ORIENTATION_LANDSCAPE: // 水平
entryMode = 0x1028;
outputControl = 0x0000;
break;
}

LCD\_Send\_Reg(0x0003, entryMode);
LCD\_Send\_Reg(0x0001, outputControl);
LCD\_SetCursor(0, 0);
}

4.6 驱动测试

main.c代码中添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/\* Private includes ----------------------------------------------------------\*/
/\* USER CODE BEGIN Includes \*/
#include "lcd/ili9325\_fsmc.h"
#include <stdio.h>
/\* USER CODE END Includes \*/


/\* Private macro -------------------------------------------------------------\*/
/\* USER CODE BEGIN PM \*/
/\*字体数据\*/
#define \_9\_Sans\_Bold &Font\_9\_Sans\_Bold
#define \_32\_Segment\_7\_Num\_Plus &Font\_32\_Segment\_7\_Num\_Plus
#define \_8\_Default &Font\_8\_Default
#define \_5\_Org &Font\_5\_Org
/\* USER CODE END PM \*/

int main(void) {
/\* USER CODE BEGIN 1 \*/

/\* USER CODE END 1 \*/

/\* MCU Configuration--------------------------------------------------------\*/

/\* Reset of all peripherals, Initializes the Flash interface and the Systick. \*/
HAL\_Init();

/\* USER CODE BEGIN Init \*/

/\* USER CODE END Init \*/

/\* Configure the system clock \*/
SystemClock\_Config();

/\* USER CODE BEGIN SysInit \*/

/\* USER CODE END SysInit \*/

/\* Initialize all configured peripherals \*/
MX\_GPIO\_Init();
MX\_USART1\_UART\_Init();
MX\_FSMC\_Init();

/\* USER CODE BEGIN 2 \*/

LCD\_Init();
printf("Start LCD Drawing\r\n");
LCD\_Rect\_Fill(0, 0, 320, 240, BLUE);
LCD\_Rect\_Fill(1, 1, 318, 238, BLACK);
LCD\_Rect\_Fill(0, 0, 160, 128, BLACK);
for (uint8\_t x = 8; x <= 160; x += 8) {
LCD\_Line(0, 0, x, 128, 1, GREEN);
}
for (uint8\_t y = 8; y <= 128; y += 8) {
LCD\_Line(0, 0, 160, y, 1, GREEN);
}
HAL\_Delay(250);

uint8\_t h = 16;
uint8\_t w = 20;
for (uint8\_t i = 0; i < 8; i++) {
LCD\_Rect(80 - w / 2, 64 - h / 2, w, h, 2, YELLOW);
h += 16;
w += 20;
}
HAL\_Delay(250);
LCD\_Rect\_Fill(0, 0, 160, 128, BLUE);
LCD\_Rect\_Fill(1, 1, 158, 126, BLACK);
LCD\_Font(5, 40, "This is\n just a Test\n TomThumb Ext\n",
_3_TomThumb_Extended, 1, YELLOW);
LCD\_Line(23, 20, 137, 20, 1, MAGENTA);
LCD\_Line(23, 21, 137, 21, 1, BLUE);
LCD\_Line(23, 21, 137, 21, 1, BLUE);
LCD\_Font(41, 10, "DISPLAY DRIVER", _5_Org, 1, MAGENTA);
LCD\_Font(45, 35, "SERIF BOLD", _9_Serif_Bold, 1, RED);
LCD\_Circle(40, 90, 30, 0, 1, RED);
LCD\_Circle(45, 90, 20, 1, 1, BLUE);
LCD\_Triangle\_Fill(5, 5, 5, 20, 25, 25, BLUE);
LCD\_Triangle(5, 5, 5, 20, 25, 25, 1, RED);
LCD\_Rect(60, 45, 30, 20, 2, GREEN);
LCD\_Rect\_Round(80, 70, 60, 25, 10, 3, WHITE);
LCD\_Rect\_Round\_Fill(80, 100, 60, 25, 10, WHITE);
LCD\_Ellipse(60, 100, 30, 20, 0, 2, YELLOW);
LCD\_Ellipse(125, 60, 25, 15, 1, 1, YELLOW);
LCD\_Font(0, 200, "1234567890", _32_Segment_7_Num_Plus, 1, RED);
LCD\_Font(10, 220, "1234567890 Default Font", _8_Default, 1, RED);
/\* USER CODE END 2 \*/

/\* Infinite loop \*/
/\* USER CODE BEGIN WHILE \*/
while (1) {
/\* USER CODE END WHILE \*/

/\* USER CODE BEGIN 3 \*/
}
/\* USER CODE END 3 \*/
}

4.7 字体数据

1)Font_8_Default

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
const uint8\_t Font_8_DefaultBitmaps[] = {
0xFD, // symbol '!'
0x5A,0xA0, // symbol
0x28,0xAF,0xCA,0x53,0xF5,0x14, // symbol '#'
0x23,0xEB,0x46,0x18,0xB5,0xF1,0x00, // symbol '$'
0x4A,0xAB,0x14,0x28,0xD5,0x52, // symbol '%'
0x21,0x45,0x1E,0xAA,0xA9,0x1B, // symbol '&'
0x58, // symbol '''
0x2A,0x49,0x24,0x44, // symbol '('
0x88,0x92,0x49,0x50, // symbol ')'
0x25,0x5C,0xEA,0x90, // symbol '\*'
0x21,0x09,0xF2,0x10,0x80, // symbol '+'
0x58, // symbol ','
0xF8, // symbol '-'
0x80, // symbol '.'
0x08,0x84,0x22,0x11,0x08,0x44,0x00, // symbol '/'
0x74,0x63,0x18,0xC6,0x2E, // digit '0'
0x59,0x24,0x97, // digit '1'
0x74,0x62,0x22,0x22,0x1F, // digit '2'
0x74,0x42,0x60,0x86,0x2E, // digit '3'
0x11,0x94,0xA9,0x3C,0x43, // digit '4'
0xFC,0x21,0xE0,0x86,0x2E, // digit '5'
0x74,0xA1,0xE8,0xC6,0x2E, // digit '6'
0xFC,0x84,0x42,0x10,0x84, // digit '7'
0x74,0x62,0xE8,0xC6,0x2E, // digit '8'
0x74,0x63,0x17,0x85,0x2E, // digit '9'
0x84, // symbol ':'
0x8C, // symbol ';'
0x08,0x88,0x88,0x20,0x82,0x08, // symbol '<'
0xF8,0x01,0xF0, // symbol '='
0x82,0x08,0x20,0x88,0x88,0x80, // symbol '>'
0x74,0x62,0x22,0x10,0x04, // symbol '?'
0x74,0x67,0x5A,0xDE,0x0F, // symbol '@'
0x20,0x83,0x14,0x51,0xE4,0xB3, // eng 'A'
0xF2,0x52,0xE4,0xA5,0x3E, // eng 'B'
0x7C,0x61,0x08,0x42,0x2E, // eng 'C'
0xF2,0x52,0x94,0xA5,0x3E, // eng 'D'
0xFA,0x54,0xE5,0x21,0x3F, // eng 'E'
0xFA,0x54,0xE5,0x21,0x1C, // eng 'F'
0x39,0x28,0x20,0x9E,0x24,0x8C, // eng 'G'
0xCD,0x24,0x9E,0x49,0x24,0xB3, // eng 'H'
0xF9,0x08,0x42,0x10,0x9F, // eng 'I'
0x7C,0x41,0x04,0x10,0x41,0x24,0xE0, // eng 'J'
0xED,0x25,0x18,0x51,0x44,0xBB, // eng 'K'
0xE1,0x04,0x10,0x41,0x04,0x7F, // eng 'L'
0xDE,0xF7,0xBA,0xD6,0xB5, // eng 'M'
0xDD,0x26,0x9A,0x59,0x64,0xBA, // eng 'N'
0x74,0x63,0x18,0xC6,0x2E, // eng 'O'
0xF2,0x52,0xE4,0x21,0x1C, // eng 'P'
0x74,0x63,0x18,0xF6,0x6E,0x18, // eng 'Q'
0xF1,0x24,0x9C,0x51,0x24,0xBB, // eng 'R'
0x7C,0x60,0xC1,0x06,0x3E, // eng 'S'
0xFD,0x48,0x42,0x10,0x8E, // eng 'T'
0xCD,0x24,0x92,0x49,0x24,0x8C, // eng 'U'
0xCD,0x24,0x94,0x50,0xC2,0x08, // eng 'V'
0xAD,0x6A,0xE5,0x29,0x4A, // eng 'W'
0xDA,0x94,0x42,0x29,0x5B, // eng 'X'
0xDA,0x94,0x42,0x10,0x8E, // eng 'Y'
0xFC,0x84,0x42,0x21,0x3F, // eng 'Z'
0xF2,0x49,0x24,0x9C, // symbol '['
0x88,0x84,0x42,0x22,0x10, // symbol '\'
0xE4,0x92,0x49,0x3C, // symbol ']'
0x54, // symbol '^'
0xFC, // symbol '\_'
0x80, // symbol '`'
0x64,0x9D,0x27,0x80, // eng 'a'
0xC2,0x10,0xE4,0xA5,0x2E, // eng 'b'
0x79,0x88,0x70, // eng 'c'
0x30,0x84,0xE9,0x4A,0x4F, // eng 'd'
0x69,0xF8,0x70, // eng 'e'
0x3A,0x11,0xE4,0x21,0x1E, // eng 'f'
0x7C,0x99,0x0F,0x45,0xC0, // eng 'g'
0xC1,0x04,0x1C,0x49,0x24,0xBB, // eng 'h'
0x40,0x64,0x97, // eng 'i'
0x10,0x03,0x11,0x11,0x1E, // eng 'j'
0xC1,0x04,0x17,0x51,0xC4,0xBB, // eng 'k'
0xE1,0x08,0x42,0x10,0x9F, // eng 'l'
0xF5,0x6B,0x5A,0x80, // eng 'm'
0xF1,0x24,0x92,0xEC, // eng 'n'
0x69,0x99,0x60, // eng 'o'
0xF2,0x52,0x97,0x23,0x80, // eng 'p'
0x74,0xA5,0x27,0x08,0xE0, // eng 'q'
0xDB,0x10,0x8E,0x00, // eng 'r'
0xF8,0x61,0xF0, // eng 's'
0x44,0xE4,0x44,0x30, // eng 't'
0xD9,0x24,0x92,0x3C, // eng 'u'
0xED,0x25,0x0C,0x20, // eng 'v'
0xAD,0x5C,0xA5,0x00, // eng 'w'
0xDA,0x88,0xAD,0x80, // eng 'x'
0xED,0x25,0x0C,0x20,0x8C,0x00, // eng 'y'
0xF2,0x44,0xF0, // eng 'z'
0x69,0x28,0x92,0x4C, // symbol '{'
0xFF,0xF0, // symbol '|'
0xC9,0x22,0x92,0x58, // symbol '}'
0x42,0x91,0x80 // symbol '~'
};

const GFXglyph Font_8_DefaultGlyphs[] = {
{ 0, 0, 0, 8, 0, 0 }, // SPC
{ 0, 1, 8, 8, 2, -9 }, // symbol '!'
{ 1, 4, 3, 8, 1, -10 }, // symbol
{ 3, 6, 8, 8, 0, -9 }, // symbol '#'
{ 9, 5, 10, 8, 0, -10 }, // symbol '$'
{ 16, 6, 8, 8, 0, -9 }, // symbol '%'
{ 22, 6, 8, 8, 0, -9 }, // symbol '&'
{ 28, 2, 3, 8, 0, -10 }, // symbol '''
{ 29, 3, 10, 8, 3, -10 }, // symbol '('
{ 33, 3, 10, 8, 1, -10 }, // symbol ')'
{ 37, 5, 6, 8, 0, -8 }, // symbol '\*'
{ 41, 5, 7, 8, 0, -9 }, // symbol '+'
{ 46, 2, 3, 8, 0, -2 }, // symbol ','
{ 47, 5, 1, 8, 0, -6 }, // symbol '-'
{ 48, 1, 1, 8, 1, -2 }, // symbol '.'
{ 49, 5, 10, 8, 0, -10 }, // symbol '/'
{ 56, 5, 8, 8, 0, -9 }, // digit '0'
{ 61, 3, 8, 8, 1, -9 }, // digit '1'
{ 64, 5, 8, 8, 0, -9 }, // digit '2'
{ 69, 5, 8, 8, 0, -9 }, // digit '3'
{ 74, 5, 8, 8, 0, -9 }, // digit '4'
{ 79, 5, 8, 8, 0, -9 }, // digit '5'
{ 84, 5, 8, 8, 0, -9 }, // digit '6'
{ 89, 5, 8, 8, 0, -9 }, // digit '7'
{ 94, 5, 8, 8, 0, -9 }, // digit '8'
{ 99, 5, 8, 8, 0, -9 }, // digit '9'
{ 104, 1, 6, 8, 2, -7 }, // symbol ':'
{ 105, 1, 6, 8, 2, -6 }, // symbol ';'
{ 106, 5, 9, 8, 1, -10 }, // symbol '<'
{ 112, 5, 4, 8, 0, -7 }, // symbol '='
{ 115, 5, 9, 8, 1, -10 }, // symbol '>'
{ 121, 5, 8, 8, 0, -9 }, // symbol '?'
{ 126, 5, 8, 8, 0, -9 }, // symbol '@'
{ 131, 6, 8, 8, 0, -9 }, // eng 'A'
{ 137, 5, 8, 8, 0, -9 }, // eng 'B'
{ 142, 5, 8, 8, 0, -9 }, // eng 'C'
{ 147, 5, 8, 8, 0, -9 }, // eng 'D'
{ 152, 5, 8, 8, 0, -9 }, // eng 'E'
{ 157, 5, 8, 8, 0, -9 }, // eng 'F'
{ 162, 6, 8, 8, 0, -9 }, // eng 'G'
{ 168, 6, 8, 8, 0, -9 }, // eng 'H'
{ 174, 5, 8, 8, 0, -9 }, // eng 'I'
{ 179, 6, 9, 8, 0, -9 }, // eng 'J'
{ 186, 6, 8, 8, 0, -9 }, // eng 'K'
{ 192, 6, 8, 8, 0, -9 }, // eng 'L'
{ 198, 5, 8, 8, 0, -9 }, // eng 'M'
{ 203, 6, 8, 8, 0, -9 }, // eng 'N'
{ 209, 5, 8, 8, 0, -9 }, // eng 'O'
{ 214, 5, 8, 8, 0, -9 }, // eng 'P'
{ 219, 5, 9, 8, 0, -9 }, // eng 'Q'
{ 225, 6, 8, 8, 0, -9 }, // eng 'R'
{ 231, 5, 8, 8, 0, -9 }, // eng 'S'
{ 236, 5, 8, 8, 0, -9 }, // eng 'T'
{ 241, 6, 8, 8, 0, -9 }, // eng 'U'
{ 247, 6, 8, 8, 0, -9 }, // eng 'V'
{ 253, 5, 8, 8, 0, -9 }, // eng 'W'
{ 258, 5, 8, 8, 0, -9 }, // eng 'X'
{ 263, 5, 8, 8, 0, -9 }, // eng 'Y'
{ 268, 5, 8, 8, 0, -9 }, // eng 'Z'
{ 273, 3, 10, 8, 2, -10 }, // symbol '['
{ 277, 4, 9, 8, 1, -10 }, // symbol '\'
{ 282, 3, 10, 8, 1, -10 }, // symbol ']'
{ 286, 3, 2, 8, 1, -10 }, // symbol '^'
{ 287, 6, 1, 8, 0, 0 }, // symbol '\_'
{ 288, 1, 1, 8, 2, -10 }, // symbol '`'
{ 289, 5, 5, 8, 1, -6 }, // eng 'a'
{ 293, 5, 8, 8, 0, -9 }, // eng 'b'
{ 298, 4, 5, 8, 1, -6 }, // eng 'c'
{ 301, 5, 8, 8, 1, -9 }, // eng 'd'
{ 306, 4, 5, 8, 1, -6 }, // eng 'e'
{ 309, 5, 8, 8, 1, -9 }, // eng 'f'
{ 314, 5, 7, 8, 1, -6 }, // eng 'g'
{ 319, 6, 8, 8, 0, -9 }, // eng 'h'
{ 325, 3, 8, 8, 1, -9 }, // eng 'i'
{ 328, 4, 10, 8, 0, -9 }, // eng 'j'
{ 333, 6, 8, 8, 0, -9 }, // eng 'k'
{ 339, 5, 8, 8, 0, -9 }, // eng 'l'
{ 344, 5, 5, 8, 0, -6 }, // eng 'm'
{ 348, 6, 5, 8, 0, -6 }, // eng 'n'
{ 352, 4, 5, 8, 1, -6 }, // eng 'o'
{ 355, 5, 7, 8, 0, -6 }, // eng 'p'
{ 360, 5, 7, 8, 1, -6 }, // eng 'q'
{ 365, 5, 5, 8, 0, -6 }, // eng 'r'
{ 369, 4, 5, 8, 1, -6 }, // eng 's'
{ 372, 4, 7, 8, 1, -8 }, // eng 't'
{ 376, 6, 5, 8, 0, -6 }, // eng 'u'
{ 380, 6, 5, 8, 0, -6 }, // eng 'v'
{ 384, 5, 5, 8, 0, -6 }, // eng 'w'
{ 388, 5, 5, 8, 0, -6 }, // eng 'x'
{ 392, 6, 7, 8, 0, -6 }, // eng 'y'
{ 398, 4, 5, 8, 1, -6 }, // eng 'z'
{ 401, 3, 10, 8, 2, -10 }, // symbol '{'
{ 405, 1, 12, 8, 3, -11 }, // symbol '|'
{ 407, 3, 10, 8, 1, -10 }, // symbol '}'
{ 411, 6, 3, 8, 0, -11 } // symbol '~'
};

const GFXfont Font_8_Default = {
(uint8\_t \*)Font_8_DefaultBitmaps,
(GFXglyph \*)Font_8_DefaultGlyphs,
32, 126, 12};


2)Font_5_Org

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
const uint8\_t Font_5_OrgBitmaps[] = {
0xE8, 0xA0, 0x57, 0xD5, 0xF5, 0x00, 0xFD, 0x3E, 0x5F, 0x80, 0x88, 0x88,
0x88, 0x80, 0xF4, 0xBF, 0x2E, 0x80, 0x80, 0x6A, 0x40, 0x95, 0x80, 0xAA,
0x80, 0x5D, 0x00, 0xC0, 0xF0, 0x80, 0x08, 0x88, 0x88, 0x00, 0xFC, 0x63,
0x1F, 0x80, 0xF8, 0xF8, 0x7F, 0x0F, 0x80, 0xF8, 0x7E, 0x1F, 0x80, 0x8C,
0x7E, 0x10, 0x80, 0xFC, 0x3E, 0x1F, 0x80, 0xFC, 0x3F, 0x1F, 0x80, 0xF8,
0x42, 0x10, 0x80, 0xFC, 0x7F, 0x1F, 0x80, 0xFC, 0x7E, 0x1F, 0x80, 0x90,
0xB0, 0x2A, 0x22, 0xF0, 0xF0, 0x88, 0xA8, 0xF8, 0x4E, 0x02, 0x00, 0xFD,
0x6F, 0x0F, 0x80, 0xFC, 0x7F, 0x18, 0x80, 0xF4, 0x7D, 0x1F, 0x00, 0xFC,
0x21, 0x0F, 0x80, 0xF4, 0x63, 0x1F, 0x00, 0xFC, 0x3F, 0x0F, 0x80, 0xFC,
0x3F, 0x08, 0x00, 0xFC, 0x2F, 0x1F, 0x80, 0x8C, 0x7F, 0x18, 0x80, 0xF9,
0x08, 0x4F, 0x80, 0x78, 0x85, 0x2F, 0x80, 0x8D, 0xB1, 0x68, 0x80, 0x84,
0x21, 0x0F, 0x80, 0xFD, 0x6B, 0x5A, 0x80, 0xFC, 0x63, 0x18, 0x80, 0xFC,
0x63, 0x1F, 0x80, 0xFC, 0x7F, 0x08, 0x00, 0xFC, 0x63, 0x3F, 0x80, 0xFC,
0x7F, 0x29, 0x00, 0xFC, 0x3E, 0x1F, 0x80, 0xF9, 0x08, 0x42, 0x00, 0x8C,
0x63, 0x1F, 0x80, 0x8C, 0x62, 0xA2, 0x00, 0xAD, 0x6B, 0x5F, 0x80, 0x8A,
0x88, 0xA8, 0x80, 0x8C, 0x54, 0x42, 0x00, 0xF8, 0x7F, 0x0F, 0x80, 0xEA,
0xC0, 0x82, 0x08, 0x20, 0x80, 0xD5, 0xC0, 0x54, 0xF8, 0x80, 0xF1, 0xFF,
0x8F, 0x99, 0xF0, 0xF8, 0x8F, 0x1F, 0x99, 0xF0, 0xFF, 0x8F, 0x6B, 0xA4,
0xF9, 0x9F, 0x10, 0x8F, 0x99, 0x90, 0xF0, 0x55, 0xC0, 0x8A, 0xF9, 0x90,
0xF8, 0xFD, 0x63, 0x10, 0xF9, 0x99, 0xF9, 0x9F, 0xF9, 0x9F, 0x80, 0xF9,
0x9F, 0x20, 0xF8, 0x88, 0x47, 0x1F, 0x27, 0xC8, 0x42, 0x00, 0x99, 0x9F,
0x99, 0x97, 0x8C, 0x6B, 0xF0, 0x96, 0x69, 0x99, 0x9F, 0x10, 0x2E, 0x8F,
0x2B, 0x22, 0xF8, 0x89, 0xA8, 0x0F, 0xE0 };

const GFXglyph Font_5_OrgGlyphs[] = {
{ 0, 0, 0, 6, 0, 1 }, // 0x20 ' '
{ 0, 1, 5, 2, 0, -4 }, // 0x21 '!'
{ 1, 3, 1, 4, 0, -4 }, // 0x22 '"'
{ 2, 5, 5, 6, 0, -4 }, // 0x23 '#'
{ 6, 5, 5, 6, 0, -4 }, // 0x24 '$'
{ 10, 5, 5, 6, 0, -4 }, // 0x25 '%'
{ 14, 5, 5, 6, 0, -4 }, // 0x26 '&'
{ 18, 1, 1, 2, 0, -4 }, // 0x27 '''
{ 19, 2, 5, 3, 0, -4 }, // 0x28 '('
{ 21, 2, 5, 3, 0, -4 }, // 0x29 ')'
{ 23, 3, 3, 4, 0, -3 }, // 0x2A '\*'
{ 25, 3, 3, 4, 0, -3 }, // 0x2B '+'
{ 27, 1, 2, 2, 0, 0 }, // 0x2C ','
{ 28, 4, 1, 5, 0, -2 }, // 0x2D '-'
{ 29, 1, 1, 2, 0, 0 }, // 0x2E '.'
{ 30, 5, 5, 6, 0, -4 }, // 0x2F '/'
{ 34, 5, 5, 6, 0, -4 }, // 0x30 '0'
{ 38, 1, 5, 2, 0, -4 }, // 0x31 '1'
{ 39, 5, 5, 6, 0, -4 }, // 0x32 '2'
{ 43, 5, 5, 6, 0, -4 }, // 0x33 '3'
{ 47, 5, 5, 6, 0, -4 }, // 0x34 '4'
{ 51, 5, 5, 6, 0, -4 }, // 0x35 '5'
{ 55, 5, 5, 6, 0, -4 }, // 0x36 '6'
{ 59, 5, 5, 6, 0, -4 }, // 0x37 '7'
{ 63, 5, 5, 6, 0, -4 }, // 0x38 '8'
{ 67, 5, 5, 6, 0, -4 }, // 0x39 '9'
{ 71, 1, 4, 2, 0, -3 }, // 0x3A ':'
{ 72, 1, 4, 2, 0, -3 }, // 0x3B ';'
{ 73, 3, 5, 4, 0, -4 }, // 0x3C '<'
{ 75, 4, 3, 5, 0, -3 }, // 0x3D '='
{ 77, 3, 5, 4, 0, -4 }, // 0x3E '>'
{ 79, 5, 5, 6, 0, -4 }, // 0x3F '?'
{ 83, 5, 5, 6, 0, -4 }, // 0x40 '@'
{ 87, 5, 5, 6, 0, -4 }, // 0x41 'A'
{ 91, 5, 5, 6, 0, -4 }, // 0x42 'B'
{ 95, 5, 5, 6, 0, -4 }, // 0x43 'C'
{ 99, 5, 5, 6, 0, -4 }, // 0x44 'D'
{ 103, 5, 5, 6, 0, -4 }, // 0x45 'E'
{ 107, 5, 5, 6, 0, -4 }, // 0x46 'F'
{ 111, 5, 5, 6, 0, -4 }, // 0x47 'G'
{ 115, 5, 5, 6, 0, -4 }, // 0x48 'H'
{ 119, 5, 5, 6, 0, -4 }, // 0x49 'I'
{ 123, 5, 5, 6, 0, -4 }, // 0x4A 'J'
{ 127, 5, 5, 6, 0, -4 }, // 0x4B 'K'
{ 131, 5, 5, 6, 0, -4 }, // 0x4C 'L'
{ 135, 5, 5, 6, 0, -4 }, // 0x4D 'M'
{ 139, 5, 5, 6, 0, -4 }, // 0x4E 'N'
{ 143, 5, 5, 6, 0, -4 }, // 0x4F 'O'
{ 147, 5, 5, 6, 0, -4 }, // 0x50 'P'
{ 151, 5, 5, 6, 0, -4 }, // 0x51 'Q'
{ 155, 5, 5, 6, 0, -4 }, // 0x52 'R'
{ 159, 5, 5, 6, 0, -4 }, // 0x53 'S'
{ 163, 5, 5, 6, 0, -4 }, // 0x54 'T'
{ 167, 5, 5, 6, 0, -4 }, // 0x55 'U'
{ 171, 5, 5, 6, 0, -4 }, // 0x56 'V'
{ 175, 5, 5, 6, 0, -4 }, // 0x57 'W'
{ 179, 5, 5, 6, 0, -4 }, // 0x58 'X'
{ 183, 5, 5, 6, 0, -4 }, // 0x59 'Y'
{ 187, 5, 5, 6, 0, -4 }, // 0x5A 'Z'
{ 191, 2, 5, 3, 0, -4 }, // 0x5B '['
{ 193, 5, 5, 6, 0, -4 }, // 0x5C '\'
{ 197, 2, 5, 3, 0, -4 }, // 0x5D ']'
{ 199, 3, 2, 4, 0, -4 }, // 0x5E '^'
{ 200, 5, 1, 6, 0, 1 }, // 0x5F '\_'
{ 201, 1, 1, 2, 0, -4 }, // 0x60 '`'
{ 202, 4, 4, 5, 0, -3 }, // 0x61 'a'
{ 204, 4, 5, 5, 0, -4 }, // 0x62 'b'
{ 207, 4, 4, 5, 0, -3 }, // 0x63 'c'
{ 209, 4, 5, 5, 0, -4 }, // 0x64 'd'
{ 212, 4, 4, 5, 0, -3 }, // 0x65 'e'
{ 214, 3, 5, 4, 0, -4 }, // 0x66 'f'
{ 216, 4, 5, 5, 0, -3 }, // 0x67 'g'
{ 219, 4, 5, 5, 0, -4 }, // 0x68 'h'
{ 222, 1, 4, 2, 0, -3 }, // 0x69 'i'
{ 223, 2, 5, 3, 0, -3 }, // 0x6A 'j'
{ 225, 4, 5, 5, 0, -4 }, // 0x6B 'k'
{ 228, 1, 5, 2, 0, -4 }, // 0x6C 'l'
{ 229, 5, 4, 6, 0, -3 }, // 0x6D 'm'
{ 232, 4, 4, 5, 0, -3 }, // 0x6E 'n'
{ 234, 4, 4, 5, 0, -3 }, // 0x6F 'o'
{ 236, 4, 5, 5, 0, -3 }, // 0x70 'p'
{ 239, 4, 5, 5, 0, -3 }, // 0x71 'q'
{ 242, 4, 4, 5, 0, -3 }, // 0x72 'r'
{ 244, 4, 4, 5, 0, -3 }, // 0x73 's'
{ 246, 5, 5, 6, 0, -4 }, // 0x74 't'
{ 250, 4, 4, 5, 0, -3 }, // 0x75 'u'
{ 252, 4, 4, 5, 0, -3 }, // 0x76 'v'
{ 254, 5, 4, 6, 0, -3 }, // 0x77 'w'
{ 257, 4, 4, 5, 0, -3 }, // 0x78 'x'
{ 259, 4, 5, 5, 0, -3 }, // 0x79 'y'
{ 262, 4, 4, 5, 0, -3 }, // 0x7A 'z'
{ 264, 3, 5, 4, 0, -4 }, // 0x7B '{'
{ 266, 1, 5, 2, 0, -4 }, // 0x7C '|'
{ 267, 3, 5, 4, 0, -4 }, // 0x7D '}'
{ 269, 5, 3, 6, 0, -3 } }; // 0x7E '~'

const GFXfont Font_5_Org = {
(uint8\_t \*)Font_5_OrgBitmaps,
(GFXglyph \*)Font_5_OrgGlyphs,
0x20, 0x7E, 7 };

// Approx. 943 bytes


3)Font_9_Serif_Bold

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
const uint8\_t Font_9_Serif_BoldBitmaps[] = {
0xFF, 0xF4, 0x92, 0x1F, 0xF0, 0xCF, 0x3C, 0xE3, 0x88, 0x13, 0x09, 0x84,
0xC2, 0x47, 0xF9, 0x90, 0xC8, 0x4C, 0xFF, 0x13, 0x09, 0x0C, 0x86, 0x40,
0x10, 0x38, 0xD6, 0x92, 0xD2, 0xF0, 0x7C, 0x3E, 0x17, 0x93, 0x93, 0xD6,
0x7C, 0x10, 0x3C, 0x21, 0xCF, 0x0E, 0x24, 0x30, 0xA0, 0xC5, 0x03, 0x34,
0xE7, 0x26, 0x40, 0xB9, 0x04, 0xC4, 0x23, 0x30, 0x8C, 0x84, 0x1C, 0x0F,
0x00, 0xCC, 0x06, 0x60, 0x3E, 0x00, 0xE7, 0x8F, 0x18, 0x9C, 0x8C, 0xE4,
0xE3, 0xC7, 0x9E, 0x3C, 0x72, 0xFD, 0xE0, 0xFF, 0x80, 0x32, 0x44, 0xCC,
0xCC, 0xCC, 0xC4, 0x62, 0x10, 0x84, 0x22, 0x33, 0x33, 0x33, 0x32, 0x64,
0x80, 0x31, 0x6B, 0xB1, 0x8E, 0xD6, 0x8C, 0x00, 0x08, 0x04, 0x02, 0x01,
0x0F, 0xF8, 0x40, 0x20, 0x10, 0x08, 0x00, 0xDF, 0x95, 0x00, 0xFF, 0xFF,
0x80, 0x0C, 0x21, 0x86, 0x10, 0xC3, 0x08, 0x61, 0x84, 0x30, 0xC0, 0x1C,
0x33, 0x98, 0xDC, 0x7E, 0x3F, 0x1F, 0x8F, 0xC7, 0xE3, 0xB1, 0x98, 0xC3,
0x80, 0x08, 0xE3, 0x8E, 0x38, 0xE3, 0x8E, 0x38, 0xE3, 0xBF, 0x3C, 0x3F,
0x23, 0xC0, 0xE0, 0x70, 0x30, 0x38, 0x18, 0x18, 0x18, 0x5F, 0xDF, 0xE0,
0x7C, 0x8E, 0x0E, 0x0E, 0x0C, 0x1E, 0x07, 0x03, 0x03, 0x02, 0xE6, 0xF8,
0x06, 0x0E, 0x0E, 0x3E, 0x2E, 0x4E, 0x8E, 0x8E, 0xFF, 0xFF, 0x0E, 0x0E,
0x3F, 0x7E, 0x40, 0x40, 0xF8, 0xFC, 0x1E, 0x06, 0x02, 0x02, 0xE4, 0xF8,
0x07, 0x1C, 0x30, 0x70, 0xFC, 0xE6, 0xE7, 0xE7, 0xE7, 0x67, 0x66, 0x3C,
0x7F, 0x3F, 0xA0, 0xD0, 0x40, 0x60, 0x30, 0x10, 0x18, 0x0C, 0x04, 0x06,
0x03, 0x00, 0x3C, 0xC6, 0xC6, 0xC6, 0xFC, 0x7C, 0x3E, 0xCF, 0xC7, 0xC7,
0xC6, 0x7C, 0x3E, 0x33, 0xB8, 0xDC, 0x7E, 0x3F, 0x1D, 0xCE, 0x7F, 0x07,
0x07, 0x0F, 0x1C, 0x00, 0xFF, 0x80, 0x3F, 0xE0, 0xFF, 0x80, 0x37, 0xE5,
0x40, 0x00, 0x00, 0x70, 0x78, 0x78, 0x78, 0x38, 0x03, 0x80, 0x3C, 0x03,
0xC0, 0x30, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0xC0, 0x3C, 0x03,
0xC0, 0x1C, 0x01, 0xC1, 0xE1, 0xE1, 0xE0, 0xE0, 0x00, 0x00, 0x3D, 0x9F,
0x3E, 0x70, 0xE1, 0x04, 0x08, 0x00, 0x70, 0xE1, 0xC0, 0x0F, 0x81, 0x83,
0x18, 0xC4, 0x89, 0x9C, 0x4C, 0xE4, 0x67, 0x22, 0x39, 0x22, 0x4F, 0xE3,
0x00, 0x0C, 0x10, 0x1F, 0x00, 0x02, 0x00, 0x30, 0x01, 0xC0, 0x0E, 0x00,
0xB8, 0x05, 0xC0, 0x4F, 0x02, 0x38, 0x3F, 0xE1, 0x07, 0x18, 0x3D, 0xE3,
0xF0, 0xFF, 0x87, 0x1C, 0xE3, 0x9C, 0x73, 0x9C, 0x7F, 0x0E, 0x71, 0xC7,
0x38, 0xE7, 0x1C, 0xE7, 0x7F, 0xC0, 0x1F, 0x26, 0x1D, 0xC1, 0xB0, 0x1E,
0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x0E, 0x04, 0xE1, 0x0F, 0xC0, 0xFF,
0x0E, 0x71, 0xC7, 0x38, 0x77, 0x0E, 0xE1, 0xDC, 0x3B, 0x87, 0x70, 0xCE,
0x39, 0xC6, 0x7F, 0x80, 0xFF, 0xCE, 0x19, 0xC1, 0x38, 0x87, 0x30, 0xFE,
0x1C, 0xC3, 0x88, 0x70, 0x2E, 0x0D, 0xC3, 0x7F, 0xE0, 0xFF, 0xDC, 0x37,
0x05, 0xC4, 0x73, 0x1F, 0xC7, 0x31, 0xC4, 0x70, 0x1C, 0x07, 0x03, 0xE0,
0x1F, 0x23, 0x0E, 0x70, 0x6E, 0x02, 0xE0, 0x0E, 0x00, 0xE1, 0xFE, 0x0E,
0x60, 0xE7, 0x0E, 0x38, 0xE0, 0xF8, 0xF9, 0xF7, 0x0E, 0x70, 0xE7, 0x0E,
0x70, 0xE7, 0xFE, 0x70, 0xE7, 0x0E, 0x70, 0xE7, 0x0E, 0x70, 0xEF, 0x9F,
0xFB, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0, 0x1F, 0x0E, 0x0E, 0x0E,
0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0xCE, 0xCC, 0x78, 0xF9, 0xF3,
0x82, 0x1C, 0x20, 0xE2, 0x07, 0x20, 0x3F, 0x01, 0xDC, 0x0E, 0x70, 0x73,
0xC3, 0x8F, 0x1C, 0x3D, 0xF3, 0xF0, 0xF8, 0x0E, 0x01, 0xC0, 0x38, 0x07,
0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x2E, 0x09, 0xC3, 0x7F, 0xE0, 0xF8,
0x0F, 0x3C, 0x1E, 0x3C, 0x1E, 0x2E, 0x2E, 0x2E, 0x2E, 0x26, 0x4E, 0x27,
0x4E, 0x27, 0x4E, 0x23, 0x8E, 0x23, 0x8E, 0x21, 0x0E, 0x71, 0x1F, 0xF0,
0xEE, 0x09, 0xE1, 0x3E, 0x25, 0xE4, 0x9E, 0x91, 0xD2, 0x1E, 0x43, 0xC8,
0x39, 0x03, 0x70, 0x20, 0x1F, 0x83, 0x0C, 0x70, 0xEE, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x77, 0x0E, 0x30, 0xC1, 0xF8, 0xFF, 0x1C,
0xE7, 0x1D, 0xC7, 0x71, 0xDC, 0xE7, 0xF1, 0xC0, 0x70, 0x1C, 0x07, 0x03,
0xE0, 0x0F, 0x83, 0x9C, 0x70, 0xE6, 0x06, 0xE0, 0x7E, 0x07, 0xE0, 0x7E,
0x07, 0xE0, 0x76, 0x06, 0x30, 0xC1, 0x98, 0x0F, 0x00, 0x78, 0x03, 0xE0,
0xFF, 0x07, 0x38, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x38, 0x7E, 0x07, 0x70,
0x77, 0x87, 0x3C, 0x71, 0xEF, 0x8F, 0x39, 0x47, 0xC1, 0xC0, 0xF0, 0x7C,
0x3E, 0x0F, 0x83, 0xC3, 0xC6, 0xBC, 0xFF, 0xFC, 0xE3, 0x8E, 0x10, 0xE0,
0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x01, 0xF0,
0xF8, 0xEE, 0x09, 0xC1, 0x38, 0x27, 0x04, 0xE0, 0x9C, 0x13, 0x82, 0x70,
0x4E, 0x08, 0xE2, 0x0F, 0x80, 0xFC, 0x7B, 0xC1, 0x0E, 0x08, 0x70, 0x81,
0xC4, 0x0E, 0x20, 0x7A, 0x01, 0xD0, 0x0E, 0x80, 0x38, 0x01, 0xC0, 0x04,
0x00, 0x20, 0x00, 0xFD, 0xFB, 0xDC, 0x38, 0x43, 0x87, 0x10, 0xE1, 0xC4,
0x38, 0xF2, 0x07, 0x2E, 0x81, 0xD3, 0xA0, 0x34, 0x70, 0x0E, 0x1C, 0x03,
0x87, 0x00, 0x60, 0x80, 0x10, 0x20, 0xFE, 0xF3, 0xC3, 0x0F, 0x10, 0x39,
0x00, 0xF0, 0x03, 0x80, 0x1E, 0x01, 0x70, 0x09, 0xC0, 0x8F, 0x08, 0x3D,
0xF3, 0xF0, 0xFC, 0x7B, 0xC1, 0x8E, 0x08, 0x38, 0x81, 0xE8, 0x07, 0x40,
0x1C, 0x00, 0xE0, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x1F, 0x00, 0xFF, 0xD8,
0x72, 0x1E, 0x43, 0x80, 0xE0, 0x1C, 0x07, 0x01, 0xC0, 0x38, 0x2E, 0x0F,
0x83, 0x7F, 0xE0, 0xFC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0xC1,
0x06, 0x18, 0x20, 0xC3, 0x04, 0x18, 0x60, 0x83, 0x0C, 0xF3, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33, 0xF0, 0x18, 0x1C, 0x34, 0x26, 0x62, 0x43, 0xC1,
0xFF, 0x80, 0xC6, 0x30, 0x7C, 0x63, 0xB1, 0xC0, 0xE1, 0xF3, 0x3B, 0x9D,
0xCE, 0xFF, 0x80, 0xF0, 0x1C, 0x07, 0x01, 0xDC, 0x7B, 0x9C, 0x77, 0x1D,
0xC7, 0x71, 0xDC, 0x77, 0x39, 0x3C, 0x3C, 0xED, 0x9F, 0x0E, 0x1C, 0x38,
0x39, 0x3C, 0x07, 0x80, 0xE0, 0x38, 0xEE, 0x77, 0xB8, 0xEE, 0x3B, 0x8E,
0xE3, 0xB8, 0xE7, 0x78, 0xEF, 0x3C, 0x66, 0xE6, 0xFE, 0xE0, 0xE0, 0xE0,
0x72, 0x3C, 0x3E, 0xED, 0xC7, 0xC7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC7,
0xC0, 0x31, 0xDF, 0xBF, 0x7E, 0xE7, 0x90, 0x60, 0xFC, 0xFE, 0x0C, 0x17,
0xC0, 0xF0, 0x1C, 0x07, 0x01, 0xDC, 0x7B, 0x9C, 0xE7, 0x39, 0xCE, 0x73,
0x9C, 0xE7, 0x3B, 0xFF, 0x73, 0x9D, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0,
0x1C, 0x71, 0xCF, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x7D, 0xBE,
0xF0, 0x1C, 0x07, 0x01, 0xCE, 0x71, 0x1C, 0x87, 0x41, 0xF8, 0x77, 0x1C,
0xE7, 0x1B, 0xEF, 0xF3, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9D, 0xF0, 0xF7,
0x38, 0xF7, 0xB9, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7,
0x39, 0xCE, 0xFF, 0xFE, 0xF7, 0x1E, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7,
0x39, 0xCE, 0xFF, 0xC0, 0x3E, 0x31, 0xB8, 0xFC, 0x7E, 0x3F, 0x1F, 0x8E,
0xC6, 0x3E, 0x00, 0xF7, 0x1E, 0xE7, 0x1D, 0xC7, 0x71, 0xDC, 0x77, 0x1D,
0xCE, 0x7F, 0x1C, 0x07, 0x01, 0xC0, 0xF8, 0x00, 0x3C, 0x9C, 0xEE, 0x3B,
0x8E, 0xE3, 0xB8, 0xEE, 0x39, 0xCE, 0x3F, 0x80, 0xE0, 0x38, 0x0E, 0x07,
0xC0, 0xF7, 0x7B, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xF8, 0x7E, 0x73,
0xC7, 0x8E, 0x39, 0xB0, 0x10, 0xCF, 0x9C, 0x71, 0xC7, 0x1C, 0x71, 0xD3,
0x80, 0xF7, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x3F,
0xC0, 0xFB, 0xB8, 0x8C, 0x87, 0x43, 0xC0, 0xE0, 0x70, 0x10, 0x08, 0x00,
0xF7, 0xB6, 0x31, 0x73, 0xA3, 0x3A, 0x3D, 0xA3, 0xDC, 0x18, 0xC1, 0x88,
0x10, 0x80, 0xFB, 0xB8, 0x8E, 0x83, 0x81, 0xC0, 0xF0, 0x98, 0xCE, 0xEF,
0x80, 0xF7, 0x62, 0x72, 0x34, 0x34, 0x3C, 0x18, 0x18, 0x10, 0x10, 0x10,
0xE0, 0xE0, 0xFF, 0x1C, 0x70, 0xE3, 0x87, 0x1C, 0x71, 0xFE, 0x19, 0x8C,
0x63, 0x18, 0xCC, 0x61, 0x8C, 0x63, 0x18, 0xC3, 0xFF, 0xF8, 0xC3, 0x18,
0xC6, 0x31, 0x86, 0x33, 0x18, 0xC6, 0x31, 0x98, 0xF0, 0x8E };

const GFXglyph Font_9_Serif_BoldGlyphs[] = {
{ 0, 0, 0, 5, 0, 1 }, // 0x20 ' '
{ 0, 3, 12, 6, 1, -11 }, // 0x21 '!'
{ 5, 6, 5, 10, 2, -11 }, // 0x22 '"'
{ 9, 9, 13, 9, 0, -12 }, // 0x23 '#'
{ 24, 8, 14, 9, 1, -12 }, // 0x24 '$'
{ 38, 14, 12, 18, 2, -11 }, // 0x25 '%'
{ 59, 13, 12, 15, 1, -11 }, // 0x26 '&'
{ 79, 2, 5, 5, 1, -11 }, // 0x27 '''
{ 81, 4, 15, 6, 1, -11 }, // 0x28 '('
{ 89, 4, 15, 6, 1, -11 }, // 0x29 ')'
{ 97, 7, 7, 9, 2, -11 }, // 0x2A '\*'
{ 104, 9, 9, 12, 1, -8 }, // 0x2B '+'
{ 115, 3, 6, 4, 1, -2 }, // 0x2C ','
{ 118, 4, 2, 6, 1, -4 }, // 0x2D '-'
{ 119, 3, 3, 4, 1, -2 }, // 0x2E '.'
{ 121, 6, 13, 5, 0, -11 }, // 0x2F '/'
{ 131, 9, 12, 9, 0, -11 }, // 0x30 '0'
{ 145, 6, 12, 9, 1, -11 }, // 0x31 '1'
{ 154, 9, 12, 9, 0, -11 }, // 0x32 '2'
{ 168, 8, 12, 9, 0, -11 }, // 0x33 '3'
{ 180, 8, 12, 9, 1, -11 }, // 0x34 '4'
{ 192, 8, 12, 9, 1, -11 }, // 0x35 '5'
{ 204, 8, 12, 9, 1, -11 }, // 0x36 '6'
{ 216, 9, 12, 9, 0, -11 }, // 0x37 '7'
{ 230, 8, 12, 9, 1, -11 }, // 0x38 '8'
{ 242, 9, 12, 9, 0, -11 }, // 0x39 '9'
{ 256, 3, 9, 6, 1, -8 }, // 0x3A ':'
{ 260, 3, 12, 6, 2, -8 }, // 0x3B ';'
{ 265, 10, 10, 12, 1, -9 }, // 0x3C '<'
{ 278, 10, 5, 12, 1, -6 }, // 0x3D '='
{ 285, 10, 10, 12, 1, -8 }, // 0x3E '>'
{ 298, 7, 12, 9, 1, -11 }, // 0x3F '?'
{ 309, 13, 12, 17, 2, -11 }, // 0x40 '@'
{ 329, 13, 12, 13, 0, -11 }, // 0x41 'A'
{ 349, 11, 12, 12, 0, -11 }, // 0x42 'B'
{ 366, 11, 12, 13, 1, -11 }, // 0x43 'C'
{ 383, 11, 12, 13, 1, -11 }, // 0x44 'D'
{ 400, 11, 12, 12, 1, -11 }, // 0x45 'E'
{ 417, 10, 12, 11, 1, -11 }, // 0x46 'F'
{ 432, 12, 12, 14, 1, -11 }, // 0x47 'G'
{ 450, 12, 12, 14, 1, -11 }, // 0x48 'H'
{ 468, 5, 12, 7, 1, -11 }, // 0x49 'I'
{ 476, 8, 14, 9, 0, -11 }, // 0x4A 'J'
{ 490, 13, 12, 14, 1, -11 }, // 0x4B 'K'
{ 510, 11, 12, 12, 1, -11 }, // 0x4C 'L'
{ 527, 16, 12, 17, 0, -11 }, // 0x4D 'M'
{ 551, 11, 12, 13, 1, -11 }, // 0x4E 'N'
{ 568, 12, 12, 14, 1, -11 }, // 0x4F 'O'
{ 586, 10, 12, 11, 1, -11 }, // 0x50 'P'
{ 601, 12, 15, 14, 1, -11 }, // 0x51 'Q'
{ 624, 12, 12, 13, 1, -11 }, // 0x52 'R'
{ 642, 8, 12, 10, 1, -11 }, // 0x53 'S'
{ 654, 12, 12, 12, 0, -11 }, // 0x54 'T'
{ 672, 11, 12, 13, 1, -11 }, // 0x55 'U'
{ 689, 13, 13, 13, 0, -11 }, // 0x56 'V'
{ 711, 18, 12, 18, 0, -11 }, // 0x57 'W'
{ 738, 13, 12, 13, 0, -11 }, // 0x58 'X'
{ 758, 13, 12, 13, 0, -11 }, // 0x59 'Y'
{ 778, 11, 12, 12, 1, -11 }, // 0x5A 'Z'
{ 795, 4, 15, 6, 1, -11 }, // 0x5B '['
{ 803, 6, 13, 5, 0, -11 }, // 0x5C '\'
{ 813, 4, 15, 6, 1, -11 }, // 0x5D ']'
{ 821, 8, 7, 10, 1, -11 }, // 0x5E '^'
{ 828, 9, 1, 9, 0, 3 }, // 0x5F '\_'
{ 830, 4, 3, 6, 0, -12 }, // 0x60 '`'
{ 832, 9, 9, 9, 0, -8 }, // 0x61 'a'
{ 843, 10, 12, 10, 0, -11 }, // 0x62 'b'
{ 858, 7, 9, 8, 0, -8 }, // 0x63 'c'
{ 866, 10, 12, 10, 0, -11 }, // 0x64 'd'
{ 881, 8, 9, 8, 0, -8 }, // 0x65 'e'
{ 890, 7, 12, 7, 0, -11 }, // 0x66 'f'
{ 901, 7, 13, 9, 1, -8 }, // 0x67 'g'
{ 913, 10, 12, 10, 0, -11 }, // 0x68 'h'
{ 928, 5, 12, 5, 0, -11 }, // 0x69 'i'
{ 936, 6, 16, 7, 0, -11 }, // 0x6A 'j'
{ 948, 10, 12, 10, 0, -11 }, // 0x6B 'k'
{ 963, 5, 12, 5, 0, -11 }, // 0x6C 'l'
{ 971, 15, 9, 15, 0, -8 }, // 0x6D 'm'
{ 988, 10, 9, 10, 0, -8 }, // 0x6E 'n'
{ 1000, 9, 9, 9, 0, -8 }, // 0x6F 'o'
{ 1011, 10, 13, 10, 0, -8 }, // 0x70 'p'
{ 1028, 10, 13, 10, 0, -8 }, // 0x71 'q'
{ 1045, 8, 9, 8, 0, -8 }, // 0x72 'r'
{ 1054, 5, 9, 7, 1, -8 }, // 0x73 's'
{ 1060, 6, 11, 6, 0, -10 }, // 0x74 't'
{ 1069, 10, 9, 10, 0, -8 }, // 0x75 'u'
{ 1081, 9, 9, 9, 0, -8 }, // 0x76 'v'
{ 1092, 12, 9, 13, 0, -8 }, // 0x77 'w'
{ 1106, 9, 9, 9, 0, -8 }, // 0x78 'x'
{ 1117, 8, 13, 9, 0, -8 }, // 0x79 'y'
{ 1130, 7, 9, 8, 1, -8 }, // 0x7A 'z'
{ 1138, 5, 16, 7, 0, -12 }, // 0x7B '{'
{ 1148, 1, 13, 4, 1, -11 }, // 0x7C '|'
{ 1150, 5, 16, 7, 2, -12 }, // 0x7D '}'
{ 1160, 8, 2, 9, 1, -4 } }; // 0x7E '~'

const GFXfont Font_9_Serif_Bold = {
(uint8\_t \*)Font_9_Serif_BoldBitmaps,
(GFXglyph \*)Font_9_Serif_BoldGlyphs,
0x20, 0x7E, 22 };

// Approx. 1834 bytes


4)Font_32_Segment_7_Num_Plus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const uint8\_t Font_32_Segment_7_Num_PlusBitmaps[] = {
0x38,0xFB,0xFF,0xFF,0xEF,0x8E,0x00, // char46
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0xC3,0x3F,0xFF,
0xBC,0xF0,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,
0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,0xFF,
0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,0x00,0xFF,0xF0,0x00,0x1F,
0xFC,0x00,0x00,0xFE,0x00,0x00,0x07,0x00,0x00,0x00,0x40,0x00,0x00,0x04,0x00,0x00,
0x00,0xE0,0x00,0x00,0x7F,0x00,0x00,0x3F,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,
0x00,0x7F,0xF8,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,
0x80,0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,
0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0x78,0x00,0x03,0xC6,0x7F,0xFF,0x30,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char48
0x31,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3C,0x30,0x40,0x00,
0x33,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xE3,0x00, // char49
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0xC0,0x3F,0xFF,
0xBC,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,
0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,
0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,
0x80,0x00,0x00,0xF0,0x7F,0xFF,0x86,0x1F,0xFF,0xFC,0x4F,0xFF,0xFF,0xE4,0xFF,0xFF,
0xF8,0xE7,0xFF,0xFC,0x1F,0x00,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,
0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,
0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,
0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0x78,0x00,0x00,0x06,0x7F,0xFF,0x00,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char50
0x0F,0xFF,0xE0,0x0F,0xFF,0xF8,0x0F,0xFF,0xFE,0x03,0xFF,0xFE,0xC0,0xFF,0xFE,0xF0,
0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80,0x00,0x0F,0xC0,
0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,
0x00,0x3F,0x00,0x00,0x1F,0x80,0x00,0x0F,0xC0,0x00,0x07,0xE0,0x00,0x00,0xF1,0xFF,
0xFE,0x19,0xFF,0xFF,0xC7,0xFF,0xFF,0xF8,0xFF,0xFF,0xF8,0x1F,0xFF,0xF1,0x80,0x00,
0x03,0xC0,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00,0x00,0xFC,0x00,0x00,
0x7E,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80,0x00,0x0F,0xC0,0x00,0x07,0xE0,0x00,0x03,
0xF0,0x00,0x01,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x3F,0x00,0x00,0x0F,
0x07,0xFF,0xF3,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x7F,0xFF,0x00, // char51
0x00,0x00,0x01,0x86,0x00,0x00,0x79,0xE0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,
0x7F,0xF8,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,
0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,0xFF,
0x00,0x01,0xFF,0xE0,0x00,0x3F,0xF8,0x00,0x01,0xFC,0xFF,0xFF,0x0E,0x3F,0xFF,0xF8,
0x9F,0xFF,0xFF,0xC1,0xFF,0xFF,0xF0,0x0F,0xFF,0xF8,0xC0,0x00,0x00,0x78,0x00,0x00,
0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,
0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,
0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x07,
0x80,0x00,0x00,0x60, // char52
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0x03,0x3F,0xFF,
0x80,0xF0,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,
0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,
0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,
0x7C,0x00,0x00,0x0E,0x7F,0xFF,0x81,0x1F,0xFF,0xFC,0x0F,0xFF,0xFF,0xE0,0xFF,0xFF,
0xF8,0x07,0xFF,0xFC,0x60,0x00,0x00,0x3C,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,
0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,
0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,
0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x03,0xC0,0x7F,0xFF,0x30,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char53
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0x03,0x3F,0xFF,
0x80,0xF0,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,
0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,
0x00,0x00,0x07,0xE0,0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,
0x7C,0x00,0x00,0x0E,0x7F,0xFF,0x81,0x1F,0xFF,0xFC,0x0F,0xFF,0xFF,0xE4,0xFF,0xFF,
0xF8,0xE7,0xFF,0xFC,0x7F,0x00,0x00,0x3F,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,
0x00,0x7F,0xF8,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,
0x80,0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,
0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0x78,0x00,0x03,0xC6,0x7F,0xFF,0x30,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char54
0x3F,0xFF,0x80,0xFF,0xFF,0x83,0xFF,0xFF,0x83,0xFF,0xFE,0xC3,0xFF,0xFB,0xC0,0x00,
0x0F,0xC0,0x00,0x1F,0x80,0x00,0x3F,0x00,0x00,0x7E,0x00,0x00,0xFC,0x00,0x01,0xF8,
0x00,0x03,0xF0,0x00,0x07,0xE0,0x00,0x0F,0xC0,0x00,0x1F,0x80,0x00,0x3F,0x00,0x00,
0x7E,0x00,0x00,0xFC,0x00,0x01,0xF8,0x00,0x00,0xF0,0x00,0x00,0x60,0x00,0x00,0x40,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x3C,0x00,0x01,0xF8,0x00,0x03,
0xF0,0x00,0x07,0xE0,0x00,0x0F,0xC0,0x00,0x1F,0x80,0x00,0x3F,0x00,0x00,0x7E,0x00,
0x00,0xFC,0x00,0x01,0xF8,0x00,0x03,0xF0,0x00,0x07,0xE0,0x00,0x0F,0xC0,0x00,0x1F,
0x80,0x00,0x3F,0x00,0x00,0x3C,0x00,0x00,0x30, // char55
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0xC3,0x3F,0xFF,
0xBC,0xF0,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,
0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,0xFF,
0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,0x00,0xFF,0xF0,0x00,0x1F,
0xFC,0x00,0x00,0xFE,0x7F,0xFF,0x87,0x1F,0xFF,0xFC,0x4F,0xFF,0xFF,0xE4,0xFF,0xFF,
0xF8,0xE7,0xFF,0xFC,0x7F,0x00,0x00,0x3F,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,
0x00,0x7F,0xF8,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,
0x80,0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,
0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0x78,0x00,0x03,0xC6,0x7F,0xFF,0x30,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char56
0x03,0xFF,0xF8,0x00,0xFF,0xFF,0x80,0x3F,0xFF,0xF8,0x03,0xFF,0xFE,0xC3,0x3F,0xFF,
0xBC,0xF0,0x00,0x0F,0xFF,0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,
0x00,0xFF,0xF0,0x00,0x1F,0xFE,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF8,0x00,0x0F,0xFF,
0x00,0x01,0xFF,0xE0,0x00,0x3F,0xFC,0x00,0x07,0xFF,0x80,0x00,0xFF,0xF0,0x00,0x1F,
0xFC,0x00,0x00,0xFE,0x7F,0xFF,0x87,0x1F,0xFF,0xFC,0x4F,0xFF,0xFF,0xE0,0xFF,0xFF,
0xF8,0x07,0xFF,0xFC,0x60,0x00,0x00,0x3C,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,
0x00,0x7E,0x00,0x00,0x0F,0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x07,0xE0,
0x00,0x00,0xFC,0x00,0x00,0x1F,0x80,0x00,0x03,0xF0,0x00,0x00,0x7E,0x00,0x00,0x0F,
0xC0,0x00,0x01,0xF8,0x00,0x00,0x3F,0x00,0x00,0x03,0xC0,0x7F,0xFF,0x30,0x1F,0xFF,
0xF0,0x07,0xFF,0xFF,0x00,0x7F,0xFF,0xC0,0x07,0xFF,0xF0,0x00, // char57
0x38,0xFB,0xFF,0xFF,0xEF,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFD,0xF1,0xC0 // char58
};

const GFXglyph Font_32_Segment_7_Num_PlusGlyphs[] = {
{ 0, 7, 7, 32, 14, -11 }, // char46
{ 7, 0, 0, 32, 0, 0 }, // char47
{ 7, 27, 46, 32, 2, -47 }, // char48
{ 163, 6, 39, 32, 23, -44 }, // char49
{ 193, 27, 46, 32, 2, -47 }, // char50
{ 349, 25, 46, 32, 4, -47 }, // char51
{ 493, 27, 39, 32, 2, -44 }, // char52
{ 625, 27, 46, 32, 2, -47 }, // char53
{ 781, 27, 46, 32, 2, -47 }, // char54
{ 937, 23, 42, 32, 6, -47 }, // char55
{ 1058, 27, 46, 32, 2, -47 }, // char56
{ 1214, 27, 46, 32, 2, -47 }, // char57
{ 1370, 7, 28, 32, 14, -37 } // char58
};

const GFXfont Font_32_Segment_7_Num_Plus = {
(uint8\_t \*)Font_32_Segment_7_Num_PlusBitmaps,
(GFXglyph \*)Font_32_Segment_7_Num_PlusGlyphs,
46, 58, 50};

5、STM32F1与STM32CubeIDE系列文章

5.1 STM32F1与STM32CubeIDE快速入门

5.2 STM32F1与STM32CubeIDE编程实例

文章来源: https://iotsmart.blog.csdn.net/article/details/124835147