取模我搞了好久才搞对,由于我是直接跳过了OLED,所以取模时有些问题的,搞了好搞才回头看了看,再继续搞,最终可以了,反正我在论坛里没找到相关的解答,我的问题应该具有代表性,我就分享出来吧。
首先,OLED有其介绍,先看。
关于LED的ASCII字符取模说明:
1.1608不是说取模时取16*8,也不是说ASCII字符是其一半,要取32*16,就是取16*16。这个我一开始没搞清楚。
2.LED的显示是从左到右的,而我看程序的扫描方式好像是从左到右,从上到下,所以不能显设OLED那样,要逆向,逐行式!
好,应该可以了,反正我是这样做的。成功了。
下面我说一下我的扩展内容。大家想看就看,因为以上的文字就能解决你的问题了,以下内容与问题无关。
(倒序)
其实今天,我原本是想放大LED显示的字体,于是在想办法.
在LCD想缩放,我想到的方法是一是,像放大镜一样放大,二是把画点变成画九点。
一,我好像做不到,想了想,我是用了矢量图那个思想,应该不可行。
二,把画一点变画九点,然后把X++与Y++变成X+=3,可惜,试了好久,没成功. 在论坛里搜如何放大,全部都说,取模。。。。
还是先学学字符的取模吧,我连取模都没试过,或许学会了取模,懂了原理就可能发现问题了….这个放到后面再搞.
如上,取模我搞好了,我发现我的理论没问题,应该是可行的。我做了以下步骤:
基于FTFLCD实验例程,
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
for(t=0;t<size/2;t++)
{
if(temp&0x01)POINT_COLOR=colortemp;
else
POINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
LCD_DrawPoint(x+1,y);
LCD_DrawPoint(x,y+1);
LCD_DrawPoint(x+1,y+1);
LCD_DrawPoint(x-1,y);
LCD_DrawPoint(x,y-1);
LCD_DrawPoint(x-1,y-1);
LCD_DrawPoint(x+1,y-1);
LCD_DrawPoint(x-1,y+1);
temp>>=1;
x+=3;
}
x=x0;
y+=3;
}
大家可对比一下,我是以九点代替一点,然后增加间距就可以了,完全没问题,但还是失败。
于是,我在LCD_ShowString里增加延时,以发现问题。(别以为我一下子就想到,我走的弯路之多,尽是泪与风景,没表达出来浪费大家时间而已。)
void LCD_ShowString(u16 x,u16 y,const u8
*p)
{
while(*p!='\0')
{
if(x>MAX_CHAR_POSX){x=0;y+=16;}
if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
LCD_ShowChar(x,y,*p,16,0);
x+=8;
p++;
delay_ms(1000);
}
}
果然,一个个地看,我的想法是正确的,是字叠在一起了,于是,增加字与字的距离
, 把x+=8;改成 x+=24;,除了X距离,还有Y,回到主函数,更改Y的位置,如
LCD_ShowString(30,50,"Mini STM32
^_^");
LCD_ShowString(30,100,"2.4'/2.8'
TFTLCD TEST");
就可以正常显示了。
分享快乐,原子的论坛真是好地方,双赢的利器!
论坛的存在注定原子开发板是新手入门的最佳选择之一。
|