STM32 TFT学习笔记——刷字符

主机环境:Windows 7 SP1

开发环境:MDK5.14

目标板:ST NUCLEO-F303RE

TFT型号:2.4英寸,带触摸,SD卡,240*320分辨率,26万色

驱动IC:ILI9325

ST库版本:STM32Cube_FW_F3_V1.1.0


刷完图片之后,很自然就想进行刷字符实验,该刷字符实验其实跟刷12864液晶屏字符是一样的,因为都是点阵型液晶屏,需要我们把字符转换成点阵数据,这里就需要借助取字模工具了,这个网上有很多,这里使用的是PCtoLCD2002


这里需要注意的是取模方式,需要和你的ILI9325驱动相配合,这里我使用逐行式扫描,高位在前,阴码格式。如下:


刷字符和刷图片其实是一样的,唯一不同的是,对于字符来说在一块区域中不是每个点都是有值的(即不为0),因此要想在LCD上显示该字符需要设置两种颜色,前景色和背景色,当刷字符时如果当前bit为1则刷入前景色,当前bit为0时则刷入背景色,针对字符大小不同就需要设置不同的window area这样才能显示正确的字符,上图中字符点阵是16*16,因此需要调用LCD_SetDisplayWindow(0x0000,0x0000,16,16);来设置当前字符的区域地址以及宽度和高度,刷字符代码如下

for(i = 0; i < 32; i++)
{
	for(j = 0; j < 8; j++)
	{
		if(abc[i]&0x80)
		{
			ILI9325_Write_Value(LCD_BLACK);
		}
		else
		{
			ILI9325_Write_Value(LCD_WHITE);
		}
		abc[i]<<=1;
	}
	
}
abc即为用软件生成的字库代码,效果如下:

STM32 TFT学习笔记——刷字符_第1张图片

在完善LCD的过程中发现一个很有用的代码,原来在F3Cube的库里面有一个很好的LCD代码以及驱动代码供我们参考,在库里面的Drivers文件夹下的BSP目录里面,如图

STM32 TFT学习笔记——刷字符_第2张图片

里面有个stm32303e_evel_lcd.c/h文件,打开


可以看到左侧提供了很多函数,我们完全可以拿来借用,有巨人的肩膀让我们站,为啥不占呢?哈哈,同时在components目录下有个ili9328驱动文件,如图

STM32 TFT学习笔记——刷字符_第3张图片

同时库代码使用的结构也很好,lcd里面提供统一的接口由具体的驱动ic代码来实现各自具体的代码,很方便对代码进行扩展,我们只需要编辑对应ili9325代码即可,大家可以借鉴一哈。本来想借机研究以下FMC驱动LCD的可是看完相应的文档后发现NUCLEO-F303RE没有FMC引脚,只有100pin以上的芯片才有FMC引脚,没搞头了。。。FMC的学习推荐大家看官方的AN2790应用笔记——TFT LCD与FSMC的硬件连接 大容量STM32F10xxx FSMC接口,讲的就是如用使用FSMC来驱动TFT LCD。

临了看到刷字符的白色背景色很突兀特别影响美观,然后就想能不能去掉背景色,如果背景是单一颜色的纯色,那我们刷字符时只需要设置字符的背景色为底部的纯色就可以了,如果我们的底部是一副图片呢,就像之前的图,字符的背景色白色很不和谐,怎么实现呢?RGB565是没有透明度属性的,而且GRAM的AC是自动控制,因此我们只需要在刷字符背景色时重新计算游标就可以了,而不是刷入背景色,代码如下

for(i = 0; i < 32; i++)
{
	for(j = 0; j < 8; j++)
	{
		if(abc[i]&0x80)
		{
			ILI9325_Write_Value(LCD_BLACK);
		}
		else
		{
			//ILI9325_Write_Value(LCD_WHITE);
			//重新计算游标地址
			LCD_SetCursor(((i%2)*8 + (j + 1))%16,i/2 + ((j+1)/8)*(i%2));
			ILI9325_Write_Address(0x22);
		}
		abc[i]<<=1;
	}
	
}
需要注意的是这个代码是有问题的,我这里的起始地址为(0,0),对于任意地址而言LCD_SetCursor里面的值是需要重新计算的,跟你的起始地址是有关系的,这里只是看效果所以没考虑那么多,效果图如下

STM32 TFT学习笔记——刷字符_第4张图片

可以看到左上角的白色背景色没有了,"中"字就像是在图片上的水印一样。然而这并没有什么卵用。。。

你可能感兴趣的:(STM32 TFT学习笔记——刷字符)