纪念母亲节。
继上次研究完汉字的编码以及如何生成字库之后,那么现在要做的就是如何将汉字显示在点阵屏上了。
目前EFM32带点阵的也就DK系列,带有320*240的TFT屏了。因此本实验就是拿GG DK来做的。在哪个平台上跑得不重要,关键是如何做的。
1.还记得我们上次的字库点阵的取模方式吗? 这和我们最终写代码,如何显示是有关系的。目前还是采用方式一取模生成的字符库。
2. 将生成的字符点阵库,做成const数组。请参考如下。
http://download.youkuaiyun.com/download/efm32/4298638
3.选择GG DK最简单的例程,inttemp 工程进行修改。通过查看该工程的源代码,幸运的发现有
DMD_writeColor(uint16_t x, uint16_t y, uint8_t red,uint8_t green, uint8_t blue, uint32_t numPixels)
这样的函数,可以直接拿来,做某一个点的显示,这样的话,无论是采用何种取模方式,都可以方便的做出汉字显示了。
4.利用DMD_writeColor() 来做一个显示一个汉字的函数。利用上次提到的折算公式。
GBindex = ((unsigned char)GBword.at(0)-161)*94 + (unsigned char)GBword.at(1) - 161;
最后再乘上32, 就可以找到字库中的偏移量了。
void Show_Chinese_Word(unsigned short x, unsigned short y, unsigned char Word1,unsigned char Word2)
{
unsigned long LibOffset;
unsigned Cx,Cy;
Cx = x;
Cy = y;
LibOffset = (Word1-161)*94;
LibOffset = LibOffset + Word2 - 161;
LibOffset = LibOffset * 32;
for(unsigned char Z = 0; Z < 32; Z++)
{
unsigned char ucData = GB2312_Font[LibOffset + Z];
for(unsigned char i = 0; i < 8; i++)
{
if(ucData & 0x80)//黑底白字
{
DMD_writeColor(Cx,Cy,255,255,255,1);
}
else
{
DMD_writeColor(Cx,Cy,0,0,0,1);
}
ucData = ucData << 1;
Cx++;
}
if(Z % 2 == 1)
{
Cy++;Cx = x;
}
}
}
5. 还算蛮顺利的。看来真的是磨刀不误砍柴工啊。
6.整个工程,请从如下地址下载。要调试的话,请将其放入GG DK的example目录下。