基于 RA8870 控制器的液晶模块自定义符号和图形的显示 方法 【技术领域】
本发明属于彩色液晶显示模块的汉字显示技术领域, 具体涉及一种基于 RA8870 控制器的液晶显示模块用户自定义的、 任意尺寸的汉字字符和图形符号的显示方法。背景技术
目前, TFT 液晶显示模块质量轻、 厚度薄, 辐射少, 数字化, 被广泛应用在智能仪器 仪表领域。 在智能仪器仪表上, 液晶显示模块用于监控参数数值显示、 实时参数曲线显示和 提供报警信息, 因此, 不同字体、 不同大小的文字或符号提示必不可少。
RA8870 控制器是瑞佑科技有限公司 (RAiO Technology Inc.) 出品的一款文字 / 图形 TFT 液晶控制器, 支持 640×480 点分辨率的数字或模拟 TFT 液晶显示模块。RA8870 内 置了 ISO8859 的 4 种字体的字母及符号 1024 个, 以半字型 8×16 点阵模式显示。另外, 它 提供了按照 GB-2312 和 BIG-5 编码访问外部汉字字型 ROM 的功能, 以全字型 16×16 点阵模 [1] 式显示 。金鹏实业有限公司出品的彩色显示模块 OCM480272T430 采用了 RA8870 控制器 作为驱动器件, 该模块提供了 GB-2312 及 BIG-5 编码的外部 16×16 点阵宋体字型字库 [2]。 RA8870 控制器具有完善的西文显示模式, 提供了 4 种字体、 1024 个 16×8 的点阵字符库, 其 放大、 旋转等附加功能, 西文显示基本能够满足智能仪器仪表应用的需要。 在汉字字符显示 方面, 它支持 16×16 点全字型显示模式, 由于汉字字库 ROM 通常存储一种字体的字型点阵 库, 不能满足不同风格字体多样化显示的需求 ; 另外, 虽然在 RA8870 控制器下可以实现把 显示字符以固定倍数放大, 但是由于字体膨胀, 字符字型显示点阵变得稀疏, 缺乏美感, 另 一方面, 也不能满足用户自行定义的字符和图形显示要求。
以下是申请人检索的相关参考文献 :
【1】 RA8870 文字 / 图形 TFT LCD 控制器规格书 (Version 1.1A), 2010, 9;
【2】 OCM480272T430-1B 彩屏带触摸屏说明书, 金鹏实业有限公司。 发明内容 针对目前基于 RA8870 控制器的液晶显示模块只能显示 16×8 半字型和 16×16 全 字型的不足, 本发明的目的在于, 提供一种 RA8870 控制器的自定义大尺寸和字体的字符和 图形符号显示方法。
为了实现上述任务, 本发明采用如下的技术解决方案 :
一种 RA8870 控制器的自定义大尺寸和字体的字符和图形符号显示方法, 其特征 在于, 该方法首先构建显示字符或图形符号的字型点阵, 以 RA8870 控制器的 16×8 半字型 和 16×16 全字型基本显示模式为基础, 把自定义的字符点阵字型分割成 16×8 的半字型子 字型块, 并进行编码 ; 显示时, 首先把需要显示的字型以子字型模块的编码形式, 按字型结 构特征及拟定的顺序依次读入 RA8870 控制器的 CGROM, 并确定每个子字型模块在 CGROM 中 的编号 ; 其次, 指定该字符在液晶模块上的显示起始位置, 按照自定义字符或图形的结构,
通过显示位置计算公式, 计算出每个子字型模块显示位置 ; 然后, 采用半字型或全字型方式 的调用方式, 把 CGROM 中的子字型模块按指定显示位置调入 DDRAM, 实现显示字符的字型装 配, 在液晶显示模块上呈现完整的字符和图形。
所述的字型模块的编码是行形式的二进制编码, 字型点阵中需显示的点定义为 1, 无需显示的点定义为 0 ; 需要反色显示时, 则反之 ; 每 8 位二进制构造一个编码, 一个子字型 模块由 16 个 8 位二进制编码构成。
所述的自定义字型点阵的字高是 16 的整数倍, 字宽是 8 的整数倍, 不是整数倍数 时, 在构建字型点阵时用 0 补足 8 位。
所述的自定义字型点阵分割方法是 :
把自定义字型点阵按照 8×16 点阵分解成若干个子模块, 称为子字型模块。然后, 对每个子模块编码, 构成 16 个字节的子字型模块编码。
自定义字符或图形的显示方法是 :
(1) 把自定义字型点阵写入 RA8870 的 CGRAM, 具体步骤 : 设置 RA8870 设置为图形 模式, 设置 CGRAM 控制寄存器为允许写入 CGRAM 状态, 指定字型点阵写入 CGRAM 的区域, 依 次把字型模块的 16 个字节编码存入 CGRAM 的指定区域, 每次写入一个子模块编码。并把每 个子模块按其在 CGRAM 的存储顺序编号。
(2) 写入 CGRAM 时, 按照显示字符或图形的结构特征, 自左向右、 自上而下各个子 模块的编码按指定顺序写入。
(3) 自定义字符或图形显示, 具体步骤为 : 把 RA8870 设置为文本模式, 设置文字控 制寄存器 0 使 RA8870 选择 CGRAM 字型, 选择显示存储区 DDRAM 的写入区域, 指定字符或图 形在液晶模块的显示位置坐标, 从 CGRAM 中提取字型编码到 DDRAM。
(4) 字符或图形显示时, 按照自定义字符和图形的结构特征, 定位显示位置坐标, 把字型点阵子模块编码传送到 DDRAM。
(5) 从 CGRAM 提取字型编码的方式 : 以 RA8870 的半字型或全字型模式提取。
以 RA8870 的半字型模式提取 : 设置 RA8870 为显示半型字, 把子模块在 CGRAM 中的 编号传送给 RA8870, RA8870 控制器会自动从 CGROM 中提取该子模块的点阵信息到液晶模块 的指定位置显示。
以 RA8870 的全字型模式提取 : 设置 RA8870 为显示半型字, 把子模块在 CGRAM 中的 编号传送给 RA8870, RA8870 控制器会自动从 CGROM 中提取该子模块以及下一个子模块的点 阵信息到液晶模块的指定位置显示。 附图说明
图 1 为一个自定义字符的字型点阵示意图 ;
图 2 为一个自定义字符的字型点阵的分割示意图 ;
图 3 为一个子模块的字型点阵编码示意图 ;
图 4 为字型点阵子模块在 CGRAM 中的存储和编号示意图 ;
图 5 为自定义字符或图形的字型点阵编码送入 CGRAM 的流程图。
图 6 为一个字符或图形以半型字方式显示的操作流程。
图 7 为一个字符或图形以全型字方式显示的操作流程。下面结合附图对本发明进一步说明。具体实施方式
按照本发明的技术方案, 实现本发明方法具体包括自定义字符或图形的字型点阵 创建、 字型点阵的子模块分割、 子模块装入 CGRAM、 自定义字符和图形的显示。
所述字型点阵创建方法是 :
自定义的字符或图形须转换成字型点阵, 其点阵维数为 M×N, 其中 M 是 16 的整数 倍, N 是 8 的整数倍, 设 m = M/16, n = N/8。
一个自定义汉字字符的字型点阵如图 1 所示, 图 1 中自定义字体为行书的汉字 “雪” 的 32×32 字型点阵。图中黑色点为显示部分, 反色显示时, 反之。在构建字型点阵时, 若 M 和 N 不能满足 16 和 8 整数倍的要求时, 用非显示色补足。
所述的字型点阵的子模块分割方法是 :
把字型点阵分割为 16 行、 8 列的一系列子模块, 分割 M×N 维字型点阵可以得到 m×n 个子模块, 并按字型点阵结构形式自左向右、 自上而下给每个模块编号。如图 2 所示, 32×32 字型点阵可分割为 8 个 16×8 的子模块①~⑧。 为了把字型点阵信息送入 RA8870 的 CGRAM, 需要对每个字型点阵子模块进行编 码, 图 3 为其中一个子模块的点阵字型编码示意图, 编码时, 图中的黑色方块为二进制数 1, 图中的黑色方块为二进制数 0, 字型点阵子模块的每一行为 8 位, 编码可写成 2 位十六进制 数, 如图中第一行字型点阵的二进制编码为 11111000, 写成十进制数为 0xF8. 每一个子模 块的编码为 16 个, 顺序自上而下。
所述的子模块装入 CGRAM 的方法是 :
按子模块编号顺序地把各个子模块的编码送入 CGRAM 中, 图 4 为子模块送入 CGRAM 后的示意图。图 5 为自定义字符或图形的字型点阵编码送入 CGRAM 的流程图。具体的操作 流程如下 :
(1) 设置 RA8870 设置为图形模式 : 把 RA8870 的 CGRAM 写入控制器 0(MWCR0) 的最 高位 TX_MD 清零,
(2) 设置 RA8870 的 CGRAM 为允许写入状态, 设置 RA8870 的 CGRAM 写入控制器 1(MWCR1)WR_DS1 为 0, WR_DS0 为 1。
(3) 指定字符字型点阵的写入区域, 通过设定 RA8870 的 CGRAM 设定寄存器内容 (CGSR) 实现, 即指定字型点阵在 CGRAM 存储区编号, 编号取值 : 0x00 ~ 0xFF。
RA8870 的 CGRAM 每个存储区域的大小为 16 个单元, 因此, 每个存储区域存储一个 字符字型点阵子模块。多个子模块需要多次进行写入 CGRAM 操作。
(4) 把一个字符字型点阵子模块写入 RA8870 的 CGRAM 指定存储区域时, 首先执行 GCRAM 写入命令, 写入 CGRAM 读 / 写命令寄存器 (MRWC)。然后, 依次把字符字型点阵子模块 的编码以每次一个字节的形式, 分 16 次写入指定 CGRAM 的存储区域。
(5) 多个字型点阵子模块写入 CGRAM 的操作, 重复上述步骤 (3)、 步骤 (4) 两步。
(6) 多个自定义字型点阵的写入, 重复步骤 (3)、 步骤 (4)、 步骤 (5)。
所述自定义字符或图形显示方法是 :
( 一 ) 字符或图形以半型字方式显示
字符或图形以半型字方式显示是把存储在 RA887 的 CGRAM 中的各子模块, 以 RA8870 定义的全半字型方式 (16×8 点阵 ), 按预先设置的顺序依次调入 DDRAM, 重新组装各 字型点阵子模块, 以完整字符或图形的形式显现在液晶显示模块上。图 6 为一个字符或图 形以半型字方式显示的操作流程。具体步骤是 :
(1) 分割字符或图形为子模块之后, 按照字符和图形的构造确定子模块的个数, 共 m 行 ×n 列个 16×8 个字型点阵子模块, 确定字型点阵子模块行数 m, 列数 n。
(2) 设置字符显示的背景和字体颜色 : 设置 RA8870 的文字前景颜色寄存器 (TFCR) 和文字背景颜色寄存器 (TBCR)。
(3) 设置 RA8870 的模式为文本模式 : 把 GCRAM 存储器写入控制器 0(MWCR0) 的最 高位置 1。
(4) 设置字符的显示模式, 即从 CGRAM 中提取字符字型点阵到 DDRAM 的方式, 显示 模式由文字控制寄存器 0(FNCR0) 的第六位 FS_S 设置 : 半字型方式时, FS_S 设置为 0。
(5) 确定字符显示的起始位置 (x0, y0)。确定字型点阵子模块的起始编号, 行j= 0, 列 i = 0。
(6) 设置字型点阵库的位置位于 RA8870 的 CGRAM : 文字控制寄存器 0(FNCR0) 的第 七位 FT_S 设置为 1。
(7) 选择写入字型点阵的目的存储区域 : 设置目的存储区域为 BANK1 和 BANK2, 由 CGRAM 写入控制寄存器 1(MWCR1) 的第三位 WR_DS1 和第二位 WR_DS0 确定, WR_DS1 和 WR_DS0 均设置为 0。
(8) 设置字符显示的图层 : 由 CGRAM 写入控制寄存器 1(MWCR1) 的最低位 WR_L 确 定, WR_L 设置为 0 时, 选择图层 1。
(9) 求字符显示位置坐标 (x, y)。
设字符在液晶模块显示的起始位置 (x0, y0)
在某一行显示的字型点阵子模块显示位置坐标 (x, y) 按下式计算 :
x = x0+i×8
y = y0
即: 子模块在同一行显示时, 纵坐标 y 保持不变, 横坐标 x 在上一个子模块位置基 础上递增 8 个像素。
根据字符和图形的构造装配字型点阵子模块时, 字型点阵子模块需换行显示, 换 行显示的起始坐标为按下式计算 :
x0 = x0
y0 = y0+16
即: 换行显示时, 子模块显示起始位置的横坐标 x 保持不变, 纵坐标 y 在上一行显 示位置的基础上递增 16 个像素。
(10) 通过 RA8870 的坐标设置寄存器设置字型点阵子模块的显示位置。
横坐标 x 由水平坐标寄存器 (CURH1, CURH0) 设置 ;
横坐标 y 由水平坐标寄存器 (CURV1, CURV0) 设置。
(11) 从 CGRAM 中按编号取字型点阵子模块, 然后写入 DDRAM, 字型点阵子模块显示 在液晶显示模块上。(12) 换行显示时, 需要重新设置字型点阵库的位置、 目的存储区和显示图层。
( 二 ) 字符或图形以全型字方式显示
字符或图形以全型字方式显示是把存储在 RA8870 的 CGRAM 中的各子模块, 以 RA8870 定义的全字型方式 (16×16 点阵 ), 按预先设置的顺序和字符或图形的结构, 依次调 入 DDRAM, 重新组装字型点阵子模块, 以完整字符或图形的形式显现在液晶显示模块上。全 型字方式显示时, 每给一个字型点阵子模块编号, 将提取从此编号开始的 2 个字型点阵子 模块的编码, 在液晶显示模块上显示一个 16×16 点阵的图形。图 7 为一个字符或图形以全 型字方式显示的操作流程。具体步骤是 :
(1) 分割字符或图形为子模块之后, 按照字符和图形的构造确定子模块的个数, 共 m 行 ×n 列个 16×8 个字型点阵子模块, 确定字型点阵子模块行数 m, 列数 n。
(2) 设置字符显示的背景和字体颜色 : 设置 RA8870 的文字前景颜色寄存器 (TFCR) 和文字背景颜色寄存器 (TBCR)。
(3) 设置 RA8870 的模式为文本模式 : 把 GCRAM 存储器写入控制器 0(MWCR0) 的最 高位置 1。
(4) 设置字符的显示模式, 即从 CGRAM 中提取字符字型点阵到 DDRAM 的方式, 显示 模式由文字控制寄存器 0(FNCR0) 的第六位 FS_S 设置 : 全字型方式时, FS_S 设置为 1。 (5) 确定字符显示的起始位置 (x0, y0)。确定字型点阵子模块的起始编号, 行j= 0, 列 i = 0。
(6) 设置字型点阵库的位置位于 RA8870 的 CGRAM : 文字控制寄存器 0(FNCR0) 的第 七位 FT_S 设置为 1。
(7) 选择写入字型点阵的目的存储区域 : 设置目的存储区域为 BANK1 和 BANK2, 由 CGRAM 写入控制寄存器 1(MWCR1) 的第三位 WR_DS1 和第二位 WR_DS0 确定, WR_DS1 和 WR_DS0 均设置为 0。
(8) 设置字符显示的图层 : 由 CGRAM 写入控制寄存器 1(MWCR1) 的最低位 WR_L 确 定, WR_L 设置为 0 时, 选择图层 1。
(9) 求字符显示位置坐标 (x, y)。
设字符在液晶模块显示的起始位置 (x0, y0)
在某一行显示的字型点阵子模块显示位置坐标 (x, y) 按下式计算 :
x = x0+i×16
y = y0
即: 子模块在同一行显示时, 纵坐标 y 保持不变, 横坐标 x 在上一个子模块位置基 础上递增一个全字型字宽—— 16 个像素。
根据字符和图形的构造装配字型点阵子模块时, 字型点阵子模块需换行显示, 换 行显示的起始坐标为按下式计算 :
x0 = x0
y0 = y0+16
即: 换行显示时, 子模块显示起始位置的横坐标 x 保持不变, 纵坐标 y 在上一行显 示位置的基础上递增 16 个像素。
(10) 通过 RA8870 的坐标设置寄存器设置字型点阵子模块的显示位置。
横坐标 x 由水平坐标寄存器 (CURH1, CURH0) 设置 ;
横坐标 y 由水平坐标寄存器 (CURV1, CURV0) 设置。
(11) 从 CGRAM 中按编号取字型点阵子模块, 然后写入 DDRAM, 字型点阵子模块显示 在液晶显示模块上。
(12) 换行显示时, 需要重新设置字型点阵库的位置、 目的存储区和显示图层。