EFM32片内外设--TFT 汉字字库(续)

来源:互联网 发布:机械动态图制作软件 编辑:程序博客网 时间:2024/06/05 17:15

纪念母亲节。

继上次研究完汉字的编码以及如何生成字库之后,那么现在要做的就是如何将汉字显示在点阵屏上了。

目前EFM32带点阵的也就DK系列,带有320*240的TFT屏了。因此本实验就是拿GG DK来做的。在哪个平台上跑得不重要,关键是如何做的。

1.还记得我们上次的字库点阵的取模方式吗? 这和我们最终写代码,如何显示是有关系的。目前还是采用方式一取模生成的字符库。

2. 将生成的字符点阵库,做成const数组。请参考如下。

http://download.csdn.net/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目录下。

http://download.csdn.net/download/efm32/4298688

原创粉丝点击