你知道一个程序或脚本从一个字母转换成一个代表字母的矩阵(由0和1组成)吗? 例如,从字母I到矩阵之类的东西:(这是一个显示字母I的LED面板):
请让我知道一种创建除手动打字之外的矩阵的方法 谢谢。
答案 0 :(得分:2)
唯一的解决方案是使用字体。
用于HW实现我通常使用EGA / VGA 8x8字体
从gfx卡中提取 BIOS ,您可以在 MS-DOS 环境中轻松完成
另一种方法是从图像中提取字体programaticaly
将整个字体绘制到位图(在行中或在矩阵中......,或使用像我一样已经创建的一些)。使用最适合您需要的固定音高,字体大小,不要忘记几乎没有现代字体支持固定音高,因此请使用OEM_CHARSET
和System
命名字体。正确设置颜色(理想的是黑色背景和白色字体)并逐个像素地读取图像并将其存储为数字表。没有背景颜色的像素设置为像素。
由于抗锯齿和过滤器,请勿与字体颜色进行比较。现在读取所有字符并在字体表中设置/ res对应的位。首先计算图像中字符的开始x,y
(来自 ASCII 代码和图像组织),然后为循环执行2个嵌套的8步x,y
(根据您的{{1顺序)组织)
font[]
至set/res
font[]
位8*ASCII
位
我假设您使用MCU来控制LED面板
内存中的字体组织通常是8位数字表示单行字符。当然,如果你的 LED 面板用于显示动画滚动,那么字体的列组织和硬件实现将使事情变得更加容易。如果您有16位 MCU 和 IO 访问权限,则可以使用8*ASCII+8
/ pixels字体大小。
如果您有超过8个像素且只有8位MCU,您仍然可以使用16位数据,但IO访问将分两步通过两个IO端口而不是1. 我强烈建议整个数据范围的IO访问而不是设置/ res个别IO线它更快,可以防止闪烁
好的,这是我以前用过的旧16-bit
字体......我觉得这个字体是从 EGA / VGA BIOS 中提取的,但我不是支持...太多年前了
现在有趣的部分
8x8
任何字符都表示为8个数字。如果位是const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... }
那么它意味着纸张(背景像素),如果位是0
那么它意味着墨水(字体像素)。现在有更多组合(从左到右,从上到下和它们的组合)
确定(行间隔|从左到右|向上到向下)组织意味着:
所以例如1
中的char'1'将是这样的(b表示二进制数):
8x8
将所有字符提取到字体表后,将其保存为文件的源代码,稍后将包含在 MCU 代码中(可以放在 EEPROM 中PGM-代码)
现在,在 LED 面板上打印字符的算法非常依赖于您的硬件实现
我假设你想要按像素步骤左移动滚动
如果您的LED面板由列而不是行驱动,那么最合适
您可以通过某些数据IO 端口激活 LED 的单列(一次可以激活所有位)并选择哪一列处于活动状态由另一个选择IO 端口(一次只能激活一个位)。因此,在这种情况下,计算要在字体表中显示的列的起始地址:
00000000b,
00001000b,
00011000b,
00101000b,
00001000b,
00001000b,
00111100b,
00000000b,
address = (8*ASCII + x_offset)
发送到数据IO 端口font[8*ASCII + x_offset]
是滚动转移如果您的硬件实施方式不合适,请不要担心
只需使用位SHIFT,AND,OR运算在内存中创建数据字,然后以类似的方式发送它们
希望它有助于痘痘
答案 1 :(得分:0)
您可以尝试找到一种看起来像您想要的字体(可能是等宽字体,如Courier),使用一定大小(8pt?)绘制/栅格化它,没有消除锯齿,并将生成的图像转换为你的矩阵格式。