STM32 TFT学习笔记——刷字符

发布者:MindfulCreator最新更新时间:2018-06-03 来源: eefocus关键字: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++)  

  1. {  

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

  3.     {  

  4.         if(abc[i]&0x80)  

  5.         {  

  6.             ILI9325_Write_Value(LCD_BLACK);  

  7.         }  

  8.         else  

  9.         {  

  10.             ILI9325_Write_Value(LCD_WHITE);  

  11.         }  

  12.         abc[i]<<=1;  

  13.     }  

  14.       

  15. }  

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是自动控制,因此我们只需要在刷字符背景色时重新计算游标就可以了,而不是刷入背景色,代码如下


  1. for(i = 0; i < 32; i++)  

  2. {  

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

  4.     {  

  5.         if(abc[i]&0x80)  

  6.         {  

  7.             ILI9325_Write_Value(LCD_BLACK);  

  8.         }  

  9.         else  

  10.         {  

  11.             //ILI9325_Write_Value(LCD_WHITE);  

  12.             //重新计算游标地址  

  13.             LCD_SetCursor(((i%2)*8 + (j + 1))%16,i/2 + ((j+1)/8)*(i%2));  

  14.             ILI9325_Write_Address(0x22);  

  15.         }  

  16.         abc[i]<<=1;  

  17.     }  

  18.       

  19. }  

需要注意的是这个代码是有问题的,我这里的起始地址为(0,0),对于任意地址而言LCD_SetCursor里面的值是需要重新计算的,跟你的起始地址是有关系的,这里只是看效果所以没考虑那么多,效果图如下


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


关键字:STM32  TFT  刷字符 引用地址:STM32 TFT学习笔记——刷字符

上一篇:STM32 SPI驱动TFT LCD
下一篇:STM32 TFT学习笔记——SD卡读写

推荐阅读最新更新时间:2024-03-16 16:04

ucosii在stm32上的移植详解4
详解3中有一个问题还没解释,就是stm32f10x_it.c中已经有SysTick中断函数的定义SysTick_Handler(),为什么官方版非要弄个OS_CPU_SysTickHandler()。答案就在启动文件上,一般我们自己开发基于stm32芯片的软件,都会使用标准外设库CMSIS中提供的启动文件,而官方移植的启动文件却是自己写的,在两个文件init.s,vectors.s中(Micrium\Software\EvalBoards\ST\STM3210B-EVAL\RVMDK)。init.s负责进入main(),vectors.s设置中断向量。OS_CPU_SysTickHandler和OS_CPU_PendSVHand
[单片机]
STM32 位段详解
1 定义 首先需要明确下,位段,位带和别名区这三个名词 位段:STM32用户参考手册使用的名字 位带:CortexM3参考手册使用的 别名区:地址总线上用来位访问地址区域, 所以说,位段和位带是一个意思,是不同手册的不同叫法。 由上述的名词解释得知,位带功能并不是STM32独有的,是CortexM3的功能(CortexM4也有这样的功能)。MCS51有位操作,以一位(bit)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作:P1.2=0;P1.2=1 ;这样就把P1口的第三个脚(bit2)置0置1。而STM32的位段、位带别名区最重要的就为了实现这样的功能。 2 位带操作 2.1 范围 位带
[单片机]
<font color='red'>STM32</font> 位段详解
STM32单片机-增量式PID
一、什么是增量式PID 虽然PID不是什么牛逼的东西,但是真心希望以后刚刚接触这块的人能尽快进入状态。特地分享一些自己如何实现的过程。 PID控制算法介绍与C程序实现 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来的,不同的是系数的差异。 【教程】如何在STM32上实现增量式PID - STM32/STM8技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛! 资料上比较多的是: 还有一种的算法是: 这里主要介绍第二种,具体会分析比例、积分、微分三个环节的作用。 ----------------------------------------------
[单片机]
<font color='red'>STM32</font>单片机-增量式PID
基于STM32单片机光学指纹识别模块
1.平台 首先我使用的是 奋斗 STM32 开发板 MINI板 光学指纹识别模块(FPM10A)淘宝网址是: http://item.taobao.com/item.htm?id=5380075198 2.购买指纹模块,可以获得三份资料 1.简要使用说明 2.使用指纹模块的功能函数 3.FPM10A用户手册. 3.硬件搭建 根据使用说明:FPM 10A使用标准的串口与外界通信,默认的波特率为57600,可以与任何单片机,ARM,DSP等带串口的设备进行连接,请注意电平转换,连接电脑需要进行电平转换,比如MAX232电路。 FPM10A光学指纹模块共有5个管脚 1 为
[单片机]
基于<font color='red'>STM32</font>单片机光学指纹识别模块
stm32串口通信调试总结
本文分为两部分,即”以USART1为例的串口初始化”和“调试中遇到的问题” 以USART1为例的串口初始化 本程序调用了stm32自带的固件库,工程中具体的文件见下图: 一.GPIO及USART1初始化结构体变量定义 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; 二.串口时钟及GPIO端口时钟使能 USART1是挂在APB2总线上的外设。 TX,RX分别是PA9,PA10端口的复用。 要使用到端口复用,就要使能端口的时钟,并使能相应外设的时钟。这里可使用|同时使能这两个时钟。 RCC_APB2Pe
[单片机]
<font color='red'>stm32</font>串口通信调试总结
STM32一个定时器输出不同频率
1个定时器输出4路频率相同,占空比不同的PWM比较容易实现,只需要改变每个通道的比较值就可以了 要想输出频率不同,占空比相同,需要用到比较模式,当比较成功IO翻转。 同时还需要用到定时器中断去重新设置比较值。 稍微解释下面语句: Period是计数值 prescaler是对总线时钟的分频 这个函数是设置比较值 基本要点是理解上面这些。没接触过定时器的会比较抽象,不能理解。 下面直接上代码吧 定时器初始化: u16 capture = 0; vu16 CCR1_Val = 32768; vu16 CCR2_Val = 16384; vu16 CCR3_Val = 8192; vu16 CCR4
[单片机]
<font color='red'>STM32</font>一个定时器输出不同频率
cortex_m3_STM32嵌入式学习笔记18之DAC实验
STM32 的 DAC 模块(数字/模拟转换模块)是 12 位数字输入,电压输出型的 DAC。 DAC可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。 DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。 DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。 本节实验,我们将利用按键(或 USMART) 控制 STM32 内部 DAC1来输出电压,通过 ADC1的通道1 采集 DAC的输出电压,在 LCD 模块上面显示 ADC 获取到的电压值以及 DAC 的设定输出电压值等信息。 S
[单片机]
STM32的硬件I2C设计有BUG
坊间一直流传着一个传说~STM32的硬件I2C设计有BUG,最好不要用,用软件I2C比较靠谱。长久以来,为了不必要的麻烦,我也一直没有用过硬件I2C,主要是软件I2C也比较方便,基本上任意端口都可以用。 最近画了块板子,正好用到了I2C,就顺便来测试一下硬件I2C是不是真的像有些人说的不好用。 测试硬件:STM32F407VET6+AT24C64测试软件:STM32CubeMX v6.1.1HAL库:STM32CubeF4 Firmware Package V1.25.2 STM32CubeMX配置 使用STM32CubeMX配置很方便,时钟等基础配置不再详细介绍,直接看I2C配置如下: 这里的速度模式选择为标准模式,
[单片机]
<font color='red'>STM32</font>的硬件I2C设计有BUG
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved