此词库被应用于微信点餐系统的打印机中。

生成的字库优点

可以完全自定义创建自己的字库:

  • 可自由选择任何字体,宋体,楷体,黑体……
  • 可自定义字体的大小
  • 可自定义需要的字符编码(简体gb2312,gb18030,繁体,韩文,日文……)
  • UNICODE支持
  • 价格便宜,买 Flash ROM,自己写进 Flash ROM就可以了。

创建字体库需要的软件

Windows系统,安装 Python 2.7 和 PIL 库( Python Image Library),下载 Make ROM Font 工具
打开 Windows 命令行,进入取下的代码目录,执行: c:\Python27\python.exe make_font.py -s 23 -c
会在当前目录下产生 cn_font.bin 文件,将此文件烧录到 Flash ROM 中,安装下面的字库格式即可读取。

  • 如果要选择不同的字体,修改 make_chinese_font 中 font_file 指向对应的字体文件;
  • 如果要选择不同的字符编码,修改 make_chinese_font 中 get_glyph_set,添加新的编码;

字库格式

 The format of font.bin: [File Header][Glyphs Table][Glyphs Data]File Header:    BF [2 bytes]VersionNumber [1 byte]FontHeight [ 1 byte]FontWidthMinimum [1 byte]FontWidthMaximum [1 byte]Glyph Count [2 bytes] Glyphs Table:     [ data position[2 bytes], width [1 byte] ] x Glyph CountGlyphs Data:    (Glyph data) x Actual Glyph countGlyphDataSize: (FontWidthMaximum + 7) / 8 x FontHeight / 8

字库使用

初始化字体

 /*** The font info.*/struct FontInfo{u32            offset;u8           height;u8           width_min;u8            width_stride;u8         glyph_data_size;u16         glyph_count;};typedef unsigned short WCHAR;int init_font(struct FontInfo *fontInfo){u32 offset = fontInfo->offset;// Not font formatif (FLASH_read_byte(offset + 0) != 'B' && FLASH_read_byte(offset + 1) != 'F')return 0;// Invalid font lib version.if (FLASH_read_byte(offset + FL_OFFSET_VERSION) != FONT_LIB_VERSION)return 0;fontInfo->height = FLASH_read_byte(offset + FL_OFFSET_HEIGHT);fontInfo->width_min = FLASH_read_byte(offset + FL_OFFSET_WIDTH_MIN);u8 width_max = FLASH_read_byte(offset + FL_OFFSET_WIDTH_MAX);fontInfo->width_stride = get_glyph_stride(width_max);fontInfo->glyph_data_size = (((width_max + 7) / 8) * fontInfo->height); //(fontInfo->width_stride + 7) / 8;fontInfo->glyph_count = FLASH_read_u16(offset + FL_OFFSET_GLYPH_COUNT);return 1;}

寻址读字体

在单片机程序中,通过下面的方式寻址读字体:

 /*** Get the glyph by its UCS2 character encoding.** If it does not exist, return a special glyph.*/void get_glyph(WCHAR ch, struct Glyph *glyph){u32 pos = FL_OFFSET_GLYPH_TABLE + FONT_GLYPH_INFO_SIZE * (u32) ch;u16 posHigh = FLASH_read_byte(pos);u16 posLow = FLASH_read_byte(pos + 1);glyph->width = FLASH_read_byte(pos + 2);glyph->data_pos = (posHigh << 8) | posLow;}void get_glyph_data(struct FontInfo *fontInfo, struct Glyph *glyph, u8 offset, u8 data[MAX_GLYPH_STRIDE]){u32 FL_OFFSET_GLYPH_DATA = fontInfo->offset + FL_OFFSET_GLYPH_TABLE+ fontInfo->glyph_count * (u32) FONT_GLYPH_INFO_SIZE;u32 addr = FL_OFFSET_GLYPH_DATA + (u32) (glyph->data_pos) * fontInfo->glyph_data_size + offset;FLASH_fast_read(data, addr, get_glyph_stride(glyph->width));}

自制和烧录单片机 unicode 字库芯片 - 创建字库相关推荐

  1. STM32-ISP烧录检测不到芯片问题

    STM32-ISP烧录检测不到芯片问题 STM32F103VET6使用串口ISP进行烧录程序 无论是采用手动还是自动的ISP都无法解决! 后来采用手动的ISP,即BOOT0置高!将进入条件改成下图中的 ...

  2. 字库芯片介绍与使用(附STM32程序~~~)

    不知道大家是否了解字库芯片(网上这方面的资料好像挺少的),今天给大家简单介绍一下字库芯片. 先举个例子,如果我们想在点阵屏或液晶屏上面显示一个88的正方形,我们该怎么做. 很简单,假设屏上面" ...

  3. 高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文

    连续两个月的加班,给ODM客户生产温控器订单,今天终于顺利发货,对于工程师出身的我,终于可以对着电脑,消停几天,研究技术,分享技术了,闲话少说,直接进入正题: 半年前有个老客户介绍个中央某院的项目,我 ...

  4. “高通”字库芯片的使用方法

    STM32+字库 "高通"字库芯片的使用方法 "高通"字库芯片的使用方法 STM32+字库 前言 一.电路设计 二.程序设计 代码如下: 整体代码部分 1.字库 ...

  5. stm32【GT30L32S4W字库芯片】

    GT30L32S4W字库芯片调试 测试平台:STM32F103RFT6 库版本:官方标准库3.5.0版本 字库芯片:GT30L32S4W 字库标准:GB2312国标汉字,ASCII字符 点阵排列方式: ...

  6. 驱动字库芯片GT23L24M0140

     驱动字库芯片GT23L24M0140 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: ...

  7. 用单片机在屏幕上显示字库中的汉字

    在屏幕上显示字库中汉字 显示原理 字体模型 1.取模 2.字库 显示函数的实现 1.首先实现点亮一个点 2.以汉字12 * 12,字符6 * 12为例写的驱动函数 3.显示函数(集成到一个函数中) 总 ...

  8. 蓝桥杯单片机DS1302时钟芯片驱动代码注释

    蓝桥杯单片机DS1302时钟芯片驱动代码之前的疑惑注释了下 /* DS1302 芯片包含一个 实时时钟/日历和 31 字节的静态 RAM. 与时钟/RAM 通讯只需要三根线: CE,I/O (数据线) ...

  9. 万年历设计单片机c语言,数字万年历设计(80c51单片机、时钟芯片ds1320).pdf

    数字万年历设计(80c51单片机.时钟芯片ds1320) 德州科技职业学院青岛校区 2006 级毕业论文 多功能数字万年历设计 摘 要 : 本设计是一种基于 AT89C52 单片机控制的数字万年历设计 ...

最新文章

  1. Linux0.01内核根目录Makefile注释
  2. HDLBits答案(22)_基于有限状态机的计数器
  3. 有关西电的课程学分相关问题:必修课、选修课、补考、重修、学分
  4. 竖向图片插入_Word小技巧:让你的图片文字排版更有创意
  5. 决策者根据什么曲线做出决策_如何在开放社区中做出品牌决策
  6. 牛客网暑期ACM多校训练营(第二场): H. travel(树形线头DP)
  7. 没错,支付也有个七层模型
  8. 网络安全技能大赛D模块常规漏洞加固详解
  9. 四叶草关闭啰嗦模式_真正的高性能车!Giulia 四叶草评测
  10. Cisco switch spanning-tree priority 0
  11. iphone新旧手机数据传输已取消_安卓厂商要被苹果带坏,外媒称三星S21也要取消充电头或耳机|耳机|三星|iphone|安卓|安卓手机...
  12. 在线网页如何免费excel转pdf
  13. 更聪明地学习,而不是苦读——《如何高效学习》
  14. 淘宝商品点赞可以增加权重吗?
  15. python基础教程学习笔记 —字符串
  16. 【无标题】刘易远:做事必须要脚踏实地
  17. 服务器系统没网灯在闪,电脑没网交换机灯全部一闪一闪的解决方法
  18. Unity 3D 摄像机的类型
  19. 长痘的原因及治疗方法
  20. Spark优化篇:RBO/CBO

热门文章

  1. 深信服上网行为管理开启snmp_华为路由器、深信服NGAF防火墙的SNMP配置
  2. CCF2018年:小明放学C++答案
  3. 元旦贺卡 html5,元旦贺卡:最牛的元旦祝福语短信
  4. 软件版本各阶段英文名称
  5. 《格兰杰计量经济学文集(第一卷)》
  6. Endnote 常见问题整理
  7. 深入理解SimpleChannelInboundHandler
  8. 一个很好的Git操作指南
  9. datafountain自然语言处理比赛的学习和总结
  10. java中 enum什么意思_Java中“enum”的用途是什么?