跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

FPGA 工程实践:GB2312 中文字符集与字库存储

FPGA 工程中 LCD 显示模块的硬件连接方式,详细解析了 GB2312 简体中文字符集的编码规则、分区结构及字节表示方法,并阐述了字模在 Flash 中的存储寻址原理及空间计算。

AiEngineer发布于 2026/4/6更新于 2026/10/1999 浏览
FPGA 工程实践:GB2312 中文字符集与字库存储

装配说明

本实例工程除了 SF-VIP 核心板,还需要 SF-USB 子板以及 SF-L70 子板用于驱动 LCD 显示。SF-USB 子板的 USB-TypeA(P4)用 USB 线连接 PC,整个系统的装配连接如图 16-2 所示。VIP 核心板的 P2 插座连接到 SF-USB 子板的 P1 插座,VIP 核心板的 P4 插座连接到 SF-L70 子板的 P3 插座。SF-USB 子板通过 UART-USB 插座 P4 连接到 PC 机,同时该板的 SD 卡槽上需要插入一张标准的 SD 卡。而 SF-L70 子板的 P1 和 P2 插座则分别连接到 7 寸液晶屏的触摸屏和 40PIN FPC 连接器上。

文章配图

GB2312 中文字符集简介

1. 概述

GB2312 是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集——基本集》,由中国国家标准总局发布,1981 年 5 月 1 日实施。GB2312 编码通行于大陆,新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持 GB2312。

GB2312 标准共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个;同时,GB2312 收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄罗斯语西里尔字母在内的 682 个全形字符。GB2312 的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖 99.75% 的使用频率。

2. 分区表示

GB2312 中对所收汉字进行了'分区'处理,每区含有 94 个汉字或符号。这种表示方式也称为区位码。

  • 01~09 区为特殊符号。
  • 16~55 区为一级汉字,按拼音排序。
  • 56~87 区为二级汉字,按部首/笔画排序。
  • 1015 区及 8894 区则未有编码。

举例来说,'啊'字是 GB2312 之中的第一个汉字,它的区位码就是 1601。

3. 字节结构

在使用 GB2312 的程序中,通常采用 EUC 储存方法,以便兼容于 ASCII。每个汉字及符号以两个字节来表示。第一个字节称为'高位字节'(或称 MSB),第二个字节称为'低位字节'(或称 LSB)。

'高位字节'使用了 0xA10xF7(把 0187 区的区号加上 0xA0)区间的数据进行编码,'低位字节'使用了 0xA10xFE(把 0194 加上 0xA0)区间的数据进行编码。

例如'啊'字在大多数程序中,会以 0xB0A1 储存(由区位码计算为:0xB0=0xA0+16,0xA1=0xA0+1)。

结合前面的分区,我们可以将 GB2312 的编码规则归纳如下。

  • 每个汉字或符号用 2 个字节表示,高字节代表其所在分区,低字节代表具体的编码值。
  • 编码高字节,即分区字节的取值范围是 0xA1~0xF7,共 94 个可用的分区。
  • 编码低字节,即具体的编码值取值范围是 0xA1~0xFE,共 94 个可用编码值。

对于分区字节,又分为以下几个部分。

  • 0xA1~0xA9 区为特殊符号。
  • 0xB0~0xD7 区为一级汉字,按拼音排序。
  • 0xD8~0xF7 区为二级汉字,按部首/笔画排序。
  • 0xAA~0xAF 区及 0xF8-0xFE 区则未有编码。

4. 字模显示原理

如图 16-3 所示,这是某字符取模软件的截图。它大体示意出了字模显示的基本原理。通常,我们若希望在液晶屏上显示出一个字符,比如这个字符是分辨率为 64×32 的'A',那么在这个显示区域内,我们就必须有 64×32 个像素点对应的色彩数据来表示这个字符。当然,每个像素点的色彩可以用 24bit(RGB888)表示,也可以用 16bit(RGB565)表示。但是,从最经济实用的角度来看,我们还是愿意用最小的数据量去表示最重要的特征信息。因此,通常的字模只会花 1bit 来表示 1 个像素点。1bit 的数据可以是 0,也可以是 1,我们可以假设代表某个像素点的 1bit 为 1 时,显示图示的白色;为 0 时,显示图示的黑色。当然了,我们不会这么'土得掉牙'地让这些字符在我们的液晶屏上只显示黑白,我们可以换任何我们期望的颜色,这是后话,设计中我们可以变通。那么,对于 64×32 分辨率的字符'A',我们需要 64×32bit,即 256B 数据就可以表示出来。

文章配图

我们这个实例中涉及的 GB2312 中文字符分别有 3 种分辨率大小,即 16×16、32×32 和 64×64,它们所需要的 Flash 存储空间计算如表 16-1 所示。

文章配图

5. 实际字库存储结构

标准的 GB2312 码,出于'节能减排'的需要,我们不管它们的编码如何,字模数据一定是按顺序依次排列的。因此,对于给定的高字节为 MSB、低字节为 LSB 的 GB2312 码,它在我们的字库中的寻址换算为:(((MSB-0xa1)×0x5e)+(LSB-0xa1))。

由于 GB2312 中并没有定义 ASCII 码,而我们实际的工程使用中通常会非常频繁地使用 ASCII 码。ASCII 码只有 1 个字节表示,取值为 0x00~0x7F。因此,我们在原有的 GB2312 标准字库字模中人为地插入一些我们 ASCII 码对应的字库。

如图 16-4 所示,在 GB2312 定义的 0xA4 分区中,这些符号恐怕我们这辈子都用不上,那么我们就考虑直接将 ASCII 码的字模存放在这个区域。从 0x21~0x7f 对应的 ASCII 码为'!#$%&'0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]'。

目录

  1. 装配说明
  2. GB2312 中文字符集简介
  3. 1. 概述
  4. 2. 分区表示
  5. 3. 字节结构
  6. 4. 字模显示原理
  7. 5. 实际字库存储结构

更多推荐文章

查看全部
  • AutoResearch:Karpathy 用 630 行 Python 代码实现 AI 自主研究框架
  • Vivado 与 Modelsim 联合仿真环境配置指南
  • Proxmox VE (PVE) 下载和安装 Kali Linux 教程
  • 基于 Numpy 实现感知机模型构建与训练详解
  • Flux 模型本地化部署指南:低显存设备运行方案
  • Trae IDE 安装与使用指南:AI 原生开发环境详解
  • 人工智能、机器学习与深度学习的真正区别
  • 二分查找经典例题解析
  • DeepSeek 深度使用指南:提示词技巧与本地知识库搭建
  • OpenREALM:无人机实时映射框架的技术深度解析
  • 百度 AI 产品经理实习面试常见问题与解答
  • Python 自动化测试入门:编写与运行测试用例
  • 数据结构入门:顺序表的实现与原理
  • C++类型约束实战精要
  • LazyLLM 多 Agent 应用全流程实践:从源码部署到可视化 Web 调试的低代码方案
  • 数据库迁移 TCO 全景账本:MySQL 替代中的隐性成本与工程化工具链实测
  • Python 宠物美容服务预约档案系统设计与可视化
  • C++入门:输入输出、缺省参数与函数重载详解
  • Java 对象比较详解:基本类型与自定义类实现
  • OpenClaw 完整安装与配置:Minimax/DeepSeek 模型及飞书机器人接入

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online