STM32 ILI9341驱动TFTLCD屏(三)

发布者:innovator7最新更新时间:2024-04-29 来源: elecfans关键字:STM32  ILI9341 手机看文章 扫描二维码
随时随地手机看文章

上次已经常用的指令封装成函数,今天通过调用这些函数在屏幕上显示图片,让大家进一步了解ILI9341。


要让屏幕显示图片,那就要先把图片转化为计算机能识别的数据.,这里用Image2Lcd这款工具软件,把图片转换成特定的数据格式以用来匹配STM32系统所需要的显示数据格式。

图片

图片转换成特定的数据格式步骤:

(1)把图片尺寸修改为想要显示的大小并保存;

图片

(2)在Image2Lcd中打开要显示的图片;

(3)设置输出类型为C语言数组;扫描模式要和ILI9341的扫描方式一致;输出灰度选择屏幕适用的;确定要显示的宽度和高度;

(4)将生成的数组保存到一个h文件或c文件,方便调用。

图片

数组保存到文件后,文件会自动打开,图片现在就变成了计算机能识别的C语言数组。下面分别在屏幕上全屏显示图片,局部显示图片,区域显示图片。

图片

1.全屏显示图片

全屏显示图片,只需调用内存写入函数,把生成的数组全部写到显存,显存对应着屏幕上的每个像素点,所以要显示的图片就显示出来了。

#include 'stm32f4xx.h'

#include 'core_cm4.h'

#include 'delay.h'

#include 'ili9341.h'

#include '0.h'



int main()

{

  ILI9341_Init();

  ILI9341_WriteMemory((u16 *)gImage_0,240*320);

  while(1);

}

其中头文件0.h放的就是Image2Lcd生成的数组gImage_0。

屏幕显示如下

图片

2.局部显示图片

局部显示图片只需在全屏显示图片的基础上再开启局部显示功能,并设置局部范围的起始行和结束行,中间部分为局部区域。

图片

#include 'stm32f4xx.h'

#include 'core_cm4.h'

#include 'delay.h'

#include 'ili9341.h'

#include '0.h'



int main()

{

  ILI9341_Init();

  ILI9341_WriteMemory((u16 *)gImage_0,240*320);

  ILI9341_PartialModeOn();                    

  ILI9341_SetPartialArea(50,270);

  while(1);

}


设置局部区域起始行为50,结束行为270,局部区域为220行。屏幕显示如下,只能看到图片的部分区域,其余部分可以当成是被隐藏了,但仍然存在在现存中。这种模式下屏幕的列是不变的,只改变了行显示范围。

图片

3.区域显示图片

要区域显示图片,那就不能用上面240*320像素生成的数组了,要把图片尺寸再进行修改,重新生成数组。

要把图片设定在一个区域内,就要确定行列的起始和结束。可以调用列地址设置和行地址设置,在屏幕上开窗,开完窗后就只能在这个范围内进行操作了。然后再调用写内存函数,把重新生成的数组写入内存中。


#include 'stm32f4xx.h'

#include 'core_cm4.h'

#include 'delay.h'

#include 'ili9341.h'

#include '00.h'

#include '01.h'

int main()

{

  ILI9341_Init();


  ILI9341_SetColumnAddr(10,129); //列地址设置

  ILI9341_SetPageAddr(10,169); //页地址设置

  ILI9341_WriteMemory((u16 *)gImage_00,120*160);


  ILI9341_SetColumnAddr(142,216); //列地址设置

  ILI9341_SetPageAddr(190,289); //页地址设置

  ILI9341_WriteMemory((u16 *)gImage_01,75*100);

  while(1);

}


屏幕显示如下

图片

设置了行列地址,就能在屏幕上任意位置进行操作了。不同区域显示多张照片时,要重新设置行列地址,否则默认在之前的区域内进行操作。ILI9341初始化时默认操作范围为全屏。如果初始化完成后想对全屏进行操作,就不需要设置行列地址。


关键字:STM32  ILI9341 引用地址:STM32 ILI9341驱动TFTLCD屏(三)

上一篇:STM32 ILI9341驱动TFTLCD屏(四)
下一篇:STM32 ILI9341驱动TFTLCD屏(二)

推荐阅读最新更新时间:2026-03-25 15:40

STM32 ILI9341驱动TFTLCD(六)LCD画直线
通过前面的学习,已经掌握了LCD显示图片以及显示Gif动画。这些图片其实也可以自己通过写显存,以画画的方式完成。而画画最基本的就是点和线了。 要画一个点,只要取一个点的区域,写该点的显存就可以完成。 void LCD_DrawPoint(u16 x,u16 y,u16 color) { ILI9341_SetPageAddr(y,y); //页地址设置 ILI9341_SetColumnAddr(x,x); //列地址设置 ILI9341_WriteMemory(&color,1); //写点的显存 } 接着进行测试,连续画多个点看最终效果。 主函数 #include stm32f4xx.h #i
[单片机]
<font color='red'>STM32</font> <font color='red'>ILI9341</font><font color='red'>驱动</font><font color='red'>TFTLCD</font><font color='red'>屏</font>(六)LCD画直线
STM32 ILI9341驱动TFTLCD(四)
完成了图片显示,那动画显示也很好完成。因为动画也是由很多张图片组成的。这里以显示Gif动画为例。借助GIF动画分解软件GifSplitter把Gif动画分解成单个图像帧。然后修改图片尺寸,再用Image2Lcd把图片转换为数组。后面的操作就跟图片显示一样了。 GifSplitter分离Gif动画步骤: (1)输入要显示的Gif动画; (2)选择图片输出目录; (3)分离动画。 分解完成后得到了组成Gif动画的12张图片。 由于STM32的flash空间有限,所以只选取前6张图片进行测试。 对生成图片的尺寸进行修改,再用Image2Lcd生成6个数组,将这6个数据依次写入显存并延时一小段时间,就能看到Gif动画的效果了
[单片机]
<font color='red'>STM32</font> <font color='red'>ILI9341</font><font color='red'>驱动</font><font color='red'>TFTLCD</font><font color='red'>屏</font>(四)
STM32 控制lcm液晶ILI9341驱动的液晶驱动程序
/* 选择BANK1-BORSRAM1 连接 TFT,地址范围为0X60000000~0X63FFFFFF * FSMC_A16 接LCD的DC(寄存器/数据选择)脚 * 16 bit = FSMC 对应HADDR * 寄存器基地址 = 0X60000000 * RAM基地址 = 0X60020000 = 0X60000000+2^16*2 = 0X60000000 + 0X20000 = 0X60020000 * 当选择不同的地址线时,地址要重新计算。 */ //#define Bank1_LCD_D ((u32)0x60020000) //Disp Data ADDR //#define Bank1_LCD_C ((u3
[单片机]
STM32驱动WS2811实现渐变色、跑马灯
一、WS2811简介 输出端口耐压12V 芯片内置稳压管,24V以下电源端只需串电阻IC到VDD脚,无需外加稳压管 灰度调节电路(256级灰度可调) 内置信号整形电路,任何一个IC收到信号后经过波形整形后在输出,保证线路波形畸变不会累加 内置上电复位和掉电复位电路 PWM控制端能够实现256级调节,扫描频率不低于400HZ/S 串行接口级联,一根信号线DI完成数据的接收与解码 任意两点传输距离不超过2米无需增加任何电路 当刷新速率30帧/秒时,低速模式级联数不小于512点,高速模式下不小于1024点 数据发送速度可达与400Kbps与800Kbps两种模式 二、通讯协议 数据协议采用单线归零码的通讯方式,
[单片机]
<font color='red'>STM32</font><font color='red'>驱动</font>WS2811实现渐变色、跑马灯
深夜!我偷偷的把室友的STM32换成了GD32
一、什么是GD32 GD32是由北京兆易创新开发的国产32位MCU,基于Arm Cortex- M3/M23/M4内核以及RISC-V内核的32位通用微控制器,与STM32相比,CPU主频更高,内存更多,外设更丰富。其众多产品是以STM32芯片为模板,基于STM32的底层寄存器地址进行正向研发,部分产品可以直接PIN TO PIN替代STM32的芯片,部分型号可以直接以STM32的程序做部分修改后直接烧入进GD32中运行,例如GD32E103、GD32F10x、GD32F30x都是和STM32F10x系列是完全PIN TO PIN兼容的,内部地址寄存器完全兼容,唯一区别只是内核不同,但在使用外设时影响不会很大。 一个大胆的想法
[单片机]
STM32输入捕获
输入捕获是处理器捕获外部输入信号的功能,基于定时器抓取输入信号指定触发方式之间的长度。具体有下面三种触发情况: 1、 上升沿触发 2、 下降沿触发 3、 上下都触发 当触发条件发生后,捕获比较寄存器锁定当前的计数值,如果开启了中断或者DMA,就可以通过中断或DMA及时获得数据进行处理。有时可能遇到上一次触发的标志还没清除,下次触发就发生了,此时会将over-capture标志置位,对于可能出现over-capture的情况,建议先读取数据再清除标志,避免在读取标志后及读取数据前这段时间错过over-capture。 配置输入捕获的步骤: 1. 打开定时器和对应输入引脚的时钟 2. 配置引脚为对应的复用功能 3.
[单片机]
I2C、IIC通讯(填坑作,MPU6050数据读取,STM32主控,附源码)
上图的VCC 接 3.3V,GND接地,SCL和SDA分别接上单片机引脚,并加上上拉电阻,AD0接地。 代码链接:https://pan.baidu.com/s/1AvuMYvgX8Xy8g81S0Ay5Yg 提取码:sce0 初始化单片机引脚,并置1 程序里引脚的变化顺序还有延时的位置一定不要错。 IIC起始信号;SDA置零,等待,SCL置零 写入一次数据,IIC每次写入的数据长度都是8Bit,写入顺序是从最高位写到最低位。 SCL置0,SDA存放数据的最高位,数据左移1位,等待,SCL置1,数据起效,等待。 右移7位:1000 0000会变成0000 0001。(0X80 0X01) 左移1位:1101 000
[单片机]
使用micropython开发STM32
一、前言 MicroPython(官网:https://micropython.org),是Python3编程语言的一个完整软件实现,用C语言编写,被优化于运行在微控制器之上。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。(摘抄自weact微行工作室)。 用我的理解简单来说,就是使用C语言往单片机里写了一个Python的解释器,再将MicroPython程序脚本保存到单片机(或外部存储器)内,然后由内部的解释器运行脚本代码。优点就是接
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved