为OLED屏增加GUI支持3:字库
为OLED屏增加GUI支持3:字库
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
1.用工具FontCvt.exe(emwin自带工具)选择需要的字体,字号,以及需要的字符(汉字,ASCII)并生成对应的.c文件
2.将此.c文件转换为指定格式。以下为微软雅黑20号字体的转换后源文件:
/**
* 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;}}
}
/**
* @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++;}}
}
为OLED屏增加GUI支持3:字库相关推荐
- 为OLED屏添加GUI支持2:2D图形库
为OLED屏添加GUI支持2:2D图形库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU ...
- 熄屏显示为何只有OLED屏有?为何LCD屏不支持?熄屏显示耗电严重吗
现在用户对手机屏幕的关注一点都不比配置低,尤其是LCD和OLED到底哪个好,更是争论不休.而今天小编就是来讲讲OLED屏的熄屏显示功能,小编依稀记得诺基亚时代的一些功能机,就算锁屏都能显示日期时间,觉 ...
- oled屏的使用和oled驱动测试
在测试HarmonyOS Wi-Fi IoT 套件Hi3861过程,套件上的oled屏幕不亮了,最后排查发现是测试新程序的时候把之前的测试程序入口更改了,无法驱动oLED了. 论坛上有连志安老师的视频 ...
- STM32通过SPI协议驱动OLED屏
坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...
- OLED屏显和汉字点阵编码
目录 一.SPI协议 (1)SPI协议简介 (2)SPI物理层 (3)协议层 (4)SPI 基本通讯过程 (5)CPOL/CPHA 及通讯模式 (6)通讯引脚 (7)SPI优缺点 二.OLED (1) ...
- 基于SPI方式实现OLED屏显
文章目录 一.SPI简介 1.1物理层 1.2协议层 二.OLED 2.1定义 2.2优势 2.3模块工作模式选择 2.4模块特点 三.实验过程 3.1实验准备 3.2硬件连接 3.3程序烧录 3.3 ...
- OLED屏显+汉字点阵
stm32采用SPI实现OLED屏显 简介 OLED屏显例子 一.准备工作 二.显示学号和姓名 三.滑动显示 四.显示温湿度 总结+参考 简介 SPI SPI是串行外设接口(Serial Periph ...
- OLED屏显显示温湿度,学号姓名滚动显示温湿度
文章目录 一.SPI串行外设接口 1.SPI的介绍 2.原理 3.组成结构 二.0.96寸OLED显示屏显示数据 1.所使用的工具 三丶代码的修改 1.输出文字设置 2.滚动设置 3.字模软件 四丶显 ...
- 滴普技术荟:基于深度学习的云边一体化OLED屏缺陷自动光学检测技术
作者:阎胜利 中科院博士 助理研究员,从事光电成像系统总体及算法研究,现为滴普科技 2048事业部 技术品牌专家 一.要解决的主要问题 OLED (Organic Light-Emitting Dio ...
最新文章
- javascript的promise
- PAT甲级1132 Cut Integer:[C++题解]
- vs2010利用属性表自动配置OpenCV(XP的32位系统,opencv版本是2.4.10)
- python3中的dict循环性能对比
- linux系统下deepin eclipse不能显示源码报class File Editor Source not found
- lora无线模块基于LoRaWAN网关技术在国家物联网应用
- Android官方开发文档Training系列课程中文版:Activity测试之创建功能性测试
- oracle 11g rac 状态,Oracle 11g RAC 检查各部分运行状态
- 如何写出一个较好的快速排序程序
- 浅谈Java回调机制
- 光伏机器人最前线_高工机器人走进光伏:数字化车间未来可期
- Linux虚拟机设置Samba服务
- 使用struts框架的简单jsp登录页面
- html协议是一种用于什么的协议,FTP协议是一种用于( )的协议。
- 单片机C语言LED点阵编程,基于单片机的8*8 LED点阵显示技术
- 2021-06-05按键精灵实现远程获取消息内容
- 批量删除时传参的转换
- 深度GHOST XP快速装机版V6.5
- PHP常用的建站系统
- 阿里人事巨变!张建锋卸任 CTO,胡晓明任蚂蚁金服 CEO