项目需要开发OLED界面,需要显示一些图标,但是没发现有生成图标点阵数据的软件,自己动手做一个小软件,给大家分享下,希望能帮到大家。
这个软件和PCtoLCD之类的软件有什么不同呢?最大的不同是:
直接用鼠标绘图!本来是支持其它图片格式导入的,无奈,没!时!间!啊,大家先将就吧。
程序是绿 {MOD}的,不需要安装,解压缩后双击exe文件运行;因为是WPF做的,启动的时候可能有慢,请耐心等待一下。
程序运行需要.Net Framework 4.0 Client Profile支持,理论上WIN8以上的系统自带这个,如果启动时报错请安装一下这个支持库。
这是主界面,有两个菜单:Tools 和 LCD Profile
Tools 菜单很简单,按钮名称一看就知道干什么的,不多说了。
LCD Profile 菜单也很简单,也不多说了;有一点注意一下就好,因为我用0.96寸的OLED,所以软件的最大分辨率暂时是128 * 64(硬件软件都要搞,精力有限啊,大家抱歉啊)
重点说一下取模的方式吧。
其实软件的设计是支持很多取模方式的,但是,没!时!间!啊!,所以暂时只实现了一种取模方式:整行整行取模!每8个像素为一组,保存在一个字节里;如果每行取模到最后发现凑不够8个像素怎么办?凑零啊!然后数据采用大端对齐的方式,每组最左侧的像素放在字节的最高位。
举个例子吧:
比如这一组像素,取模后的值为B10101010,即0xAA
好人做到底,再贴一个KEIL的解析程序吧
[mw_shl_code=c,true]OLED_DrawPoint函数是画点函数,具体请参考原子开发板的OLED示例程序。[/mw_shl_code]
[mw_shl_code=c,true]void OLED_ShowIcon(uint8_t x, uint8_t y, const uint8_t *icon)
{
uint8_t icon_width, icon_height; // 图标的尺寸(占用几个像素)
uint8_t grps_in_row; // 每一行有几个像素组(8个像素为一组)
uint8_t grp_data; // 每一组的数据(即图标数据里的一个字节)
uint8_t b, g, r;
uint8_t x_to_set; // 将要画的点的横坐标
icon_width = *icon++;
icon_height = *icon++;
grps_in_row = icon_width / 8 + ((icon_width % 8) ? 1 : 0);
for(r = 0; r < icon_height; r++)
{
x_to_set = x;
for(g = 0; g < grps_in_row; g++)
{
grp_data = *icon++;
for(b = 0; b < 8; b++)
{
if((grp_data & 0x80) == 0x80)
{
OLED_DrawPoint(x_to_set, y, 1);
}
else
{
OLED_DrawPoint(x_to_set, y, 0);
}
grp_data <<= 1;
x_to_set++;
}
}
y++;
}
}[/mw_shl_code]
一周热门 更多>