问题已经解决,谢谢各位的帮忙和指点,
1.先是弄懂了取字模软件的使用
2.取出字模之后,还是无法正常显示,显示一半,另外一半不能显示,最终发现是OLED_ShowChar();函数的问题。
我的程序原来是参考了“某舟”的开发板的例程,
[mw_shl_code=c,true]void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{
u8 temp,t,t1;
u8 y0=y;
chr=chr-' ';//?????????ó????
for(t=0;t<size;t++)
{
if(size==12)temp=oled_asc2_1206[chr][t]; //?÷??1206×???
else if (size==16)temp=oled_asc2_1608[chr][t]; //?÷??1608×???
else if (size==32)temp=oled_asc2_3216[chr][t];
for(t1=0;t1<8;t1++)
{
if(temp&0x80)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
}[/mw_shl_code]
然后发现问题,参考了原子大大的例程
[mw_shl_code=c,true]void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{
u8 temp,t,t1;
u8 y0=y;
u8 csize=(size/8+((size%8)?1:0))*(size/2);
chr=chr-' ';//?????????ó????
for(t=0;t<csize;t++)
{
if(size==12)temp=oled_asc2_1206[chr][t]; //?÷??1206×???
else if (size==16)temp=oled_asc2_1608[chr][t]; //?÷??1608×???
else if (size==32)temp=oled_asc2_3216[chr][t];
for(t1=0;t1<8;t1++)
{
if(temp&0x80)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}
}
}[/mw_shl_code]
关键点就在这一句
[mw_shl_code=c,true]u8 csize=(size/8+((size%8)?1:0))*(size/2);[/mw_shl_code]
[mw_shl_code=c,true]以及循环条件[/mw_shl_code]
[mw_shl_code=c,true]t<csize[/mw_shl_code]
[mw_shl_code=c,true]在此,再次鄙视一下“某舟”的例程[/mw_shl_code]
[mw_shl_code=c,true] [/mw_shl_code]
[mw_shl_code=c,true]再次感谢原子大大的分享。[/mw_shl_code] |