精华内容
下载资源
问答
  • OLED汉字字库

    2018-05-07 10:15:35
    OLED,单片机等汉字字库,多种尺寸16x16,32x32,方便使用
  • 在原子的基础上,改写原子代码,加上了汉字字库更新,可以直接使用。
  • oled汉字.rar

    2021-02-19 19:54:15
    OLED小显示屏程序,有字库
  • 1.3寸OLED字库() 1 概述 GT20L16S1Y是一款内含15X16点阵的汉字库芯片,支持GB2312国标简体汉字(含有国家信标委合法授 权)、ASCII字符。排列格式为竖置横排。用户通过字符内码,利用本手册提供的方法计算出该...
  • 0.96寸OLED字库() 1 概述 GT20L16S1Y是一款内含15X16点阵的汉字库芯片,支持GB2312国标简体汉字(含有国家信标委合法授 权)、ASCII字符。排列格式为竖置横排。用户通过字符内码,利用本手册提供的方法计算出该...
  • OLED显示屏,单片机等汉字字库,含多种字体和多种尺寸16x16,32x32等
  • 前提:因为esp8266-01s 内存太小,不可能把汉字字库放里面,但为了显示汉字,只能单字进行取模。 软件:PCtolCD2002 设置:我用的是esp-01s和1.3寸oled做的一个时钟,其他硬件不保证成功。 选项设置如下图: ...

    我这个也是在网上看到的,只不过网上的方法我用了不用,也不懂原理,就把自己实验得到的结果保存一下备忘。

    前提:因为esp8266-01s 内存太小,不可能把汉字字库放里面,但为了显示汉字,只能单字进行取模。

    软件:PCtolCD2002

    设置:我用的是esp-01s和1.3寸oled做的一个时钟,其他硬件不保证成功。

    选项设置如下图:

    只有取模方式一定要选择“逐行式”,否则乱码。自定义格式选择C51式,并选择自定义格式。其他位置不变。取模方式如果不对,就会显示乱码。

    每个字放在下面两行黄色代码之间,把两边的大括号去掉,按如下格式。我看网上有人多可以多个字放一起,我是没成功,都是一个个来。

    const unsigned char xing[] U8X8_PROGMEM = {
      0x00, 0x00, 0xF8, 0x0F, 0x08, 0x08, 0xF8, 0x0F, 0x08, 0x08, 0xF8, 0x0F, 0x80, 0x00, 0x88, 0x00,
      0xF8, 0x1F, 0x84, 0x00, 0x82, 0x00, 0xF8, 0x0F, 0x80, 0x00, 0x80, 0x00, 0xFE, 0x3F, 0x00, 0x00

    };/*星*/

    在调用的时候在函数里按图片调用方式:

    display.drawXbm(44, 44, 16,16, xing); 

    即可正常显示如下图(只是效果展示,还没排版):

    展开全文
  • 0.96寸OLED显示汉字

    2020-06-25 23:21:41
    0.96寸OLED显示汉字显示汉字完整驱动程序,字库文件直接用取模软件按格式复制代码,显示汉字函数可以直接输入汉字程序会自动查找字库中的汉字显示。
  • 汉字点阵字库

    2016-08-09 16:28:02
    汉字点阵字库,包括16x16 24x24.ASCII 16x24。提供12864_oled显示相关代码。
  • 使有STM32F103和OLED 1.3inch I2C接口,驱动高通GT32L24M0140字库显示16*16和24*24点库汉字,内附高通字库FLASH镜象,学习使用可直接写入W25Q64,商业应用请选用高通产芯片,否则后果自负。
  • 第一,检查oled是否和单片机控制引脚正确相连。 GND VCC CLK:时钟信号 miso RST: DC:DATE COMMAND/CONTROL CS:CHIP SELECT 第二,检查工程里是否有要显示的字的字库。 第三,如果程序编译正确,英文、...

    第一,检查oled是否和单片机控制引脚正确相连。

    GND

    VCC

    CLK:时钟信号

    miso

    RST:

    DC:DATE COMMAND/CONTROL

    CS:CHIP SELECT

    第二,检查工程里是否有要显示的字的字库。

    第三,如果程序编译正确,英文、字符等也显示正常,唯独中文汉字不能显示,

    那么,检查文件编码,尤其是当从一个工程一直到另一个工程里,

    在IAR编码很存在问题,界面中文编码显示正常不一定代码写进单片机里的汉字就正确,请看下面截图,注意区分编码不同。

     错误编码

     正确编码,从英文半角状态下的双引号可以辨别

    解决方法,只能把原有的编码有误的文件彻底删除,然后用别的文本编辑器(notepad++)新建文件,把之前的代码先复制粘贴到word里,注意粘贴时选择性粘贴,不保留格式,然后选中粘贴后的代码,右键复制,再粘贴到新建的文档里。最后在之前的工程里重新添加文件即可。

     

    转载于:https://www.cnblogs.com/scrazy/p/7896968.html

    展开全文
  • 网上的字库数组都是标准行扫描的字库,因此我做了一个适用OLED(SSD1306驱动)...这是根据HZK16的标准文件导出,每个汉字都是32字节,位置查找方式跟原来的行扫描都一样,只是OLED显示代码不一样,里面注释有示例代码。
  • OLED屏增加GUI支持3:字库

    千次阅读 2015-12-28 10:55:44
    OLED屏增加GUI支持3:字库本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10开发环境:MDK5.13MCU:STM32F103说明: GUI中有字库方能显示汉字,英文,数字等。英文数字等ASCII码128...

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


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

     

    环境:

    主机:WIN10

    开发环境:MDK5.13

    MCU:STM32F103


    说明:
           GUI中有字库方能显示汉字,英文,数字等。英文数字等ASCII码128个字符保存显示容易,但汉字数万,如果不用字库芯片,用软件保存,则flash明显不够。所以只添加需要显示的汉字。
           本GUI用的显示方法,可以容易的显示不同字体,不同字号的汉字和ASCII码。


    源代码及步骤:

    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;
    		}
    		//0
    		case 0x0030:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0030;
    			break;
    		}
    		//1
    		case 0x0031:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0031;
    			break;
    		}
    		//2
    		case 0x0032:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0032;
    			break;
    		}
    		//3
    		case 0x0033:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0033;
    			break;
    		}
    		//4
    		case 0x0034:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0034;
    			break;
    		}
    		//5
    		case 0x0035:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0035;
    			break;
    		}
    		//6
    		case 0x0036:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0036;
    			break;
    		}
    		//7
    		case 0x0037:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0037;
    			break;
    		}
    		//8
    		case 0x0038:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0038;
    			break;
    		}
    		//9
    		case 0x0039:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0039;
    			break;
    		}
    		//m
    		case 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,"正")






    展开全文
  • 字库芯片,可显示标准的国标简体(GB2312)汉字、8*16 点ASCII 粗体字库、7*8点ASCII 字库、5*7 点ASCII 字库; 兼容3.3V~5V 电压。 0.96’OLED 模块通过外部排针和单片机通讯,各引脚详细描述如下: 序号名称 说明...
  • OLED屏添加GUI支持3:字库本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10开发环境:MDK5.13MCU:STM32F103说明: GUI中有字库方能显示汉字。英文,数字等。英文数字等ASCII码128...

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


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

     

    环境:

    主机:WIN10

    开发环境:MDK5.13

    MCU:STM32F103


    说明:
           GUI中有字库方能显示汉字。英文,数字等。英文数字等ASCII码128个字符保存显示easy。但汉字数万,假设不用字库芯片,用软件保存。则flash明显不够。所以仅仅加入须要显示的汉字。
           本GUI用的显示方法,能够easy的显示不同字体,不同字号的汉字和ASCII码。



    源码及步骤:

    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;
    		}
    		//0
    		case 0x0030:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0030;
    			break;
    		}
    		//1
    		case 0x0031:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0031;
    			break;
    		}
    		//2
    		case 0x0032:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0032;
    			break;
    		}
    		//3
    		case 0x0033:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0033;
    			break;
    		}
    		//4
    		case 0x0034:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0034;
    			break;
    		}
    		//5
    		case 0x0035:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0035;
    			break;
    		}
    		//6
    		case 0x0036:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0036;
    			break;
    		}
    		//7
    		case 0x0037:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0037;
    			break;
    		}
    		//8
    		case 0x0038:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0038;
    			break;
    		}
    		//9
    		case 0x0039:
    		{
    			font_type->width = 8;
    			font_type->height = 20;
    			font_type->size = 20;
    			*addr = (uint32_t)Hz20_0039;
    			break;
    		}
    		//m
    		case 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,"正")






    展开全文
  • 要显示自己的名字首先需要到中文点阵字库中找到汉字对应的点阵表示,然后将其用十六进制表示出来。 0x22,0x00,0x12,0x3E,0x14,0x22,0x7F,0x24,0x08,0x24,0x08,0x28,0x08,0x24,0xFF,0xA4, 0x08,0x22,0x08,0x22,0x14,...
  • 理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能: 显示自己的学号和姓名; 显示AHT20的温度和湿度; 上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!...
  • 最近在搞屏幕,顺便弄了一个字库芯片,刚刚测试完毕。个人认为项目中人机交互是少不了的,而显示是人机交互中的重要一环,所以准备写一篇教程记录一下。 显示原理  首先要知道屏幕显示的原理。屏幕显示的原理...
  • iic.c iic.h oled.c oled.h oledfont,h等,oledfont.h是字库用到,包含显示字符串用到的ASCII表,和汉字表 接口使用说明: 基于I2C的OLED显示屏驱动代码,可显示汉字,包含c/c++两种驱动代码 注意我用的通信协议是i2c...
  • 任意汉字显示,给你的嵌入式系统(含MCU)装上字库 0 引言 还记得通常在MCU驱动LCD,OLED是怎样显示汉字的吗?采用取字模工具,生成字模数组,然后要显示某个字符,直接索引这个字符的数组,然后对这个数组数据进行...
  • 最近在做要把文字(英文、汉字)显示到OLED显示屏上这方面内容,英文还好说,无非几十个字符,网上一搜也都有现成的方法。但汉字可就比较棘手了,首先要实现汉字的显示需要知道这个汉字的字模,这个我们可以很轻松地...
  • 1.一级字库3755个汉字和字模点阵文件. 2. 可以做oled汉字显示,存放在flash中,转码读取显示。
  • LCD无字库--单片机字库存储

    千次阅读 2018-09-28 10:54:08
    学完这篇文章,你将会使你的...在有些系统中,我们需要显示汉字,可以购买汉字芯片,或者购买带汉字显示的显示器,当然,也可以自己做字库。 这里我们介绍一种自己做字库的方法,成本2元人民币左右。 2.汉字...
  • C51完美OLED显示.zip

    2019-10-10 08:43:22
    在51单片机中OLED 屏幕显示,支持字库,支持数字输出;支持动态数字,动态汉字输出;支持小数输出。OLED 在stm32中的功能在c51中完美实现
  • //24*24的OLED汉字点阵,包括三个汉字:开、发、板。这三个汉字的点阵库,是利用PCtoLCD2002生产的, //软件设置的取模方式同OLED实验ASCII的取模方式一模一样,字体采用12*大小,一个汉字点阵占用24字节。 const ...
  • 单片机字库建立

    千次阅读 2017-06-28 20:24:36
    学完这篇文章,你将会使你的单片机显示系统...在有些系统中,我们需要显示汉字,可以购买汉字芯片,或者购买带汉字显示的显示器,当然,也可以自己做字库。 这里我们介绍一种自己做字库的方法,成本2元人民
  • 汉字的点阵字库中,每个字节的每个位都代表一个汉字的一个点,每个汉 字都是由一个矩形的点阵组成,0 代表没有,1 代表有点,将 0 和 1 分别用不同 颜色画出,就形成了一个汉字,常用的点阵矩阵有 1212, 1414, 1
  • OLED数据通信初体验

    2020-12-29 20:13:06
    本次实验需要在液晶屏上显示汉字,所以需要点阵字库进行,推荐工具: 百度网盘: 硬件连线 工程配置 打开含有工程的文件夹,选择第一个Demo 由于使用的芯片是STM32,所以选择下面选项 然后选择第二个文件 打开...
  • ESP32 micropython,基于ESP32和...由于ESP32体积有限所以只截取了Unicode编码字库中的中文汉字和ASCII码的字库字库体积从原来的2048KB裁剪到了655KB。因为用纯Python语言写的代码所以可以移植到ESP8266等MCU中运行。
  • LCD/OLED点阵字模提取软件(汇总)

    千次阅读 2020-03-30 21:53:41
    进行(单片机)嵌入式开发的伙伴,常常会用到LCD或OLED点阵字模,而有时候用到的汉字本不多,如果上字库芯片,增加了成本感觉不值,所以通过字模软件,取出16进制点阵字模数据,存于单片机的FLASH存储器中,这样可以...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

oled汉字字库