c++ - 如何在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(粗体)。
解决方案
看起来您的像素数组包含 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
推荐阅读
- spring - 使用 Spring 工具套件创建 Java EE 项目(maven+git)的最佳方法是什么?
- macos - 如何在vim中禁用自动删除注册
- javascript - Firestore:将数据存储到具有参数名称的字段
- javascript - 检查最后一条之前的消息
- firebase - Firestore 插件导致 Flutter Android App 的构建错误
- javascript - 带有键的javascript数组
- c++ - spoj 上的防污系统
- javascript - 自 M71 以来,不再允许没有用户激活的 JavaScript speechSynthesis.speak()
- nginx - 如何在向客户端发送响应时修复“失败(22:无效参数)”
- javascript - 在页面加载以及 setInterval 上运行 JavaScript 函数