首页 > 解决方案 > 如何在lcd中显示粗体字

问题描述

我正在研究需要在液晶显示器上显示一些字符串的项目。

我创建了二维数组,其十六进制值对应于每个工作正常的字符。但我无法弄清楚如何以粗体显示某些字符。

char pixel[10][5] = { 
  {0x7E, 0x11, 0x11, 0x11, 0x7E},  // hex values to display A
  {0x7F, 0x49, 0x49, 0x49, 0x36}   //hex values to display B
};

使用这些十六进制值,我在液晶显示器上得到 A 和 B。但我需要显示 A 和 B(粗体)。

标签: c++fontsarduinolcd

解决方案


看起来您的像素数组包含 5x7 或 5x8 字符矩阵的像素列,最低位在顶行,左列在前。

两条线似乎产生

.XXX. = bit x1
X...X = bit x2
X...X = bit x4
X...X = bit x8
XXXXX = bit 1x
X...X = bit 2x
X...X = bit 4x
..... = bit 8x

XXXX.
X...X
X...X
XXXX.
X...X
X...X
XXXX.
.....

要获得粗体字符,您必须考虑如何显示这些字符。在 5x7 矩阵中,可能无法以粗体显示所有字母,例如M. 对于 A 和 B,您可以尝试将模式/数字用于如下模式:

.XXX.
XX.XX
XX.XX
XX.XX
XXXXX
XX.XX
XX.XX
.....

{0x7E, 0x7F, 0x11, 0x7F, 0x7E}

或者

XXXX.
XX.XX
XX.XX
XXXX.
XX.XX
XX.XX
XXXX.
.....

{0x7F, 0x7F, 0x49, 0x7F, 0x36}

自动生成粗体字符

如果字符像素之间有足够的背景像素,则可以通过将点向右移动 1 并使用将原始值和移位值与 bitwise 结合使用,从常规字符中自动生成粗体字符的字体(字符生成器)or

对于具有 3 条垂直线的字符,这种自动生成固定宽度字符可能很困难,因为您需要 9 个像素才能为字符间空间提供 1 列。如果您想要 8 像素宽度,一个简单的算法可以清除最右边的列,但手动修改可能会产生更好的结果。

M常规示例

X.....X..
XX...XX..
X.X.X.X..
X..X..X..
X..X..X..
X..X..X..
X..X..X..

M向右移动

.X.....X.
.XX...XX.
.X.X.X.X.
.X..X..X.
.X..X..X.
.X..X..X.
.X..X..X.

M按位或

XX....XX.
XXX..XXX.
XXXXXXXX.
XX.XX.XX.
XX.XX.XX.
XX.XX.XX.
XX.XX.XX.
.........

M按位或,最后一列清除

XX....X.
XXX..XX.
XXXXXXX.
XX.XX.X.
XX.XX.X.
XX.XX.X.
XX.XX.X.
........

8x8 的手工修正看起来更好

XX...XX.
XXX.XXX.
XXXXXXX.
XX.X.XX.
XX.X.XX.
XX.X.XX.
XX.X.XX.
........

LCD 的库可能包含一个字体表。也许已经存在支持粗体字符的库。

搜索“arduino lcd bold”带来了最高结果:https ://forum.arduino.cc/index.php?topic=458712.0


推荐阅读