LED点阵作为一种重要的显示手段,得到了广泛的应用,在单片机控制的点阵显示系统程序中需要解决的一个重要问题就是字符点阵数据的获取,也就是常说的取字模。笔者在工作过程中也遇到这个问题,经学习和研究发现常用的取字模的方法是用专门的取字模软件来完成的,但也遇到点阵大小固定、不能随意选择的问题。比如,在控制5×7的LED点阵程序中,无法找到合适的软件取得字模。经研究试验发现,使用Excel软件可以实现任意点阵大小取字模。
此方法的核心思想是应用Excel的“条件格式”功能。选中Excel表格中的任意单元格,使用“格式”菜单中“条件格式”,设置为单元格数值等于1时单元格格式为黑色底纹,如图1所示。设置成功后会发现当单元格内数值为1时,单元格会变成黑色。利用这一功能,可以在Excel中形象地显示点阵字模显示效果。在Excel中选中与需要取模的点阵大小相当的表格区域,一个单元格代表一个LED,将列宽设置为2,将此区域中的各个单元格均设置好条件格式,并在需要点亮的LED对应位置单元格中填人1,便得到了与显示效果类似的图形。如图2中为5×7点阵中显示数字“1”的效果。然后就可以利用Excel的公式功能计算对应行和列的数据,得到点阵数据了。为便于识读,在左侧和顶部分别加上了行标号和列标号,右侧得到的便是每行的字模数据,底部得到的是每列的字模数据。
在加载了Excel的“分析工具库”宏后,可以使用函数DEC2HEX()将十进制转换为十六进制,并使用函数TEXT()将其转换为两位的字符,再用&运算符在其后面加上H,便得到了单片机程序中常用的十六进制数据格式。对应图2的Excel表格区域位置,5×7点阵中显示“1”的第1行字模数据的公式为:=TEXT(DEC2HEX(B2+C2*2+D2*4+E2*8+F2*16),”00”)&”H”,结果为04H;第1列字模数据的公式为:=TEXT(DEC2HEX(B2+B3*2+B4*4+B5*8+B6*16+B7*32+B8*64),”00”&”H”,结果为00H。其他行、列公式类推。同理,使用&运算符可以将各字模数据组合成单片机程序的数据表格式。如图2中第10行公式为:=”DB”&B9&","&C9 &","&D9&",","&E9 &","&F9,得到"1",的5×7点阵按列取的字模数据为DB 00H,42H,7FH,40H,00H;图2中第11行公式为:="DB"&G2&","&G3 8L","&G4&","&G5 &","&G6&","&G7&","&G8,得到“1”的5×7点阵按行取的字模数据为 DB04H,06H,04H,04H,04H,04H,0EH,成功生成单片机汇编语言数据表格式字模数据,直接复制到单片机程序中即可使用。
扩展运用此法,在Excel中还可实现七段数码管求字形码。如图3中第9行中计算七段数码管求字形码的公式为:=TEXT(DEC2HEX(C2+D3*2+D5*4+C6*8+B5*16+B3*32+C4*64),"00")&"H",得到“2” 的七段数码管求字形码为5BH。
在此使用Excel取字模的方法中:
①点阵取模的高低位顺序问题可以通过调整单元格计算公式中各位的位权来修改。
②不同大小点阵取字模时,以文中5×7点阵类推,画出对应大小区域并修改公式计算的单元格数量即可实现。
③此方法中如果条件格式设置为“单元格数值等于1时单元格格式为黑色底纹”,则计算和求字形码
显示结果为共阴极数码管字形码,即亮的字段为1。如需
共阳极数码管字形码,即亮的字段为0,则将条件格式设置为“单元格数值等于0时单元格格式为黑色底纹”,并在不需要点亮的位置输入1,公式不变即可实现。