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 !ESP8266
  Adafruit_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 GFX
  void 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.初始化tft
  tft.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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

echarts自定义图例显示名称、数值、占比

先上代码 legend: {orient: vertical,left: 10,top:20,data: data,textStyle: {color: #9FB7D5 // 设置图例文字颜色为白色},// type: plain, // 设置图例类型为普通类型itemWidth: 10, // 设置图例项的宽度itemHeight: 10, // 设置图例项的高度formatter: function(name) {let…

Oracle 多表查询

关联查询 一、sql:1992语法的连接笛卡尔积等值连接非等值连接自连接外连接 二、sql:1999语法的连接交叉连接自然连接USING创建连接ON创建连接左外连接右外连接FULL OUTER JOININNER JOIN 三、子查询子查询的种类单行子查询多行子查询 在From字句中使用子查询练习 四、行转列 一…

【半夜学习MySQL】库的操作(含库的创建、删除、修改、备份操作/查看mysql连接情况/字符集和校验规则详谈)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 创建数据库字符集和校验规则查看字符集合校验规则校验规则对数据库的影响 操纵数据库数据备份和恢复查看连接情况 创建数据库…

Redis20种使用场景

Redis20种使用场景 1缓存2抽奖3Set实现点赞/收藏功能4排行榜5PV统计&#xff08;incr自增计数&#xff09;6UV统计&#xff08;HeyperLogLog&#xff09;7去重&#xff08;BloomFiler&#xff09;8用户签到&#xff08;BitMap&#xff09;9GEO搜附近10简单限流11全局ID12简单分…

苹果新品发布会速览:iPad革新遇市场挑战 | 百能云芯

北京时间5月7日晚&#xff0c;苹果以“放飞吧”为主题&#xff0c;举办了一场不到40分钟的线上新品发布会。在这场发布会上&#xff0c;iPad产品线成为了焦点&#xff0c;M4芯片和OLED技术的融入更是引起了广泛关注。 iPad新篇章&#xff1a;技术革新与市场竞争 时隔18个月&…

初识C语言——第十七天

选择语句&#xff1a;switch switch语句&#xff08;整型表达式&#xff09; { 语句项&#xff1a; } 而语句项是什么呢&#xff1f; //是一些case语句&#xff1a; //如下 case 整形常量表达式&#xff1b;常量可以&#xff0c;字符也可以&#xff08;因为字符存储的时…

应该在哪里找海外ip代理?

出于学习工作&#xff0c;或者游戏娱乐的需求&#xff0c;许多人需要使用海外代理ip。那么我们该如何寻找到合适的、正规的、安全的海外代理ip呢&#xff1f; 首先&#xff0c;我们需要明白使用海外IP代理可能带来的风险&#xff0c;包括隐私泄露、网络速度变慢、安全风险以及可…

大势所趋!企业网站HTTPS升级全面普及化

JoySSL官网 注册码230918 HTTPS加密协议的应用无疑是维护网络信息安全的重要一环。随着技术的不断进步与用户隐私意识的增强&#xff0c;HTTPS加密已不再仅仅是大型企业的专属&#xff0c;而是逐渐成为所有企业网站的标准配置&#xff0c;其普及化趋势显而易见&#xff0c;堪称…

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向最临近值取整nearest。 10进制数的nearest nearest&#xff1a; 向最临近值方向取整。它的舍入方式和四舍五入非常类似&#xff0c;都是舍入到最近的整数…

Jenkins流水线部署Maven项目

使用Jenkins的流水线功能&#xff0c;构建部署Java Maven项目&#xff0c;步骤很简单但是不少细节需要注意。 一、安装 Jenkins的安装步骤和流程就不具体描述&#xff0c;这里主要介绍一下安装时要注意的几个问题。 1、Jenkins尽量安装最新的几个版本&#xff0c;否则安装完成…

数据库调优-连接池优化

先贴下连接池的相关配置&#xff1a; 连接池参数配置&#xff1a; 字段含义Max Number of Connections最大连接数&#xff1b;做性能测试时&#xff0c;可以填 0 。在开发的项目中按实际代码填写&#xff0c;默认是 20 。Max Wait(ms)在连接池中取回连接最大等待时间&#xf…

在51单片机里面学习C语言

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「&#xff23;语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 说出来你们可能都…

程序的环境和预处理#define #ifdefine

文章目录 预编译 预处理做的事情把#include<>里面的内容执行了注释删除&#xff0c;使用空格替换注释define 把符号统统替换为值 编译阶段做的事情链接做的事情运行环境预处理(预处理)详解预定义符号__FILE____LINE____DATE__ __TIME__写日志文件__FUNCTION__ #define预处…

克服 Prometheus 单值数据模型的局限性:GreptimeDB 的新路径

引言 Prometheus 已经成为监控和报警生态系统的基石&#xff0c;在高效、直接地处理实时指标&#xff08;Metric&#xff09;方面有着强大的表现。Prometheus 的核心是一个包含单个值和一系列标签的数据模型。这种设计在提升简单性和适应性的同时&#xff0c;也带来了一些挑战…

Ftp笑脸漏洞(VSFTPD 2.3.4)复现(后门漏洞)

Ftp笑脸漏洞&#xff08;VSFTPD 2.3.4&#xff09;复现&#xff08;后门漏洞&#xff09; 一、原理二、复现准备三、漏洞复现四、Metasploit利用脚本复现 一、原理 vsftpd 是“ very secure FTP daemon ”的缩写&#xff0c;安全性是它的一个最大的特点。 vsftpd是一个 UNIX 类…

Python专题:八、列表(3)

列表的场景应用 统计和肺考试成绩 >不支持字符串和整数之间的比较 sort()函数从小到大排列 reverse&#xff08;&#xff09;函数从大到小排列 列表推导式 字符串列表的转化&#xff0c;join&#xff08;&#xff09;函数列表生成字符串 split&#xff08;&#xff09;函…

Android system property运作流程源码分析

一.序 前文分析了build.prop这个系统属性文件的生成&#xff0c;每个属性都有一个名称和值&#xff0c;他们都是字符串格式。属性被大量使用在Android系统中&#xff0c;用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性&#x…

Kafka应用Demo:生产者自定义消息分区方法

背景 没有设置消息键时Kafka默认的分区算法是轮循&#xff0c;设置了消息键将按消息键的hashcode计算分区值。这种方法可以保证未设置消息键时各分区负载均衡。也可以保证设置消息键后的消息放到同一个分区发送&#xff0c;以保证消息按顺序消费。 但在某些业务场景下&#xff…

python_5

# 制作一个注册登录模块 # 注册&#xff1a;将用户填入的账户和密码保存到一个文件(users.bin) # 登陆&#xff1a;将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那么登录成功&#xff0c;否则登录失败 import hashlib import json import o…

Vue3知识总结-1

前面学习一段时间的前端&#xff0c;但是没有进行过太多的练习&#xff0c;并且对于里面一些重要的知识点也没有去着重的记忆&#xff0c;所以打算在学习Vue3的时候&#xff0c;做一些笔记&#xff0c;方便后面翻看。这个笔记会对于学习一些做一些&#xff0c;而不是一个整体的…