String 如何将字母表转换为像素
你知道有一个程序或脚本可以将字母转换成表示字母的矩阵(由0和1组成)? 例如,从字母I到矩阵,如下所示:(这是一个显示字母I的LED面板): 请告诉我一种创建此类矩阵的方法,而不是手动键入String 如何将字母表转换为像素,string,matrix,character,pixelate,String,Matrix,Character,Pixelate,你知道有一个程序或脚本可以将字母转换成表示字母的矩阵(由0和1组成)? 例如,从字母I到矩阵,如下所示:(这是一个显示字母I的LED面板): 请告诉我一种创建此类矩阵的方法,而不是手动键入 Thx 您可以尝试找到一种外观符合您需要的字体(可能是Courier之类的单间距字体),以一定的大小(8pt?)绘制/光栅化它,而无需消除混叠,然后将生成的图像转换为矩阵格式。唯一的解决方案是使用字体 对于硬件实现,我通常使用EGA/VGA 8x8字体 从gfx卡中提取BIOS您可以在MS-DOS环境中轻松
Thx 您可以尝试找到一种外观符合您需要的字体(可能是Courier之类的单间距字体),以一定的大小(8pt?)绘制/光栅化它,而无需消除混叠,然后将生成的图像转换为矩阵格式。唯一的解决方案是使用字体
OEM_CHARSET
和System
命名字体。正确设置颜色(理想的是黑色背景和白色字体),逐像素读取图像并将其存储为数字表。非背景色的像素设置为像素
由于抗锯齿和过滤器的原因,请勿与字体颜色进行比较。现在读取所有字符并在字体表中设置/res对应位。首先计算图像中字符的起始x,y
(从ASCII编码和图像组织),然后对循环执行两个嵌套的8步x,y
(按照font[]
组织的顺序)
set/res
在地址8*ASCII
到8*ASCII+8
16位
/pixels字体大小
如果您有超过8个像素且只有8位MCU,您仍然可以使用16位数据,但IO访问将分两步通过两个IO端口进行,而不是1个我强烈建议使用全数据范围的IO访问,而不是设置/恢复单个IO线其速度更快,并且可以防止闪烁8x8
字体。。。我想这是从EGA/VGA BIOS中提取的,但我不是shore。。。那是很久以前的事了
现在是有趣的部分
const BYTE font[8*256]={ 0,0,0,0,0,0,0,0, ... }
任何字符都表示为8个数字。如果位为0
,则表示纸张(背景像素);如果位为1
,则表示墨水(字体像素)。现在有更多的组合(从左到右、从上到下以及它们的组合)
OK(行虎钳|从左到右|从上到下)组织表示:
- 第一个数字是字符的最上面一行
- msb是最左边的像素
- lsb是最右边的像素
8x8
中的字符“1”将是这样的(b表示二进制数):
将所有字符提取到字体表后,将其作为源代码保存到文件中,稍后将包含在MCU代码中(可放置在EEPROM中以获取pgm代码)
现在,在LED面板上打印字符的算法在很大程度上取决于您的硬件实现
- 因此,请张贴LED面板和控制系统之间互连的电路图
- 指定目标平台和语言
- 指定所需的功能
地址=(8*ASCII+x_偏移量)
- 将
发送到数据IO端口font[8*ASCII+x_偏移量]
- 激活在正确位处于活动状态的情况下选择IO端口
- 请稍等(1-10毫秒)。。。因此,如果延迟太短,则实际上可以看到灯光,如果延迟太长,则没有亮度,然后出现闪烁,因此需要进行一点实验(取决于所选位的数量)
- 停用选择IO端口
- 对下一列重复此操作
是滚动移位x_offset
希望它能帮你一点忙哦,如果你的内存不足,你可以只使用字母表和数字。。。忘记特殊字符,这样您的字体数据会更少,但字符串编码必须与字体匹配。。。或者跳过前32个字符和最后128个字符,这会使一半以上的memory@user1776194我可以看出你还没有找到答案。。。如果对你的问题有任何答案是有帮助的,你可以投票(我不确定你是否可以立即投票或者是否需要一些代表)通过投票数上方的小三角进行投票,如果是错误的,滥用。。。然后你可以用同一个数字下面的三角形投票否决它
00000000b,
00001000b,
00011000b,
00101000b,
00001000b,
00001000b,
00111100b,
00000000b,