为OLED屏增加GUI支持3:字库

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

环境:

主机:WIN10

开发环境:MDK5.13

MCU:STM32F103

源代码及步骤:

1.用工具FontCvt.exe(emwin自带工具)选择需要的字体,字号,以及需要的字符(汉字,ASCII)并生成对应的.c文件


2.将此.c文件转换为指定格式。以下为微软雅黑20号字体的转换后源文件:

FHZ20.c

/**
* Copyright (c), 2015-2025
* @file FHZ20.c
* @brief 20号汉字字库,字体微软雅黑
* @author jdh
* @date 2015/9/6
* @date 2015/9/7
* @date 2015/9/9
*//*********************************************************************
*                           头文件
**********************************************************************/#include "font.h"/*********************************************************************
*                           静态变量
**********************************************************************//**
* @brief 字符:空
*/unsigned char Hz20_0020[ 20] = { /* code 0020, SPACE */________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________};unsigned char Hz20_002E[ 20] = { /* code 002E, FULL STOP */________,________,________,________,________,________,________,________,________,________,________,________,________,________,_XX_____,_XX_____,________,________,________,________};unsigned char Hz20_0030[ 20] = { /* code 0030, DIGIT ZERO */________,________,________,________,________,___XXX__,__X__X__,_X____X_,_X____X_,_X____X_,_X____X_,_X____X_,_X____X_,_X____X_,__X__X__,__XXX___,________,________,________,________};unsigned char Hz20_0031[ 20] = { /* code 0031, DIGIT ONE */________,________,________,________,________,____X___,__XXX___,_XX_X___,____X___,____X___,____X___,____X___,____X___,____X___,____X___,____X___,________,________,________,________};unsigned char Hz20_0032[ 20] = { /* code 0032, DIGIT TWO */________,________,________,________,________,__XXXX__,_X___XX_,______X_,______X_,______X_,_____X__,___XX___,__XX____,_XX_____,_X______,_XXXXXX_,________,________,________,________};unsigned char Hz20_0033[ 20] = { /* code 0033, DIGIT THREE */________,________,________,________,________,__XXX___,_X___X__,_____X__,_____X__,____XX__,__XX____,____XX__,_____X__,_____X__,_X__XX__,__XXX___,________,________,________,________};unsigned char Hz20_0034[ 20] = { /* code 0034, DIGIT FOUR */________,________,________,________,________,_____X__,____XX__,___XXX__,___X_X__,__X__X__,_XX__X__,XX___X__,XXXXXXXX,_____X__,_____X__,_____X__,________,________,________,________};unsigned char Hz20_0035[ 20] = { /* code 0035, DIGIT FIVE */________,________,________,________,________,_XXXXX__,_X______,_X______,_X______,_X______,_XXXXX__,_____XX_,______X_,______X_,_____XX_,_XXXX___,________,________,________,________};unsigned char Hz20_0036[ 20] = { /* code 0036, DIGIT SIX */________,________,________,________,________,___XXX__,__X_____,_X______,_X______,_X_XXX__,_XX__XX_,_X____X_,_X____X_,_X____X_,__X__X__,___XXX__,________,________,________,________};unsigned char Hz20_0037[ 20] = { /* code 0037, DIGIT SEVEN */________,________,________,________,________,XXXXXXX_,_____X__,_____X__,____X___,____X___,___X____,___X____,___X____,__X_____,__X_____,__X_____,________,________,________,________};unsigned char Hz20_0038[ 20] = { /* code 0038, DIGIT EIGHT */________,________,________,________,________,__XXXX__,_XX__XX_,_X____X_,_X____X_,__X__X__,__XXXX__,_XX__XX_,_X____X_,_X____X_,_XX__XX_,__XXXX__,________,________,________,________};unsigned char Hz20_0039[ 20] = { /* code 0039, DIGIT NINE */________,________,________,________,________,__XXXX__,__X__X__,_X____X_,_X____X_,_X____X_,_XX__XX_,__XXX_X_,______X_,_____X__,__X__X__,__XXX___,________,________,________,________};unsigned char Hz20_006D[ 40] = { /* code 006D, LATIN SMALL LETTER M */________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,________,_X_XXX__,XXX_____,_XX__XXX,___X____,_X____X_,___X____,_X____X_,___X____,_X____X_,___X____,_X____X_,___X____,_X____X_,___X____,_X____X_,___X____,________,________,________,________,________,________,________,________};unsigned char Hz20_CBD1[ 40] = { /* code 641C */________,________,________,________,________,________,________,________,________,________,__X___XX,X_______,__X__XX_,XXXXX___,XXXXXX__,X___X___,__X__XXX,X_XXX___,__X__X__,X___X___,__XX_XXX,XXXXX___,_XXXX___,X_______,X_X__XXX,XXXX____,__X___X_,__XX____,__X____X,_XX_____,__X____X,XX______,XXX_XXX_,__XXXX__,________,________,________,________,________,________};unsigned char Hz20_CBF7[ 40] = { /* code 7D22 */________,________,________,________,________,________,________,________,________,________,_______X,________,_XXXXXXX,XXXXX___,_______X,________,_XXXXXXX,XXXXX___,_X___X__,XX__X___,_X_XXXXX,X___X___,______X_,_XX_____,____XX__,__XX____,__XXXXXX,XXXXX___,____X__X,_X______,__XX___X,__XX____,XX__XXXX,____X___,________,________,________,________,________,________};/**
* @brief 字符:正
*/unsigned char Hz20_D5FD[ 40] = { /* code 6B63 */________,________,________,________,________,________,________,________,________,________,_XXXXXXX,XXXXX___,_______X,________,_______X,________,__X____X,________,__X____X,________,__X____X,XXXXX___,__X____X,________,__X____X,________,__X____X,________,__X____X,________,__X____X,________,XXXXXXXX,XXXXXX__,________,________,________,________,________,________};/**
* @brief 字符:常
*/unsigned char Hz20_B3A3[ 40] = { /* code 5E38 */________,________,________,________,________,________,________,________,________,________,__XX__X_,__XX____,___XX_X_,_XX_____,_XXXXXXX,XXXXX___,_X______,____X___,_X_XXXXX,XXX_X___,___X____,__X_____,___XXXXX,XXX_____,_______X,________,__XXXXXX,XXXX____,__X____X,___X____,__X____X,_XXX____,_______X,________,________,________,________,________,________,________};/**
* @brief 字符:超
*/unsigned char Hz20_B3AC[ 40] = { /* code 8D85 */________,________,________,________,________,________,________,________,________,________,___X__XX,XXXXX___,___X____,X___X___,XXXXXX__,X___X___,___X___X,____X___,___X__X_,_XXX____,XXXXXX__,________,___X___X,XXXXX___,_X_X___X,____X___,_X_XXX_X,____X___,_X_X___X,XXXXX___,X_XX____,________,X__XXXXX,XXXXXX__,________,________,________,________,________,________};/**
* @brief 字符:距
*/unsigned char Hz20_BEE0[ 40] = { /* code 8DDD */________,________,________,________,________,________,________,________,________,________,_XXXX__X,XXXXXX__,_X__X__X,________,_X__X__X,________,_XXXX__X,________,_X_X___X,XXXXX___,___X___X,____X___,_X_XXX_X,____X___,_X_X___X,XXXXX___,_X_X___X,____X___,_X_X___X,________,_X_XXX_X,________,XXX____X,XXXXXX__,________,________,________,________,________,________};/**
* @brief 字符:失
*/unsigned char Hz20_CAA7[ 40] = { /* code 5931 */________,________,________,________,________,________,________,________,________,________,___X___X,________,___X___X,________,__XXXXXX,XXXXX___,__X____X,________,_X_____X,________,_______X,________,_XXXXXXX,XXXXXX__,______XX,________,______X_,X_______,____XX__,_X______,__XX____,__XX____,XX______,____XX__,________,________,________,________,________,________};/**
* @brief 字符:踪
*/unsigned char Hz20_D7D9[ 40] = { /* code 8E2A */________,________,________,________,________,________,________,________,________,________,_XXXX___,_XX_____,_X__X_XX,XXXXXX__,_X__X_X_,_____X__,_XXXX___,________,_X_X___X,XXXXX___,___X____,________,_X_XX_XX,XXXXXX__,_X_X____,_X______,_X_X___X,_X_X____,_X_X__X_,_X__X___,XXX_XX__,_X___X__,_______X,XX______,________,________,________,________,________,________};/*********************************************************************
*                           函数
**********************************************************************//**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t GB18030_20X20_get_height(void)
{return 20;
}/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t GB18030_20X20_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr)
{ switch (ch){//空case 0x0020:{font_type->width = 4;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0020;break;}//.case 0x002E:{font_type->width = 3;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_002E;break;}//0case 0x0030:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0030;break;}//1case 0x0031:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0031;break;}//2case 0x0032:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0032;break;}//3case 0x0033:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0033;break;}//4case 0x0034:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0034;break;}//5case 0x0035:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0035;break;}//6case 0x0036:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0036;break;}//7case 0x0037:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0037;break;}//8case 0x0038:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0038;break;}//9case 0x0039:{font_type->width = 8;font_type->height = 20;font_type->size = 20;*addr = (uint32_t)Hz20_0039;break;}//mcase 0x006D:{font_type->width = 13;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_006D;break;}//搜case 0xCBD1:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_CBD1;break;}//索case 0xCBF7:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_CBF7;break;}//正case 0xD5FD:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_D5FD;break;}//常case 0xB3A3:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_B3A3;break;}//超case 0xB3AC:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_B3AC;break;}//距case 0xBEE0:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_BEE0;break;}//失case 0xCAA7:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_CAA7;break;}//踪case 0xD7D9:{font_type->width = 14;font_type->height = 20;font_type->size = 40;*addr = (uint32_t)Hz20_D7D9;break;}default:{return 0;}}return 1;
}


3.将对应的字体宏定义填入字库文件头文件中

/**
* @brief 17*17点阵GB18030汉字
*/

#define GB18030_20X20    2



font.h

/**
* Copyright (c), 2015-2025
* @file font.h
* @brief 字库文件头文件
* @author jdh
* @date 2015/9/6
* @date 2015/9/7
*/#ifndef _FONT_H_
#define _FONT_H_/*********************************************************************
*                           头文件
**********************************************************************/#include "inf_lcd.h"/*********************************************************************
*                           宏定义
**********************************************************************//**
* @brief 点阵字符宏定义
*/#define   ________    0x0
#define _______X    0x1
#define ______X_    0x2
#define ______XX    0x3
#define _____X__    0x4
#define _____X_X    0x5
#define _____XX_    0x6
#define _____XXX    0x7
#define ____X___    0x8
#define ____X__X    0x9
#define ____X_X_    0xa
#define ____X_XX    0xb
#define ____XX__    0xc
#define ____XX_X    0xd
#define ____XXX_    0xe
#define ____XXXX    0xf
#define ___X____    0x10
#define ___X___X    0x11
#define ___X__X_    0x12
#define ___X__XX    0x13
#define ___X_X__    0x14
#define ___X_X_X    0x15
#define ___X_XX_    0x16
#define ___X_XXX    0x17
#define ___XX___    0x18
#define ___XX__X    0x19
#define ___XX_X_    0x1a
#define ___XX_XX    0x1b
#define ___XXX__    0x1c
#define ___XXX_X    0x1d
#define ___XXXX_    0x1e
#define ___XXXXX    0x1f
#define __X_____    0x20
#define __X____X    0x21
#define __X___X_    0x22
#define __X___XX    0x23
#define __X__X__    0x24
#define __X__X_X    0x25
#define __X__XX_    0x26
#define __X__XXX    0x27
#define __X_X___    0x28
#define __X_X__X    0x29
#define __X_X_X_    0x2a
#define __X_X_XX    0x2b
#define __X_XX__    0x2c
#define __X_XX_X    0x2d
#define __X_XXX_    0x2e
#define __X_XXXX    0x2f
#define __XX____    0x30
#define __XX___X    0x31
#define __XX__X_    0x32
#define __XX__XX    0x33
#define __XX_X__    0x34
#define __XX_X_X    0x35
#define __XX_XX_    0x36
#define __XX_XXX    0x37
#define __XXX___    0x38
#define __XXX__X    0x39
#define __XXX_X_    0x3a
#define __XXX_XX    0x3b
#define __XXXX__    0x3c
#define __XXXX_X    0x3d
#define __XXXXX_    0x3e
#define __XXXXXX    0x3f
#define _X______    0x40
#define _X_____X    0x41
#define _X____X_    0x42
#define _X____XX    0x43
#define _X___X__    0x44
#define _X___X_X    0x45
#define _X___XX_    0x46
#define _X___XXX    0x47
#define _X__X___    0x48
#define _X__X__X    0x49
#define _X__X_X_    0x4a
#define _X__X_XX    0x4b
#define _X__XX__    0x4c
#define _X__XX_X    0x4d
#define _X__XXX_    0x4e
#define _X__XXXX    0x4f
#define _X_X____    0x50
#define _X_X___X    0x51
#define _X_X__X_    0x52
#define _X_X__XX    0x53
#define _X_X_X__    0x54
#define _X_X_X_X    0x55
#define _X_X_XX_    0x56
#define _X_X_XXX    0x57
#define _X_XX___    0x58
#define _X_XX__X    0x59
#define _X_XX_X_    0x5a
#define _X_XX_XX    0x5b
#define _X_XXX__    0x5c
#define _X_XXX_X    0x5d
#define _X_XXXX_    0x5e
#define _X_XXXXX    0x5f
#define _XX_____    0x60
#define _XX____X    0x61
#define _XX___X_    0x62
#define _XX___XX    0x63
#define _XX__X__    0x64
#define _XX__X_X    0x65
#define _XX__XX_    0x66
#define _XX__XXX    0x67
#define _XX_X___    0x68
#define _XX_X__X    0x69
#define _XX_X_X_    0x6a
#define _XX_X_XX    0x6b
#define _XX_XX__    0x6c
#define _XX_XX_X    0x6d
#define _XX_XXX_    0x6e
#define _XX_XXXX    0x6f
#define _XXX____    0x70
#define _XXX___X    0x71
#define _XXX__X_    0x72
#define _XXX__XX    0x73
#define _XXX_X__    0x74
#define _XXX_X_X    0x75
#define _XXX_XX_    0x76
#define _XXX_XXX    0x77
#define _XXXX___    0x78
#define _XXXX__X    0x79
#define _XXXX_X_    0x7a
#define _XXXX_XX    0x7b
#define _XXXXX__    0x7c
#define _XXXXX_X    0x7d
#define _XXXXXX_    0x7e
#define _XXXXXXX    0x7f
#define X_______    0x80
#define X______X    0x81
#define X_____X_    0x82
#define X_____XX    0x83
#define X____X__    0x84
#define X____X_X    0x85
#define X____XX_    0x86
#define X____XXX    0x87
#define X___X___    0x88
#define X___X__X    0x89
#define X___X_X_    0x8a
#define X___X_XX    0x8b
#define X___XX__    0x8c
#define X___XX_X    0x8d
#define X___XXX_    0x8e
#define X___XXXX    0x8f
#define X__X____    0x90
#define X__X___X    0x91
#define X__X__X_    0x92
#define X__X__XX    0x93
#define X__X_X__    0x94
#define X__X_X_X    0x95
#define X__X_XX_    0x96
#define X__X_XXX    0x97
#define X__XX___    0x98
#define X__XX__X    0x99
#define X__XX_X_    0x9a
#define X__XX_XX    0x9b
#define X__XXX__    0x9c
#define X__XXX_X    0x9d
#define X__XXXX_    0x9e
#define X__XXXXX    0x9f
#define X_X_____    0xa0
#define X_X____X    0xa1
#define X_X___X_    0xa2
#define X_X___XX    0xa3
#define X_X__X__    0xa4
#define X_X__X_X    0xa5
#define X_X__XX_    0xa6
#define X_X__XXX    0xa7
#define X_X_X___    0xa8
#define X_X_X__X    0xa9
#define X_X_X_X_    0xaa
#define X_X_X_XX    0xab
#define X_X_XX__    0xac
#define X_X_XX_X    0xad
#define X_X_XXX_    0xae
#define X_X_XXXX    0xaf
#define X_XX____    0xb0
#define X_XX___X    0xb1
#define X_XX__X_    0xb2
#define X_XX__XX    0xb3
#define X_XX_X__    0xb4
#define X_XX_X_X    0xb5
#define X_XX_XX_    0xb6
#define X_XX_XXX    0xb7
#define X_XXX___    0xb8
#define X_XXX__X    0xb9
#define X_XXX_X_    0xba
#define X_XXX_XX    0xbb
#define X_XXXX__    0xbc
#define X_XXXX_X    0xbd
#define X_XXXXX_    0xbe
#define X_XXXXXX    0xbf
#define XX______    0xc0
#define XX_____X    0xc1
#define XX____X_    0xc2
#define XX____XX    0xc3
#define XX___X__    0xc4
#define XX___X_X    0xc5
#define XX___XX_    0xc6
#define XX___XXX    0xc7
#define XX__X___    0xc8
#define XX__X__X    0xc9
#define XX__X_X_    0xca
#define XX__X_XX    0xcb
#define XX__XX__    0xcc
#define XX__XX_X    0xcd
#define XX__XXX_    0xce
#define XX__XXXX    0xcf
#define XX_X____    0xd0
#define XX_X___X    0xd1
#define XX_X__X_    0xd2
#define XX_X__XX    0xd3
#define XX_X_X__    0xd4
#define XX_X_X_X    0xd5
#define XX_X_XX_    0xd6
#define XX_X_XXX    0xd7
#define XX_XX___    0xd8
#define XX_XX__X    0xd9
#define XX_XX_X_    0xda
#define XX_XX_XX    0xdb
#define XX_XXX__    0xdc
#define XX_XXX_X    0xdd
#define XX_XXXX_    0xde
#define XX_XXXXX    0xdf
#define XXX_____    0xe0
#define XXX____X    0xe1
#define XXX___X_    0xe2
#define XXX___XX    0xe3
#define XXX__X__    0xe4
#define XXX__X_X    0xe5
#define XXX__XX_    0xe6
#define XXX__XXX    0xe7
#define XXX_X___    0xe8
#define XXX_X__X    0xe9
#define XXX_X_X_    0xea
#define XXX_X_XX    0xeb
#define XXX_XX__    0xec
#define XXX_XX_X    0xed
#define XXX_XXX_    0xee
#define XXX_XXXX    0xef
#define XXXX____    0xf0
#define XXXX___X    0xf1
#define XXXX__X_    0xf2
#define XXXX__XX    0xf3
#define XXXX_X__    0xf4
#define XXXX_X_X    0xf5
#define XXXX_XX_    0xf6
#define XXXX_XXX    0xf7
#define XXXXX___    0xf8
#define XXXXX__X    0xf9
#define XXXXX_X_    0xfa
#define XXXXX_XX    0xfb
#define XXXXXX__    0xfc
#define XXXXXX_X    0xfd
#define XXXXXXX_    0xfe
#define XXXXXXXX    0xff/*********************************************************************
*                           字体定义
**********************************************************************//**
* @brief 17*17点阵GB18030汉字
*/#define GB18030_17X17             1/**
* @brief 17*17点阵GB18030汉字
*/#define GB18030_20X20             2/**
* @brief 24*24点阵GB18030汉字
*/#define GB18030_24X24             3/**
* @brief 30*30点阵GB18030汉字
*/#define GB18030_30X30             4/**
* @brief 37*37点阵粗体GB18030汉字
*/#define GB18030_37X37B                5/**
* @brief 40*40点阵粗体GB18030汉字
*/#define GB18030_40X40B                6/**
* @brief 48*48点阵GB18030汉字
*/#define GB18030_48X48             7/*********************************************************************
*                           数据结构
**********************************************************************//**
* @brief 字体结构
*/struct _Font_Type
{uint8_t width;uint8_t height;uint8_t size;
};/*********************************************************************
*                           函数
**********************************************************************//**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t font_get_height(uint8_t font);/**
* @brief 读取字库
* @param font:字体
* @param c:待读取的字符
* @param font_type:返回的字体信息
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t font_read(uint8_t font,uint16_t c,struct _Font_Type *font_type,uint32_t *addr);#endif

4.将对应的接口填入字库文件源文件中

/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/

extern uint8_t GB18030_20X20_get_height(void);

/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/

extern uint8_t GB18030_20X20_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);


font_get_height函数与font_read函数也需要做对应修改。


font.c:

/**
* Copyright (c), 2015-2025
* @file font.c
* @brief 字库文件主文件
* @author jdh
* @date 2015/9/6
* @date 2015/9/7
*//*********************************************************************
*                           头文件
**********************************************************************/#include "font.h"
#include "string.h"/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/extern uint8_t GB18030_17X17_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/extern uint8_t GB18030_17X17_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/extern uint8_t GB18030_20X20_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/extern uint8_t GB18030_20X20_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/extern uint8_t GB18030_24X24_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/extern uint8_t GB18030_24X24_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/extern uint8_t GB18030_30X30_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/extern uint8_t GB18030_30X30_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t GB18030_37X37B_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t GB18030_37X37B_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t GB18030_40X40B_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t GB18030_40X40B_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t GB18030_48X48_get_height(void);/**
* @brief 得到地址
* @param font:字体
* @param ch:待读取的字符
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t GB18030_48X48_get_address(uint16_t ch,struct _Font_Type *font_type,uint32_t *addr);/*********************************************************************
*                           静态变量
**********************************************************************////**
//* @brief 字体结构
//*///static struct _Font_Type Font_Type[FONT_NUM + 1];///*********************************************************************
//*                         静态函数
//**********************************************************************////**
//* @brief 初始化字体类型
//*///static void init_font_type(void);/*********************************************************************
*                           函数
**********************************************************************//**
* @brief 得到字体高度
* @param font:字体
* @retval 高度
*/uint8_t font_get_height(uint8_t font)
{switch (font){case GB18030_17X17:{return GB18030_17X17_get_height();}case GB18030_20X20:{return GB18030_20X20_get_height();}case GB18030_24X24:{return GB18030_24X24_get_height();}case GB18030_30X30:{return GB18030_30X30_get_height();}case GB18030_37X37B:{return GB18030_37X37B_get_height();}case GB18030_40X40B:{return GB18030_40X40B_get_height();}case GB18030_48X48:{return GB18030_48X48_get_height();}default:{return 0;}}
}/**
* @brief 读取字库
* @param font:字体
* @param c:待读取的字符
* @param font_type:返回的字体信息
* @param addr:数据存储地址
* @retval 读取结果.0:失败,1:成功
*/uint8_t font_read(uint8_t font,uint16_t c,struct _Font_Type *font_type,uint32_t *addr)
{   switch (font){case GB18030_17X17:{if (GB18030_17X17_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_20X20:{if (GB18030_20X20_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_24X24:{if (GB18030_24X24_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_30X30:{if (GB18030_30X30_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_37X37B:{if (GB18030_37X37B_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_40X40B:{if (GB18030_40X40B_get_address(c,font_type,addr)){return 1;}else{return 0;}}case GB18030_48X48:{if (GB18030_48X48_get_address(c,font_type,addr)){return 1;}else{return 0;}}default:{return 0;}}
}
5.读取并显示可参考以下函数:
/**
* @brief 在指定位置显示单个字符
* @param x:x坐标
* @param y:y坐标
* @param font:字体
* @param c:字符
*/void gui_disp_char_at(uint16_t x,uint16_t y,uint8_t font,uint16_t c)
{struct _Font_Type font_type;//uint8_t buf[100] = {0};uint8_t *buf_pt = 0;uint16_t i = 0;uint16_t j = 0;uint8_t k = 0;uint8_t bit = 0;uint8_t num_valid_bit = 0;uint8_t num_valid_byte = 0;//   //读取字体信息
//  font_type = font_read_type(font);//读取字符信息font_read(font,c,&font_type,(uint32_t *)&buf_pt);//buf_pt = buf;//有效位数num_valid_bit = font_type.width % 8;//有效字节数num_valid_byte = font_type.width / 8;for (i = 0;i < font_type.height;i++){for (j = 0;j < num_valid_byte;j++){for (k = 0;k < 8;k++){bit = (*buf_pt >> (7 - k)) & 0x1;gui_interface_draw_pixel(x + j * 8 + k,y + i,bit);}buf_pt++;}for (k = 0;k < num_valid_bit;k++){bit = (*buf_pt >> (7 - k)) & 0x1;gui_interface_draw_pixel(x + j * 8 + k,y + i,bit);}if (num_valid_bit > 0){buf_pt++;}}
}
例:
gui_disp_char_at(0,0,GB18030_20X20,"正")





为OLED屏增加GUI支持3:字库相关推荐

  1. 为OLED屏添加GUI支持2:2D图形库

    为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.   环境: 主机:WIN10 开发环境:MDK5.13 MCU ...

  2. 熄屏显示为何只有OLED屏有?为何LCD屏不支持?熄屏显示耗电严重吗

    现在用户对手机屏幕的关注一点都不比配置低,尤其是LCD和OLED到底哪个好,更是争论不休.而今天小编就是来讲讲OLED屏的熄屏显示功能,小编依稀记得诺基亚时代的一些功能机,就算锁屏都能显示日期时间,觉 ...

  3. oled屏的使用和oled驱动测试

    在测试HarmonyOS Wi-Fi IoT 套件Hi3861过程,套件上的oled屏幕不亮了,最后排查发现是测试新程序的时候把之前的测试程序入口更改了,无法驱动oLED了. 论坛上有连志安老师的视频 ...

  4. STM32通过SPI协议驱动OLED屏

    坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...

  5. OLED屏显和汉字点阵编码

    目录 一.SPI协议 (1)SPI协议简介 (2)SPI物理层 (3)协议层 (4)SPI 基本通讯过程 (5)CPOL/CPHA 及通讯模式 (6)通讯引脚 (7)SPI优缺点 二.OLED (1) ...

  6. 基于SPI方式实现OLED屏显

    文章目录 一.SPI简介 1.1物理层 1.2协议层 二.OLED 2.1定义 2.2优势 2.3模块工作模式选择 2.4模块特点 三.实验过程 3.1实验准备 3.2硬件连接 3.3程序烧录 3.3 ...

  7. OLED屏显+汉字点阵

    stm32采用SPI实现OLED屏显 简介 OLED屏显例子 一.准备工作 二.显示学号和姓名 三.滑动显示 四.显示温湿度 总结+参考 简介 SPI SPI是串行外设接口(Serial Periph ...

  8. OLED屏显显示温湿度,学号姓名滚动显示温湿度

    文章目录 一.SPI串行外设接口 1.SPI的介绍 2.原理 3.组成结构 二.0.96寸OLED显示屏显示数据 1.所使用的工具 三丶代码的修改 1.输出文字设置 2.滚动设置 3.字模软件 四丶显 ...

  9. 滴普技术荟:基于深度学习的云边一体化OLED屏缺陷自动光学检测技术

    作者:阎胜利 中科院博士 助理研究员,从事光电成像系统总体及算法研究,现为滴普科技 2048事业部 技术品牌专家 一.要解决的主要问题 OLED (Organic Light-Emitting Dio ...

最新文章

  1. javascript的promise
  2. PAT甲级1132 Cut Integer:[C++题解]
  3. vs2010利用属性表自动配置OpenCV(XP的32位系统,opencv版本是2.4.10)
  4. python3中的dict循环性能对比
  5. linux系统下deepin eclipse不能显示源码报class File Editor Source not found
  6. lora无线模块基于LoRaWAN网关技术在国家物联网应用
  7. Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
  8. oracle 11g rac 状态,Oracle 11g RAC 检查各部分运行状态
  9. 如何写出一个较好的快速排序程序
  10. 浅谈Java回调机制
  11. 光伏机器人最前线_高工机器人走进光伏:数字化车间未来可期
  12. Linux虚拟机设置Samba服务
  13. 使用struts框架的简单jsp登录页面
  14. html协议是一种用于什么的协议,FTP协议是一种用于( )的协议。
  15. 单片机C语言LED点阵编程,基于单片机的8*8 LED点阵显示技术
  16. 2021-06-05按键精灵实现远程获取消息内容
  17. 批量删除时传参的转换
  18. 深度GHOST XP快速装机版V6.5
  19. PHP常用的建站系统
  20. 阿里人事巨变!张建锋卸任 CTO,胡晓明任蚂蚁金服 CEO

热门文章

  1. 吸脂去眼袋效果好吗,吸脂去眼袋有副作用吗,不会告诉你的事!
  2. 智慧电厂:打破电厂传统思路
  3. stm32f103c8t6单片机使用st-link/v2仿真器烧录程序的过程
  4. 「后隐私」时代,个性化广告如何保护隐私?
  5. 西部数据在磁盘里加NAND却不用做缓存?
  6. iTOP4412交叉编译器构建
  7. 前段JS绘制动态海浪效果
  8. n的阶乘末尾含有“0”的个数
  9. [Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割
  10. 超市管理系统(java+Mysql)