Arduino-ILI9341驱动介绍二

2024-05-10 19:28
文章标签 介绍 驱动 arduino ili9341

本文主要是介绍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;
}

这篇关于Arduino-ILI9341驱动介绍二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977335

相关文章

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio