2012-10-26 44 views
1

你是否知道一个程序或脚本能够将字母转换为表示字母的矩阵(由0和1组成)? 例如,从信中我对矩阵是这样的:(这是显示信我的LED潘内尔):如何从字母转换为像素

example

请让我知道怎样创造出比手动输入
THX其他类似矩阵。

回答

1

唯一的解决方案是使用字体。

  1. 以及对硬件实现我通常使用EGA/VGA 8x8的字体

    从显示卡提取BIOS你可以做到这一点很容易在MS-DOS环境

  2. 另一种方法是从图像提取字体programaticaly

    将整个字体绘制成位图(在线或在矩阵中......或使用一些已经创建的像我的)。使用固定的音高,最适合您需要的字体大小,不要忘记,几乎没有现代字体支持固定音高,所以使用OEM_CHARSETSystem命名字体。正确设置颜色(理想的是黑色背景和白色字体)并逐像素地读取图像并将其存储为数字表。没有背景色的像素是设置像素。

    不要比较字体,因为抗锯齿和过滤器的颜色。现在读取字体表中的所有字符和set/res对应位。第一计算在图像开始字符的x,y(从ASCII代码和图像组织),然后做2嵌套8步骤x,y for循环(为了根据你font[]组织)

    set/res对应font[]比特在地址8*ASCII8*ASCII+8

  3. 我假设你使用的MCU来控制LED面板

    在内存中的字体组织通常是8-BI t数字代表单行字符。当然,如果您的面板是用来显示动画滚动的,那么字体的列组织和硬件实现将会使事情变得更加轻松。如果你有16位MCUIO访问比你可以使用16-bit /像素字体大小。

    如果你有超过8个像素,只有8位MCU,你仍然可以使用16位数据,但IO访问将通过两个IO端口分两步而不是1个。我强烈建议整个数据范围内的IO访问,而不是设置/ RES个人IO线的更快,并且可以防止闪烁

确定这里是我在天回用我的老8x8字体...我认为这是一个从EGA/VGA BIOS提取的,但我不岸边...这是太多年前

fixed pitch 8x8 font

现在最有趣的部分

const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... } 

任何字符都表示为8个数字。如果位是0那么它意味着纸张(背景像素),如果位是1那么它意味着墨水(字体像素)。现在有更多的组合(从左至右,从上至下,从他们的组合)

OK(行虎钳|左至右|从上到下)组织表示:

  • 第一个数字是最多最行焦炭的
  • MSB是最左边的像素
  • LSB是最右边的像素

因此对于8x8例如炭“1”将是这样的(B表示二进制数):

00000000b, 
00001000b, 
00011000b, 
00101000b, 
00001000b, 
00001000b, 
00111100b, 
00000000b, 

当已经提取的所有字符字体表比其保存为源代码文件,稍后将包括在MCU代码(可以放置在EEPROM为PGM-代码)

现在算法打印LED面板上炭强烈依赖于你的HW实现

  • 所以请后LED面板和控制系统
  • 指定目标平台和语言之间的互连的电路图
  • 指定期望的功能

我想你想留下由像素步骤移动滚动

  1. 如果您的LED面板是由列驱动而不是行

    可以通过一些数据IO端口激活的LED S单柱以及选择其中一个列被激活是由另一选择IO端口驱动(仅单一(所有位在同一时间是活动的)位可以一次激活)。因此,在这种情况下,计算的列的开始地址在字体表中显示:

    • address = (8*ASCII + x_offset)
    • 发送font[8*ASCII + x_offset]数据IO端口
    • 激活选择IO端口与所述正确的比特活性
    • 等一会儿(1-10毫秒)...所以如果延迟太短,那么你实际上可以看到光线,如果延迟太长,那么没有亮度,那么存在闪烁,因此您需要尝试一点点(取决于数字的选择位S)。
    • 停用选择与下一列
    • x_offset IO端口
    • 重复是滚动移
  2. 如果你的硬件实现不适合在这种方式不用担心

    只是使用位SHIFT,AND或OR操作在内存中创建数据字,然后以类似的方式发送它们

希望它可以帮助痘痘

+0

哦,如果你是内存不足,你可以只使用英文字母及数字......忘了特殊字符,所以你将有较少的字体数据,但随后你的字符串编码必须与您的字体匹配......或跳过前32个字符和最后128个字符,这些字符可以节省一半以上的内存 – Spektre

+0

非常感谢!这是一个绝妙的主意! – user1776194

+0

@ user1776194我可以看到你还没有检查到答案......如果你的问题的答案有帮助,你可以投票(我不确定你是否可以立即投票或需要一些代表)投票号码,如果它是错误的,虐待......那么你可以投票下来,三角恋爱相同的数字。如果答案导致解决您的问题,您应该点击下面的投票三角形检查标志来检查它。它会将答案评分给答案作者,并将你的问题标记为答案。 (我想你会获得一些徽章,比如接受的第一个答案) – Spektre

0

你可以尝试找到一种看起来像你想要的样子的字体(可能是像Courier这样的等宽字体),用一定大小(8pt?)绘制/光栅化它,而不进行抗锯齿,然后将结果图像到你的矩阵格式。