【说明】
前一节我们初始化了LCD,使得我们可以在任何一个像素画点了。可是我们平时很少直接在屏幕上画画的吧,大多数情况下我们是在上边显示英文或者中文,那我们怎么显示英文呢,这就是这一节的重点。
【显示原理】
字母是怎么显示的呢,想象一个8*8的矩阵,每一个元素就是一个像素,那我们就可以用白色像素描出一个字母"A",用黑色作为其他像素的颜色,不就可以显示一个A吗,原理就是这样的
【字模】
那我们在代码中如何表示一个字符呢,用数组,比如下面这样,是一个char 型数组的八个元素。注释是其二进制的样子
如果我们把其中的1画成白色,把0画成黑色,看看像不像一个A。。。哈哈。就是这样做的
现在我们知道了如何画出一个A。但是有那么多字符,如果我们一个一个定义要花好多时间啊,
其实不需要我们自己去定义,你可以去网络上下一个,也可以去内核里找,自己定义那就太2了。
【怎么使用】
来看看画字符的函数就知道了。
这个函数不仅仅画出指定的字符,而且会移动“光标”,使得下一次画出的字符在这一个后边
void lcd_putc(unsigned char c)
{
static int x = 0;
static int y = 0;
int i,j;
unsigned char line_dots;
/* 获得字模 */
unsigned char *char_dots = fontdata_8x8 + c * 8;
/* 在framebuffer里描点 */
if (c == '\n')
{
//y = (y + 8) % 272;
y += 8;
if (y > 272)
y = 0;
return ;
}
else if (c == '\r')
{
x = 0;
return;
}
for (i = 0; i < 8; i++)
{
line_dots = char_dots[i];
for (j = 0; j < 8; j++)
{
if (line_dots & (0x80 >> j))
{
PutPixel(x+j, y+i, 0xff0000);
}
else
{
PutPixel(x+j, y+i, 0);
}
}
}
//x = (x + 8) % 480;
x += 8;
if (x > 480)
x = 0;
if (x == 0)
{
//y = (y + 8) % 272;
y += 8;
if (y > 272)
y = 0;
}
}