历史上的今天
今天是:2025年06月03日(星期二)
2018年06月03日 | STM32 TFT学习笔记——刷字符
2018-06-03 来源:eefocus
主机环境: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即为用软件生成的字库代码,效果如下:
在完善LCD的过程中发现一个很有用的代码,原来在F3Cube的库里面有一个很好的LCD代码以及驱动代码供我们参考,在库里面的Drivers文件夹下的BSP目录里面,如图
里面有个stm32303e_evel_lcd.c/h文件,打开
可以看到左侧提供了很多函数,我们完全可以拿来借用,有巨人的肩膀让我们站,为啥不占呢?哈哈,同时在components目录下有个ili9328驱动文件,如图
同时库代码使用的结构也很好,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里面的值是需要重新计算的,跟你的起始地址是有关系的,这里只是看效果所以没考虑那么多,效果图如下
可以看到左上角的白色背景色没有了,"中"字就像是在图片上的水印一样。然而这并没有什么卵用。。。
史海拾趣
|
小弟最近刚开始学F2812,电气特性好像是写I/O输入不得超过Vddio 自己做了一块练习板,做好后发现LCM1602的RS脚上有5V的电压(还未和DSP连接),其它像RW、E、DB*上都有一些电压,怕会把DSP烧坏 请问F2812可以直接和LCM连接吗?还是要经过一些 ...… 查看全部问答> |
|
数字视频监控系统主要包括DVR、DVS、IP-Camera等,涉及到嵌入式系统技术、视频编解码技术、音频编解码技术、联网及域名处理技术等。硬件对于系统而言,相当于建筑的地基,地基牢,建筑才可靠,才能够经历风风雨雨的考验。 概述 & ...… 查看全部问答> |
|
driverStudio 生成的驱动程序 实现 IO读写功能 驱动程序代码中两个操作如下: NTSTATUS RW6070Device::RW6070_IOCTL_800_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS; //t … 查看全部问答> |
|
RT-Thread开源实时操作系统/STM32F103VB0.3.0b3版本 这个版本更新有些多,RT-Thread/STM32F103VB 0.3.0 beta3更改记录:- 内核,添加IAR EWARM 5.x工程,在内核定义中做相应的平台定义;- 添加文件系统组件DFS,DFS是一套虚拟文件系统(类似Linux的VFS,但几乎不占 ...… 查看全部问答> |
|
有关2812的资料其寄存器都没有地址,所见的都是C语言的头文件,用了结构体和共用体,找不出起物理地址了,想用一段汇编,找不到外设和寄存器的地址,没法编那.谁有这方面的资料?或给指点一下… 查看全部问答> |




