如何在LCD中显示粗体字符

时间:2019-01-29 13:09:39

标签: c++ fonts arduino lcd

我正在研究需要在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(以粗体显示)。

1 个答案:

答案 0 :(得分:1)

您的像素阵列似乎包含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}

自动生成粗体字符

如果在字符像素之间有足够的背景像素,可以通过将点向右移一格并结合使用原始值和移位值来自动从常规字符生成粗体字符的字体(字符生成器)。按位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