Arduino-ILI9341驱动介绍二

Arduino-ILI9341驱动介绍二

1.概述

第一篇文章介绍了Arduino-点亮TFT触摸屏,没有介绍如何改变屏幕的内容。这篇文章介绍Arduino-使用ILI9341驱动控制TFT触摸屏原理ILI9341驱动源代码设计原理以及常用函数

2.Arduino控制TFT触控屏原理

  • Arduino使用什么方式控制屏幕取决于屏幕的驱动芯片和他的通信方式,在第一篇文章中介绍的TFT屏可以使用SPI通讯方式与Arduino通信,该屏幕集成了Adafruit_ILI9341驱动,通过该驱动控制屏幕显示内容。
  • 掌握了Adafruit_ILI9341驱动的使用就可以使用 Arduino控制TFT触控屏显示设置好的内容。

3.ILI9341驱动程序原理

3.1.ILI9341驱动源代码

1.ILI9341继承体系

Adafruit_ILI9341驱动封装好了操作TFT屏幕的函数,只要调用写好的函数就可以编辑屏幕的内容
Adafruit_ILI9341驱动是Adafruit包中的一个类文件,只有该类还不能完成操作TFT屏幕,因此他还继承了其他类的函数。该类的继承关系如下

  • Adafruit_ILI9341类——>继承Adafruit_SPITFT类;
  • Adafruit_SPITFT类——>继承Adafruit_GFX类
  • 因此Adafruit_ILI9341类间接——>继承Adafruit_GFX类,该类拥有了Adafruit_SPITFT类Adafruit_GFX类函数。

各个类库作用

名称作用
Adafruit_GFX实现了向屏幕输出字符串和各种形状的图形
Adafruit_SPITFT控制SPI通信数据传输
Adafruit_ILI9341实现了选择屏幕通信方式以及初始化屏幕信息
2.查看ILI9341继承体系过程和方法
1.查看Adafruit_ILI9341继承关系

在GitHub中搜索Adafruit_ILI9341项目,查看该项目的Adafruit_ILI9341.h文件,地址如下
https://github.com/adafruit/Adafruit_ILI9341/blob/master/Adafruit_ILI9341.h
查看该文件源代码可以看到他继承了Adafruit_SPITFT

// Adafruit_ILI9341 继承 Adafruit_SPITFT
class Adafruit_ILI9341 : public Adafruit_SPITFT {
public:Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK,int8_t _RST = -1, int8_t _MISO = -1);Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _RST = -1);...}
2.查看Adafruit_SPITFT继承关系

在GitHub中搜索Adafruit_GFX项目,查看该项目的Adafruit_SPITFT.h文件,地址如下
https://github.com/adafruit/Adafruit-GFX-Library/blob/master/Adafruit_SPITFT.h
查看该文件源代码可以看到他继承了Adafruit_GFX

class Adafruit_SPITFT : public Adafruit_GFX {

3.2.Adafruit_ILI9341源代码介绍

Adafruit_ILI9341.h文件源代码做了三件事情

// 1.为各个地址创建引用的变量
#define ILI9341_TFTWIDTH 240  ///< ILI9341 max TFT width
#define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height#define ILI9341_NOP 0x00     ///< No-op register
#define ILI9341_SWRESET 0x01 ///< Software reset register
#define ILI9341_RDDID 0x04   ///< Read display identification information
#define ILI9341_RDDST 0x09   ///< Read Display Status
...
...
...//2.定义颜色对应的编码地址
// Color definitions
#define ILI9341_BLACK 0x0000       ///<   0,   0,   0
#define ILI9341_NAVY 0x000F        ///<   0,   0, 123
#define ILI9341_DARKGREEN 0x03E0   ///<   0, 125,   0
...
...
...//3.创建该类的构造器和函数
class Adafruit_ILI9341 : public Adafruit_SPITFT {
public:Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _MOSI, int8_t _SCLK,int8_t _RST = -1, int8_t _MISO = -1);Adafruit_ILI9341(int8_t _CS, int8_t _DC, int8_t _RST = -1);
#if !defined(ESP8266)Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs = -1,int8_t rst = -1);
#endif // end !ESP8266Adafruit_ILI9341(tftBusWidth busWidth, int8_t d0, int8_t wr, int8_t dc,int8_t cs = -1, int8_t rst = -1, int8_t rd = -1);void begin(uint32_t freq = 0);void setRotation(uint8_t r);void invertDisplay(bool i);void scrollTo(uint16_t y);void setScrollMargins(uint16_t top, uint16_t bottom);// Transaction API not used by GFXvoid setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h);uint8_t readcommand8(uint8_t reg, uint8_t index = 0);
};

4.ILI9341驱动控制TFT触控屏基础使用

1.硬件电路
Arduino接口端TFT触摸屏端
5VVCC
GNDGND
10串联10KΩ电阻到CS
8串联10KΩ电阻到REST
9串联10KΩ电阻到DC
11串联10KΩ电阻到MOSI
13串联10KΩ电阻到SCK
VCCLED
12MISO

在这里插入图片描述

2.ILI9341驱动代码

下面演示一个最简单的入门示例,通过ILI9341驱动提供的函数向显示屏输出文字。

#include "Adafruit_ILI9341.h"// 定义引脚功能
#define TFT_DC 9
#define TFT_CS 10
#define  TFT_RST 8
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_CLK 13// 1.创建Adafruit_ILI9341类的对象tft,传入SPI引脚参数,
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);void setup() {Serial.begin(9600);Serial.println("ILI9341 Test!"); //2.初始化tfttft.begin();//在IDE控制台输出调试信息Serial.print(F("Text                     "));Serial.println(testText());delay(3000);Serial.println(F("Done!"));}void loop(void) {//调用函数输出文本内容testText();
}// 创建函数定义ILI9341驱动操作屏幕输出字符串的功能
unsigned long testText() {//设置背景颜色tft.fillScreen(ILI9341_BLACK);unsigned long start = micros();// 设置文字显示的坐标tft.setCursor(100, 100);//设置文字颜色和字号tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);//设置屏幕输出文字内容tft.println("Hello World!");tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);tft.println(1234.56);tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);return micros() - start;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/685912.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

音频数字信号I2S一些知识理解

(1)I2S单向基本传输需要几根线传输音频信号? 3根线 LRCK SCLK(也叫BLK) DATA(单向) (2)如何理解I2S MASTER或者SLAVE的模式&#xff1f; codec的i2s作为slave mode,LRCK和SCLK来自于soc主控端,codec端自动检测MCLK和LRCK codec的i2s作为master mode,codec通过MCLK LRCLKDIV…

JUC下的CompletableFuture详解

详细介绍 CompletableFuture是Java 8引入的一个实现Future接口的类&#xff0c;它代表一个异步计算的结果。与传统的Future相比&#xff0c;CompletableFuture提供了更丰富的功能&#xff0c;比如链式调用、组合异步操作、转换结果、异常处理等&#xff0c;极大地增强了Java在…

STM32CubeMX软件使用(超详细)

1、Cube启动页介绍 2、芯片选择页面介绍 3、输入自己的芯片型号&#xff0c;这里以STM32U575RIT6举例 4、芯片配置页码介绍 5、芯片外设配置栏详细说明 6、点击ClockConfiguration进行时钟树的配置&#xff0c;选择时钟树后可以选择自己想使用的时钟源&#xff0c;也可以直接输…

H201Ti 数据安装说明

GE H201Ti&#xff0c;即Hydran H201Ti&#xff0c;是一款小型在线预警发射器&#xff0c;专门用于变压器的故障气体监测。 具体来说&#xff0c;Hydran H201Ti的特点和优势包括&#xff1a; 体积小巧&#xff1a;它设计紧凑&#xff0c;便于在有限的空间内安装。易于安装&am…

Linux应用(四)——系统IO函数

本节学习linux系统中常见的IO函数&#xff0c;讲解及其基本用法&#xff1b; 一、 open/close函数 open函数作用:系统调用open函数&#xff0c;打开指定路径的文件&#xff1b; int open(const char *pathname, int flags&#xff09;&#xff1b;打开一个存在的文件&#xff1…

uniapp picker组件的样式更改

不知道有没有小伙伴遇到过这个问题 我是各种穿透和层级都尝试了更改不了其样式 梳理一下 H5端 在全局app.vue下添加如下代码 .uni-picker-container .uni-picker-header{ background-color: $uni-color-pink; //picker头部背景色}.uni-picker-container .…

ttkbootstrap界面美化系列之PanedWindow(七)

在界面设计中经常用PanedWindow控件来对整个界面进行切割布局&#xff0c;让整个界面看上去有层次感&#xff0c;不至于说杂乱无章。在我之前的文章中有对tkinter的该控件做了详细的介绍&#xff0c;链接如下基于Tkinter的PanedWindow组件进行窗口布局-CSDN博客 本文主要是介绍…

【进程替换】多进程程序替换原理 | 进程程序替换函数 | execlexecv | execlpexecvp

目录 多进程程序替换 多进程程序替换原理 进程程序替换函数详解 execl&execv execlp&execvp execle&execvpe execve 多进程程序替换 我们想要进程替换的同时不影响旧的进程&#xff08;使用多进程版&#xff09;fork创建子进程&#xff0c;让子进程去替换执…

并发问题系统学习(更新中)

进程、线程 进程&#xff1a;进程是代码在数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位。可以理解为一个java应用。 线程&#xff1a;线程是进程的一个执行路径&#xff0c;一个进程中至少有一个线程&#xff0c;进程中的多个线程共享进程的资源。…

2024.05.10作业

TCP服务器 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; …

Paddle 基于ANN(全连接神经网络)的GAN(生成对抗网络)实现

什么是GAN GAN是生成对抗网络&#xff0c;将会根据一个随机向量&#xff0c;实现数据的生成&#xff08;如生成手写数字、生成文本等&#xff09;。 GAN的训练过程中&#xff0c;需要有一个生成器G和一个鉴别器D. 生成器用于生成数据&#xff0c;鉴定器用于鉴定数据的准确性&…