STM32 ILI9341驱动TFTLCD(九)LCD显示ASCIIII

发布时间:2024-05-15  

ASCII值在LCD上显示,同样要在一个区域中写显存,这样不同大小字号的字符也就对应不同的字模了。这里生成字模用到了字体取模软件工具PCtoLCD2002,可以方便地生成不同字号的字模。

图片

打开软件并选择设置。

图片

进入设置界面。

图片

根据自己需要进行取模设置:

点阵格式:阴码表示1有效,阳码表示1有效。

取模方式和取模方向与写入显存的算法有关,这里选择顺向逐行式。

图片

设置完成后,根据ASCII表把需要的ASCII值写入,这里写入可见的ASCII值,点击生成字模。

图片

然后复制生成的字模,定义为一个常量存储起来。

图片

可以根据生成的字符右边的序列选取字符所在的序列,由于我们选取的是ASCII的可视字符,在原有的字符上偏移了32,所以读取该数组时要减去偏移量。然后逐点判断是否有效,有效就填充字体颜色,无效就看是否选择有背景色,如果有就填充背景色,没有就进入下一点的写入。


//LCD显示16号ASCII值

//ch:要写的ASCII字符

//pencolor:字符颜色

//bcolor:背景色

//mode:    0:填充背景色

//        1:不填充背景色


void LCD_ShowAscii_16(u8 x,u8 y,u8 ch,u16 pencolor,u16 bcolor,u8 mode)

{

  u8 i = 0,j = 0;

  u8 temp = 0;


  ch -= 32;                  //减去偏移量' '的十进制值

  for(i=0;i< 16;i++)

  {

    temp = ASCII_16[ch][i];

    for(j=0;j< 8;j++)

    {

      if(temp & 0x80)        //判断该点是否有效

      {

        LCD_DrawPoint(x,y,pencolor);

      }

      else                  

      {

        if(mode == 1)        //判断是否要填充背景色

        LCD_DrawPoint(x,y,bcolor);

      }

      x++;

      temp< <=1;

    }

    x -= 8;

    y++;                    

  }

}

主函数


#include "stm32f4xx.h"

#include "core_cm4.h"

#include "ili9341.h"

#include "lcd.h"



int main()

{

  LCD_Init();          //初始化LCD

  LCD_ShowAscii_16(100,100,'A',RED,IRON_GRAY,1);

  while(1);

}


屏幕显示如下

图片

接着进行同样的操作得到24号字体的ASCII字模,保存为常量。

图片

发现得到的数据与16号字体的略有区别,24号字体每个字符占三行,所以显示函数的算法要重新编写。

从取模软件的设置里可以看到取模说明,从第一行开始向右每取8个点作为一个字节,如果最后不足8个点就补满8位。取模顺序是从高到低,即第一个点作为最高位。

我们可以根据说明,把字模分为左右两部分,先写完左边再写右边的显存。


//LCD显示24号ASCII值

//ch:要写的ASCII字符

//pencolor:字符颜色

//bcolor:背景色

//mode:    0:填充背景色

//        1:不填充背景色

void LCD_ShowAscii_24(u8 x,u8 y,u8 ch,u16 pencolor,u16 bcolor,u8 mode)

{

  u8 i = 0,j = 0,k = 0;

  u8 temp = 0;


  ch-=32;          //减去偏移量' '的值32

  ch*=3;          //一个字符占3行


  for(i=0;i< 3;i++)

  {

    for(j=0;j< 8;j++)

    {

      temp=ASCII_24[ch+i][2*j];  

      for(k=0;k< 8;k++)        //先写左边的显存

      {

        if(temp & 0x80)        //判断该点是否有效

        {

          LCD_DrawPoint(x,y,pencolor);

        }

        else                  

        {

          if(mode == 1)        //判断是否要填充背景色

          LCD_DrawPoint(x,y,bcolor);

        }

        x++;

        temp< <=1;

      }

      temp=ASCII_24[ch+i][2*j+1];

      for(k=0;k< 4;k++)      //写右边的显存

      {

        if(temp & 0x80)        //判断该点是否有效

        {

          LCD_DrawPoint(x,y,pencolor);

        }

        else                  

        {

          if(mode == 1)        //判断是否要填充背景色

          LCD_DrawPoint(x,y,bcolor);

        }

        x++;

        temp< <=1;

      }

      x -= 12;

      y++;

    }

  }

}

主函数


#include "stm32f4xx.h"

#include "core_cm4.h"

#include "ili9341.h"

#include "lcd.h"



int main()

{

  LCD_Init();          //初始化LCD

  LCD_ShowAscii_16(100,100,'A',RED,IRON_GRAY,1);

  LCD_ShowAscii_24(125,100,'A',RED,IRON_GRAY,1);  

  while(1);

}


屏幕显示如下

图片

LCD显示ASCII值16号和24号字体的A可以实现,其他不同字号的ASCII值同样可以基于以上的想法实现。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>