3075|3

2019

帖子

0

资源

五彩晶圆(初级)

为点帧屏做自动取字符模的python脚本 [复制链接]

本帖最后由 IC爬虫 于 2022-1-26 10:03 编辑

        前段时间DIY了一款128X32的OLED扩展版模块,非常喜欢这种迷你的屏幕,晚点时间会将这个模块的硬件电路开源给大家。为了适配这个屏需要一款字符取模软件,因为现在我的开发工作都是在Ubuntu的电脑,很多基于windows 的取模软件并不适合我,另外我觉得取个模并且输出特定格式的头文件用python 就可以简单实现,而且自己能控制的代码也方便后续加入想要的功能、输出自己喜欢格式的字符头文件。我先在网上找个到了我可以借鉴的代码,稍加改进就可以用了,非常简单,现在我就给大家讲讲这个代码如何使用。

1、首先推荐一个有非常不错,并且适合点阵屏显示的字符字体网站:https://fontsfree.net/bitmicro01-font-download.html

2、方便大家快速找到各种适合低像素的字体文件,可以点击网站上Bitmap这个分类,如下图:

1.png

3、你就可以找到如下图所示的各种有趣并且占用像素少的字体:

2.png 4、运行创建字符取模脚本需要的python环境:

        a、需要使用python3 ;

        b、使用pip安装依赖库:pip3 install jinja2;

5、取模脚本如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys, os
from PIL import Image, ImageFont, ImageDraw
import argparse
import jinja2
import re
import time

def gen_char(index, c, im):
    bw = (im.size[0] + 7) // 8
    res = {
        'index': index,
        'code': c,
        'offset': bw * im.size[1] * index,
        'rows': []
    }
    
    data = tuple(im.getdata())    
    for row in range(im.size[1]):
        r = {
            'data': [],
            'asc': [],
        }
        for b in range(bw):
            byte = 0
            for i in range(8):
                idx = b * 8 + i
                bit = data[row * im.size[0] + idx] if idx < im.size[0] else 0
                if bit:
                    byte |= 1
                    r['asc'].append('#')
                else:
                    r['asc'].append('.')
                byte <<= 1
            r['data'].append(byte >> 1)
            
        r['asc'] = ''.join(r['asc'])
        res['rows'].append(r)
    return res
        

def main(args):
    fnt = ImageFont.truetype(args.font,size=7)  #打开预设的字体文件,并且设置所用的字体大小
    size = fnt.getsize('A')                     #获取一个字符的size:(cols,rows)
    print (size)
    im = Image.new('RGB', size)                 #创建一张RGB的图片,图片大小就是之前获取的单个字符的所占的像素大小
    draw = ImageDraw.Draw(im)
    
    if args.last - args.first < 1:              #判断需要转码的字符的index 是否出错
        raise ValueError('Invalid --first or --last')
    
    chars = []
    for idx in range(args.last - args.first + 1):                       #遍历需要转码的所有的字符
        draw.rectangle(((0, 0), size), fill = 0)                        #将图片画布清零
        draw.text((0, 0), chr(idx + args.first), font=fnt)              #在画布上按位图绘制指定字符
        chars.append(gen_char(idx, idx + args.first, im.convert('1')))  #convert('1')转为二值图,黑为0,白为255;对字符取模,并装入chars数组中
        
    env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(os.path.abspath(__file__))), finalize=lambda x: '' if x is None else x)
    print(env.get_template(args.template).render({
        'font': {
            'name': args.name,
            'size': size,
            'charset': args.charset,
            'first': args.first,
            'last': args.last,
        },
        'chars': chars,
        'created': time.ctime()
    }))
    

_CLEAN_RE = re.compile(r'[^a-z0-9_]', re.I)

def clean_str(s):
    return _CLEAN_RE.sub('_', s)

if __name__ == "__main__":
    parser=argparse.ArgumentParser(description='Fixed fonts converter')
    parser.add_argument('-f', '--font', type=str, required=True, help='PIL font filename')
    parser.add_argument('-n', '--name', type=clean_str, required=True, help='Font name')
    parser.add_argument('-c', '--charset', type=clean_str, required=True, help='Charset')
    parser.add_argument('--first', type=int, help='First character', default=1)
    parser.add_argument('--last', type=int, help='Last character', default=255)
    parser.add_argument('-t', '--template', type=str, help='Template filename', default='template.c')
    main(parser.parse_args(sys.argv[1:]))

6、执行取模脚本:python ./create_font_new.py -f ./FontsFree-Net-PIXIES__.ttf -n pixie -c PPP --first 32 --last 127

    参数说明:

    a、FontsFree-Net-PIXIES__.ttf 就是你到字体下载网站上下载你需要的字体;

    b、pixie 就是你自己取的字体名称;

    c、PPP 这个就是用来区分用同一个字体创建的多个取模软件名;

    d、--first  --last 就是你要对字体文件中哪些字符取模的字符ID 范围;

7、生产的取模样式如下:

{%- set header_id -%}
_EXTRAS_FONTS_FONT_{{ font.name|upper }}_{{ font.size[0] }}X{{ font.size[1] }}_{{ font.charset|upper }}_H_
{%- endset -%}
{%- set font_size -%}
{{ font.size[0] }}x{{ font.size[1] }}
{%- endset -%}
{%- set font_prefix -%}
_fonts_{{ font.name|lower }}_{{ font_size }}_{{ font.charset|lower }}
{%- endset -%}
/**
 * This file contains generated binary font data.
 *
 * Font:    {{ font.name }}
 * Size:    {{ font_size }}
 * Charset: {{ font.charset }}
 * {{ chars|length }} characters ({{ font.first }}..{{ font.last }})
 *
 * License: FIXME
 *
 * Generated: {{ created }}
 */
#ifndef {{ header_id }}
#define {{ header_id }}

static const uint8_t {{ font_prefix }}_bitmaps[] = {
    {%- for char in chars %}

    /* {{ 'Index: 0x%02x, char: \\x%02x, offset: 0x%04x'|format(char.index, char.code, char.offset) }} */
    {%- for row in char.rows %}
    {% for byte in row.data %}{{ '0x%02x'|format(byte) }}, {% endfor -%} /* {{ row.asc }} */
    {%- endfor -%}
    {%- endfor %}
};

const font_char_desc_t {{ font_prefix }}_descriptors[] = {
    {%- for char in chars %}
    { {{ '0x%02x'|format(font.size[0]) }}, {{ '0x%04x'|format(char.offset) }} }, /* {{ 'Index: 0x%02x, char: \\x%02x'|format(char.index, char.code) }} */
    {%- endfor %}
};

const font_info_t {{ font_prefix }}_info =
{
    .height           = {{ font.size[1] }}, /* Character height */
    .c                = 0, /* C */
    .char_start       = {{ font.first }}, /* Start character */
    .char_end         = {{ font.last }}, /* End character */
    .char_descriptors = {{ font_prefix }}_descriptors, /* Character descriptor array */
    .bitmap           = {{ font_prefix }}_bitmaps, /* Character bitmap array */
};

#endif /* {{ header_id }} */

8、一个成功创建的取模头文件如下:

/**
 * This file contains generated binary font data.
 *
 * Font:    pixie
 * Size:    4x7
 * Charset: PPP
 * 96 characters (32..127)
 *
 * License: FIXME
 *
 * Generated: Tue Jan 25 21:01:02 2022
 */
#ifndef _EXTRAS_FONTS_FONT_PIXIE_4X7_PPP_H_
#define _EXTRAS_FONTS_FONT_PIXIE_4X7_PPP_H_

static const uint8_t _fonts_pixie_4x7_ppp_bitmaps[] = {

    /* Index: 0x00, char: \x20, offset: 0x0000 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x01, char: \x21, offset: 0x0007 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x00, /* ........ */
    0x80, /* #....... */

    /* Index: 0x02, char: \x22, offset: 0x000e */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x03, char: \x23, offset: 0x0015 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x50, /* .#.#.... */
    0xf0, /* ####.... */
    0x50, /* .#.#.... */
    0xf0, /* ####.... */
    0x50, /* .#.#.... */

    /* Index: 0x04, char: \x24, offset: 0x001c */
    0x00, /* ........ */
    0x40, /* .#...... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */

    /* Index: 0x05, char: \x25, offset: 0x0023 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0x20, /* ..#..... */
    0x60, /* .##..... */
    0x40, /* .#...... */
    0x50, /* .#.#.... */

    /* Index: 0x06, char: \x26, offset: 0x002a */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0x70, /* .###.... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x07, char: \x27, offset: 0x0031 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x08, char: \x28, offset: 0x0038 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x40, /* .#...... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x40, /* .#...... */

    /* Index: 0x09, char: \x29, offset: 0x003f */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x80, /* #....... */

    /* Index: 0x0a, char: \x2a, offset: 0x0046 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0x40, /* .#...... */
    0xa0, /* #.#..... */
    0x00, /* ........ */

    /* Index: 0x0b, char: \x2b, offset: 0x004d */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x40, /* .#...... */
    0xe0, /* ###..... */
    0x40, /* .#...... */
    0x00, /* ........ */

    /* Index: 0x0c, char: \x2c, offset: 0x0054 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x40, /* .#...... */
    0xc0, /* ##...... */

    /* Index: 0x0d, char: \x2d, offset: 0x005b */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x0e, char: \x2e, offset: 0x0062 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */

    /* Index: 0x0f, char: \x2f, offset: 0x0069 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0xc0, /* ##...... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x10, char: \x30, offset: 0x0070 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x11, char: \x31, offset: 0x0077 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x12, char: \x32, offset: 0x007e */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x13, char: \x33, offset: 0x0085 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x60, /* .##..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */

    /* Index: 0x14, char: \x34, offset: 0x008c */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */

    /* Index: 0x15, char: \x35, offset: 0x0093 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */

    /* Index: 0x16, char: \x36, offset: 0x009a */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x17, char: \x37, offset: 0x00a1 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */

    /* Index: 0x18, char: \x38, offset: 0x00a8 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x19, char: \x39, offset: 0x00af */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */

    /* Index: 0x1a, char: \x3a, offset: 0x00b6 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x00, /* ........ */
    0x80, /* #....... */
    0x00, /* ........ */

    /* Index: 0x1b, char: \x3b, offset: 0x00bd */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */

    /* Index: 0x1c, char: \x3c, offset: 0x00c4 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x20, /* ..#..... */
    0x40, /* .#...... */
    0x80, /* #....... */
    0x40, /* .#...... */
    0x20, /* ..#..... */

    /* Index: 0x1d, char: \x3d, offset: 0x00cb */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x00, /* ........ */

    /* Index: 0x1e, char: \x3e, offset: 0x00d2 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x40, /* .#...... */
    0x20, /* ..#..... */
    0x40, /* .#...... */
    0x80, /* #....... */

    /* Index: 0x1f, char: \x3f, offset: 0x00d9 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x60, /* .##..... */
    0x00, /* ........ */
    0x40, /* .#...... */

    /* Index: 0x20, char: \x40, offset: 0x00e0 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xf0, /* ####.... */
    0x80, /* #....... */
    0xb0, /* #.##.... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x21, char: \x41, offset: 0x00e7 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x22, char: \x42, offset: 0x00ee */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xf0, /* ####.... */
    0x90, /* #..#.... */
    0xf0, /* ####.... */

    /* Index: 0x23, char: \x43, offset: 0x00f5 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x24, char: \x44, offset: 0x00fc */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */

    /* Index: 0x25, char: \x45, offset: 0x0103 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xc0, /* ##...... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x26, char: \x46, offset: 0x010a */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x27, char: \x47, offset: 0x0111 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xf0, /* ####.... */
    0x80, /* #....... */
    0xb0, /* #.##.... */
    0x90, /* #..#.... */
    0xf0, /* ####.... */

    /* Index: 0x28, char: \x48, offset: 0x0118 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x29, char: \x49, offset: 0x011f */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x2a, char: \x4a, offset: 0x0126 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x2b, char: \x4b, offset: 0x012d */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x2c, char: \x4c, offset: 0x0134 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x2d, char: \x4d, offset: 0x013b */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0xd0, /* ##.#.... */
    0xa0, /* #.#..... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x2e, char: \x4e, offset: 0x0142 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x90, /* #..#.... */
    0xd0, /* ##.#.... */
    0xb0, /* #.##.... */
    0x90, /* #..#.... */
    0x90, /* #..#.... */

    /* Index: 0x2f, char: \x4f, offset: 0x0149 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x30, char: \x50, offset: 0x0150 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x31, char: \x51, offset: 0x0157 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x32, char: \x52, offset: 0x015e */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x33, char: \x53, offset: 0x0165 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */

    /* Index: 0x34, char: \x54, offset: 0x016c */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x35, char: \x55, offset: 0x0173 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x36, char: \x56, offset: 0x017a */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x40, /* .#...... */

    /* Index: 0x37, char: \x57, offset: 0x0181 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0xa0, /* #.#..... */
    0xd0, /* ##.#.... */
    0x80, /* #....... */

    /* Index: 0x38, char: \x58, offset: 0x0188 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0x40, /* .#...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x39, char: \x59, offset: 0x018f */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x3a, char: \x5a, offset: 0x0196 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x40, /* .#...... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x3b, char: \x5b, offset: 0x019d */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0xc0, /* ##...... */

    /* Index: 0x3c, char: \x5c, offset: 0x01a4 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0xc0, /* ##...... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x3d, char: \x5d, offset: 0x01ab */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0xc0, /* ##...... */

    /* Index: 0x3e, char: \x5e, offset: 0x01b2 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x40, /* .#...... */
    0xa0, /* #.#..... */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x3f, char: \x5f, offset: 0x01b9 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */

    /* Index: 0x40, char: \x60, offset: 0x01c0 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x41, char: \x61, offset: 0x01c7 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x42, char: \x62, offset: 0x01ce */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xf0, /* ####.... */
    0x90, /* #..#.... */
    0xf0, /* ####.... */

    /* Index: 0x43, char: \x63, offset: 0x01d5 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x44, char: \x64, offset: 0x01dc */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */

    /* Index: 0x45, char: \x65, offset: 0x01e3 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xc0, /* ##...... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x46, char: \x66, offset: 0x01ea */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x47, char: \x67, offset: 0x01f1 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xf0, /* ####.... */
    0x80, /* #....... */
    0xb0, /* #.##.... */
    0x90, /* #..#.... */
    0xf0, /* ####.... */

    /* Index: 0x48, char: \x68, offset: 0x01f8 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x49, char: \x69, offset: 0x01ff */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x4a, char: \x6a, offset: 0x0206 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0x20, /* ..#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x4b, char: \x6b, offset: 0x020d */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x4c, char: \x6c, offset: 0x0214 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x4d, char: \x6d, offset: 0x021b */
    0x00, /* ........ */
    0x00, /* ........ */
    0xf0, /* ####.... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x4e, char: \x6e, offset: 0x0222 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x4f, char: \x6f, offset: 0x0229 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x50, char: \x70, offset: 0x0230 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x51, char: \x71, offset: 0x0237 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x52, char: \x72, offset: 0x023e */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0xa0, /* #.#..... */
    0xc0, /* ##...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x53, char: \x73, offset: 0x0245 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x80, /* #....... */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0xe0, /* ###..... */

    /* Index: 0x54, char: \x74, offset: 0x024c */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x55, char: \x75, offset: 0x0253 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */

    /* Index: 0x56, char: \x76, offset: 0x025a */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x40, /* .#...... */

    /* Index: 0x57, char: \x77, offset: 0x0261 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xf0, /* ####.... */

    /* Index: 0x58, char: \x78, offset: 0x0268 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0x40, /* .#...... */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */

    /* Index: 0x59, char: \x79, offset: 0x026f */
    0x00, /* ........ */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0xa0, /* #.#..... */
    0xe0, /* ###..... */
    0x40, /* .#...... */
    0x40, /* .#...... */

    /* Index: 0x5a, char: \x7a, offset: 0x0276 */
    0x00, /* ........ */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x20, /* ..#..... */
    0x40, /* .#...... */
    0x80, /* #....... */
    0xe0, /* ###..... */

    /* Index: 0x5b, char: \x7b, offset: 0x027d */
    0x00, /* ........ */
    0x00, /* ........ */
    0x60, /* .##..... */
    0x40, /* .#...... */
    0x80, /* #....... */
    0x40, /* .#...... */
    0x60, /* .##..... */

    /* Index: 0x5c, char: \x7c, offset: 0x0284 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */
    0x80, /* #....... */

    /* Index: 0x5d, char: \x7d, offset: 0x028b */
    0x00, /* ........ */
    0x00, /* ........ */
    0xc0, /* ##...... */
    0x40, /* .#...... */
    0x20, /* ..#..... */
    0x40, /* .#...... */
    0xc0, /* ##...... */

    /* Index: 0x5e, char: \x7e, offset: 0x0292 */
    0x00, /* ........ */
    0x00, /* ........ */
    0x00, /* ........ */
    0x50, /* .#.#.... */
    0xa0, /* #.#..... */
    0x00, /* ........ */
    0x00, /* ........ */

    /* Index: 0x5f, char: \x7f, offset: 0x0299 */
    0x00, /* ........ */
    0xe0, /* ###..... */
    0x00, /* ........ */
    0xa0, /* #.#..... */
    0x00, /* ........ */
    0x80, /* #....... */
    0x60, /* .##..... */
};

const font_char_desc_t _fonts_pixie_4x7_ppp_descriptors[] = {
    { 0x04, 0x0000 }, /* Index: 0x00, char: \x20 */
    { 0x04, 0x0007 }, /* Index: 0x01, char: \x21 */
    { 0x04, 0x000e }, /* Index: 0x02, char: \x22 */
    { 0x04, 0x0015 }, /* Index: 0x03, char: \x23 */
    { 0x04, 0x001c }, /* Index: 0x04, char: \x24 */
    { 0x04, 0x0023 }, /* Index: 0x05, char: \x25 */
    { 0x04, 0x002a }, /* Index: 0x06, char: \x26 */
    { 0x04, 0x0031 }, /* Index: 0x07, char: \x27 */
    { 0x04, 0x0038 }, /* Index: 0x08, char: \x28 */
    { 0x04, 0x003f }, /* Index: 0x09, char: \x29 */
    { 0x04, 0x0046 }, /* Index: 0x0a, char: \x2a */
    { 0x04, 0x004d }, /* Index: 0x0b, char: \x2b */
    { 0x04, 0x0054 }, /* Index: 0x0c, char: \x2c */
    { 0x04, 0x005b }, /* Index: 0x0d, char: \x2d */
    { 0x04, 0x0062 }, /* Index: 0x0e, char: \x2e */
    { 0x04, 0x0069 }, /* Index: 0x0f, char: \x2f */
    { 0x04, 0x0070 }, /* Index: 0x10, char: \x30 */
    { 0x04, 0x0077 }, /* Index: 0x11, char: \x31 */
    { 0x04, 0x007e }, /* Index: 0x12, char: \x32 */
    { 0x04, 0x0085 }, /* Index: 0x13, char: \x33 */
    { 0x04, 0x008c }, /* Index: 0x14, char: \x34 */
    { 0x04, 0x0093 }, /* Index: 0x15, char: \x35 */
    { 0x04, 0x009a }, /* Index: 0x16, char: \x36 */
    { 0x04, 0x00a1 }, /* Index: 0x17, char: \x37 */
    { 0x04, 0x00a8 }, /* Index: 0x18, char: \x38 */
    { 0x04, 0x00af }, /* Index: 0x19, char: \x39 */
    { 0x04, 0x00b6 }, /* Index: 0x1a, char: \x3a */
    { 0x04, 0x00bd }, /* Index: 0x1b, char: \x3b */
    { 0x04, 0x00c4 }, /* Index: 0x1c, char: \x3c */
    { 0x04, 0x00cb }, /* Index: 0x1d, char: \x3d */
    { 0x04, 0x00d2 }, /* Index: 0x1e, char: \x3e */
    { 0x04, 0x00d9 }, /* Index: 0x1f, char: \x3f */
    { 0x04, 0x00e0 }, /* Index: 0x20, char: \x40 */
    { 0x04, 0x00e7 }, /* Index: 0x21, char: \x41 */
    { 0x04, 0x00ee }, /* Index: 0x22, char: \x42 */
    { 0x04, 0x00f5 }, /* Index: 0x23, char: \x43 */
    { 0x04, 0x00fc }, /* Index: 0x24, char: \x44 */
    { 0x04, 0x0103 }, /* Index: 0x25, char: \x45 */
    { 0x04, 0x010a }, /* Index: 0x26, char: \x46 */
    { 0x04, 0x0111 }, /* Index: 0x27, char: \x47 */
    { 0x04, 0x0118 }, /* Index: 0x28, char: \x48 */
    { 0x04, 0x011f }, /* Index: 0x29, char: \x49 */
    { 0x04, 0x0126 }, /* Index: 0x2a, char: \x4a */
    { 0x04, 0x012d }, /* Index: 0x2b, char: \x4b */
    { 0x04, 0x0134 }, /* Index: 0x2c, char: \x4c */
    { 0x04, 0x013b }, /* Index: 0x2d, char: \x4d */
    { 0x04, 0x0142 }, /* Index: 0x2e, char: \x4e */
    { 0x04, 0x0149 }, /* Index: 0x2f, char: \x4f */
    { 0x04, 0x0150 }, /* Index: 0x30, char: \x50 */
    { 0x04, 0x0157 }, /* Index: 0x31, char: \x51 */
    { 0x04, 0x015e }, /* Index: 0x32, char: \x52 */
    { 0x04, 0x0165 }, /* Index: 0x33, char: \x53 */
    { 0x04, 0x016c }, /* Index: 0x34, char: \x54 */
    { 0x04, 0x0173 }, /* Index: 0x35, char: \x55 */
    { 0x04, 0x017a }, /* Index: 0x36, char: \x56 */
    { 0x04, 0x0181 }, /* Index: 0x37, char: \x57 */
    { 0x04, 0x0188 }, /* Index: 0x38, char: \x58 */
    { 0x04, 0x018f }, /* Index: 0x39, char: \x59 */
    { 0x04, 0x0196 }, /* Index: 0x3a, char: \x5a */
    { 0x04, 0x019d }, /* Index: 0x3b, char: \x5b */
    { 0x04, 0x01a4 }, /* Index: 0x3c, char: \x5c */
    { 0x04, 0x01ab }, /* Index: 0x3d, char: \x5d */
    { 0x04, 0x01b2 }, /* Index: 0x3e, char: \x5e */
    { 0x04, 0x01b9 }, /* Index: 0x3f, char: \x5f */
    { 0x04, 0x01c0 }, /* Index: 0x40, char: \x60 */
    { 0x04, 0x01c7 }, /* Index: 0x41, char: \x61 */
    { 0x04, 0x01ce }, /* Index: 0x42, char: \x62 */
    { 0x04, 0x01d5 }, /* Index: 0x43, char: \x63 */
    { 0x04, 0x01dc }, /* Index: 0x44, char: \x64 */
    { 0x04, 0x01e3 }, /* Index: 0x45, char: \x65 */
    { 0x04, 0x01ea }, /* Index: 0x46, char: \x66 */
    { 0x04, 0x01f1 }, /* Index: 0x47, char: \x67 */
    { 0x04, 0x01f8 }, /* Index: 0x48, char: \x68 */
    { 0x04, 0x01ff }, /* Index: 0x49, char: \x69 */
    { 0x04, 0x0206 }, /* Index: 0x4a, char: \x6a */
    { 0x04, 0x020d }, /* Index: 0x4b, char: \x6b */
    { 0x04, 0x0214 }, /* Index: 0x4c, char: \x6c */
    { 0x04, 0x021b }, /* Index: 0x4d, char: \x6d */
    { 0x04, 0x0222 }, /* Index: 0x4e, char: \x6e */
    { 0x04, 0x0229 }, /* Index: 0x4f, char: \x6f */
    { 0x04, 0x0230 }, /* Index: 0x50, char: \x70 */
    { 0x04, 0x0237 }, /* Index: 0x51, char: \x71 */
    { 0x04, 0x023e }, /* Index: 0x52, char: \x72 */
    { 0x04, 0x0245 }, /* Index: 0x53, char: \x73 */
    { 0x04, 0x024c }, /* Index: 0x54, char: \x74 */
    { 0x04, 0x0253 }, /* Index: 0x55, char: \x75 */
    { 0x04, 0x025a }, /* Index: 0x56, char: \x76 */
    { 0x04, 0x0261 }, /* Index: 0x57, char: \x77 */
    { 0x04, 0x0268 }, /* Index: 0x58, char: \x78 */
    { 0x04, 0x026f }, /* Index: 0x59, char: \x79 */
    { 0x04, 0x0276 }, /* Index: 0x5a, char: \x7a */
    { 0x04, 0x027d }, /* Index: 0x5b, char: \x7b */
    { 0x04, 0x0284 }, /* Index: 0x5c, char: \x7c */
    { 0x04, 0x028b }, /* Index: 0x5d, char: \x7d */
    { 0x04, 0x0292 }, /* Index: 0x5e, char: \x7e */
    { 0x04, 0x0299 }, /* Index: 0x5f, char: \x7f */
};

const font_info_t _fonts_pixie_4x7_ppp_info =
{
    .height           = 7, /* Character height */
    .c                = 0, /* C */
    .char_start       = 32, /* Start character */
    .char_end         = 127, /* End character */
    .char_descriptors = _fonts_pixie_4x7_ppp_descriptors, /* Character descriptor array */
    .bitmap           = _fonts_pixie_4x7_ppp_bitmaps, /* Character bitmap array */
};

#endif /* _EXTRAS_FONTS_FONT_PIXIE_4X7_PPP_H_ */

9、脚本和模板下载附件:

template.c (1.7 KB, 下载次数: 1)


回复

2万

帖子

71

资源

管理员

谢谢分享:)

个人签名

不管是哪年,都要加油!继续为中国电子行业做出小小的贡献吧! 扣扣 1206973913


回复

1164

帖子

0

资源

纯净的硅(中级)

楼主给的网站很好,需要字体的可以看看去。


回复

64

帖子

0

资源

一粒金砂(中级)

牛啊牛啊

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    Nor Flash工作时电源纹波过大

    正在使用一款MX25L12805D 的Nor Flash芯片,程序固件烧录在里面,主芯片boot时候读取改芯片时候,发现电流纹波挺大, 加了470 ...

    再见2019,你好2020”+从技术高工到采购研发的转变

    在过去2019年的一年里: 1、从技术工程师到公司采购技术专业负责人的转变 2、学到了一些采购时的一些谈判技巧 3、从技术 ...

    CircuitPython 电子钟

    用ItsyBitsy M0 Express开发板和铜丝制作的电子钟,使用CircuitPython编程 https://hackaday.io/project/165822-circ ... ...

    嵌入式系统编程定义和应用

    简单来说,嵌入式技术是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗 ...

    C2000 ePWM模块

    以TMS320F28030为例,其它型号可能有差异,不过大同小异。 在TI C2000 DSP中,PWM模块是一个独立的模块,并没有算作通用定时 ...

    msp430的编程器和仿真器

    对于MSP430来说,无论仿真还是烧写程序一般可以通过:JTAG、SBW、BSL接口进行。JTAG、SBW接口可以用于仿真接口,BSL接口不能用 ...

    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表