Arduino-ILI9341驱动开发TFT屏显示任意内容三

Arduino-ILI9341驱动开发TFT屏显示任意内容三

1.概述

这篇文章介绍使用ILI9341驱动提供的函数控制TFT屏显示字符串、图形、符号等等内容的编辑和展示。

2.硬件

2.1.硬件列表

名称数量
Arduino Uno1
2.8" TFT彩色液晶触摸屏模块(ILI9431)1
10K 电阻5
面包板1
杜邦线若干

2.2.TFT触摸屏介绍

1.TFT触摸屏官方资料

https://spotpear.cn/index/study/detail/id/632.html

2.引脚介绍
序号引脚编号说明
1VCC5V/3.3V电源输入
2GND接地
3CS液晶屏片选信号,低电平使能
4RESET液晶屏复位信号,低电平复位
5DC/RS液晶屏寄存器/数据选择信号,低电平:寄存器,高电平:数据
6SDI(MOSI)SPI总线写数据信号
7SCKSPI总线时钟信号
8LED背光控制,高电平点亮,如无需控制则接3.3V常亮
9SDO(MISO)SPI总线读数据信号,如无需读取功能则可不接
10以下为触摸屏信号线接线,如无需触摸或者模块本身不带触摸功能,可不连接
11T_CLK触摸SPI总线时钟信号
12T_CS触摸屏片选信号,低电平使能
13T_DIN触摸SPI总线输入
14T_DO触摸SPI总线输出
15T_IRQ触摸屏中断信号,检测到触摸时为低电平

2.3.硬件电路连接

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

在这里插入图片描述

3.ILI9341驱动库使用

这个章节介绍什么
这里主要介绍如何使用ILI9341驱动提供的函数,并且通过代码示例详细介绍每个参数的作用以及将程序烧录到Arduino上显示屏显示的结果。

如何介绍ILI9341驱动函数
该章节会按照显示内容对函数进行分类,比如字符、汉字、图形等等,方便根据需求查找相应函数的使用。

示例展示风格
在介绍示例时会将代码分成两个部分,一个是初始化设置部分,一个是函数介绍部分

  • 初始化设置部分的代码是不修改的,因此只介绍一次
  • 函数介绍部分是实现屏幕显示内容,因此在每个小节中单独介绍。

3.1.基本示例

下面通过一个完整的示例代码介绍在TFT屏幕显示内容,该完整代码包含了初始化设置部分的代码和函数介绍部分,在后面的示例代码中只会给出函数介绍部分代码,运行时只需要加上初始化设置部分代码即可。

1.输出HelloWorld

下面代码用注释方式将初始化设置部分函数介绍部分进行了区分,将全部代码复制到IDE后运行会在显示屏显示HelloWorld


/*********************** 一、初始化设置部分 **********************/#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驱动控制显示屏显示内容"); //2.初始化tfttft.begin();//在IDE控制台输出调试信息Serial.print(F("在IDE控制台输出文字内容"));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!");return micros() - start;
}

下面开始介绍各个函数使用实例,介绍的所有函数如果想查看该函数的源代码都可以在Github找到,我们的第二篇文章Arduino-ILI9341驱动介绍二
介绍了Adafruit_ILI9341库的继承体系和项目地址,因此可以参考该篇文章找到。

3.2.输出字符与数字

创建一个函数testText 将输出字符的代码封装到函数中,下面详细介绍下使用
ILI9341驱动将字符输出到屏幕的操作步骤

1.设置屏幕背景颜色
fillScreen函数在Adafruit_GFX类中,该函数用来设置屏幕的背景颜色。
该函数传入的参数ILI9341_BLACKAdafruit_ILI9341类中定义的颜色常量。
如果要改变颜色可以查看该类中其他颜色定义的常量。

tft.fillScreen(ILI9341_BLACK);

2.设置文字在屏幕上显示的坐标位置

tft.setCursor(100, 100);

3.设置字符颜色和字号

tft.setTextColor(ILI9341_WHITE);
//数字越大,字号越大
tft.setTextSize(1);

4.设置输出到屏幕字符内容

tft.println("Hello World!");

计算内容输出时间
创建的testText函数定义了一个long类型的返回值用来接收屏幕显示一次内容的时间。

  • unsigned long start = micros(); 调用micros函数获取开始时间微妙
  • micros() - start; 再次获取一个结束时间减去开始时间就是屏幕上内容显示完成的时间。
unsigned long testText() {unsigned long start = micros();// 输出字符代码...return micros() - start;
}

设置输出字符完整代码

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!");return micros() - start;
}

3.3.线条

绘制线条使用Adafruit_GFX类中的drawLine函数,该函数接受x和y坐标系参数,其中x0、x1表示水平轴起点到终点坐标;y0、y1表示垂直轴起点到终点坐标。

/*函数名:drawLine返回类型:void,表示这个函数不返回任何值。函数修饰符:virtual,表示这个函数可以在派生类中被重写。参数列表:int16_t x0:表示线条起点的x坐标,使用16位有符号整数表示。int16_t y0:表示线条起点的y坐标,使用16位有符号整数表示。int16_t x1:表示线条终点的x坐标,使用16位有符号整数表示。int16_t y1:表示线条终点的y坐标,使用16位有符号整数表示。uint16_t color:表示线条的颜色,使用16位无符号整数表示。这通常是一个颜色代码,具体的解释(如RGB值)取决于上下文和drawLine函数的实现。*/tft.drawLine(1, 10, 100, 10, color); 

使用drawLine函数绘制线条操作步骤如下
1.定义x和y轴坐标系

//设置x和y轴起始到结束坐标变量 int x1, y1, x2, y2;

2.获取当前屏幕的宽高

//获取屏幕的宽高  int w = tft.width();  int h = tft.height(); 

3.设置背景颜色

// 设置背景颜色tft.fillScreen(ILI9341_BLACK);

4.设置x和y轴绘制坐标数据

//设置x轴起点坐标为0,终点坐标为屏幕的宽度x1 = 0; x2 = w;//设置y轴起点和终点都是高度的一半 y1 = y2 = h/2;  start = micros();  

5.调用drawLine函数绘制线条

tft.drawLine(x1, y1, x2, y2, color); 

完整代码示例实现了在屏幕高度一半的位置画一条水平线

/*创建一个绘制线条函数接受屏幕输出内容运行时间color参数是线条颜色
*/
unsigned long testLines(uint16_t color) {  unsigned long start, t; //设置x和y轴起始到结束坐标变量 int x1, y1, x2, y2;//获取屏幕的宽高  int w = tft.width();  int h = tft.height();  // 设置背景颜色tft.fillScreen(ILI9341_BLACK);   //设置x轴起点坐标为0,终点坐标为屏幕的宽度x1 = 0; x2 = w;//设置y轴起点和终点都是高度的一半 y1 = y2 = h/2;  start = micros();  /*函数名:drawLine返回类型:void,表示这个函数不返回任何值。函数修饰符:virtual,表示这个函数可以在派生类中被重写。参数列表:int16_t x0:表示线条起点的x坐标,使用16位有符号整数表示。int16_t y0:表示线条起点的y坐标,使用16位有符号整数表示。int16_t x1:表示线条终点的x坐标,使用16位有符号整数表示。int16_t y1:表示线条终点的y坐标,使用16位有符号整数表示。uint16_t color:表示线条的颜色,使用16位无符号整数表示。这通常是一个颜色代码,具体的解释(如RGB值)取决于上下文和drawLine函数的实现。*/tft.drawLine(x1, y1, x2, y2, color); // 在这里获取绘制线条所用的时间  t = micros() - start; // 直接返回绘制线条所用的时间  return t;  
}

setup函数中调用testLines函数

void setup() {Serial.begin(9600);Serial.println("ILI9341驱动控制显示屏显示内容"); //2.初始化tfttft.begin();//调用绘制线条函数Serial.print(F("Lines                    "));Serial.println(testLines(ILI9341_CYAN));delay(500);Serial.println(F("Done!"));}

修改坐标系值在屏幕中间绘制一条垂直线

//设置x轴起点坐标为0,终点坐标为屏幕的宽度x1 = w/2; x2 = w/2;//设置y轴起点和终点都是高度的一半 y1 = 0;y2 = h;  start = micros();  tft.drawLine(x1, y1, x2, y2, color); 

动态绘制垂直线和水平线

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);return micros() - start;
}/*创建一个绘制线条函数*接受屏幕输出内容运行时间*color参数是线条颜色
*/
unsigned long testLines(uint16_t color) {  unsigned long start, t; //设置x和y轴坐标变量 int x1, y1, x2, y2;//获取屏幕的宽高  int w = tft.width();  int h = tft.height();  // 设置背景颜色tft.fillScreen(ILI9341_BLACK);   x1 = y1 = 0;  y2 = h - 1;  start = micros();  // 绘制垂直线条  for (x2 = 0; x2 < w; x2 +=6) {  tft.drawLine(x1, y1, x2, y2, color);  }  x2 = w - 1;  // 绘制水平线条  for (y2 = 0; y2 < h; y2 += 6) {  tft.drawLine(x1, y1, x2, y2, color);  }  // 在这里获取绘制线条所用的时间  t = micros() - start; // fillScreen的时间不包括在内  // 可以在这里保留或移除yield(),取决于你的具体需求  yield();  // 直接返回绘制线条所用的时间  return t;  
}

3.4.图形

下面是一个绘制矩形图形的函数

/*
int16_t x: 矩形的左上角的x坐标。int16_t是一个16位有符号整数类型,通常用于表示小范围的整数。
int16_t y: 矩形的左上角的y坐标。
int16_t w: 矩形的宽度。
int16_t h: 矩形的高度。
uint16_t color: 用于绘制矩形的颜色。uint16_t是一个16位无符号整数类型,常用于表示颜色值(虽然这取决于具体的颜色表示系统,如RGB565等)
*/
virtual void drawRect(int16_t x, int16_t y, int16_t w, int16_t h,uint16_t color);

绘制一个图形的示例操作步骤如下

unsigned long testRects(uint16_t color) {unsigned long start;// 设置背景颜色tft.fillScreen(ILI9341_BLUE);//定义xy轴和宽高变量int x,y,w,h;//设置绘制矩形x和y轴的起点位置x,y = 100;//设置矩形宽高w = tft.width()/2;h = tft.height()/2;start = micros();tft.drawRect(x, y, w, h, color);return micros() - start;
}

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

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

相关文章

TensorFlow的学习

0.基础概念 术语表&#xff1a; https://developers.google.cn/machine-learning/glossary?hlzh-cn#logits 1.快速入门 https://tensorflow.google.cn/tutorials/quickstart/beginner?hlzh-cn 2.基于Keras进行图像分类 https://tensorflow.google.cn/tutorials/keras/cl…

免费申请https证书

免费申请https证书 https域名证书对提高网站排名有一定的好处&#xff0c;所以当今很多企业为了给网站一个好的安全防护&#xff0c;就会去申请该证书。如今很多企业虽然重视网站的安全防护&#xff0c;但是也重视成本&#xff0c;所以为了节约成本会考虑申请免费的https证书。…

现在适合进入AIGC行业吗?

现在适合进入AIGC行业吗&#xff1f; 随着人工智能生成内容&#xff08;AIGC&#xff09;技术的快速发展&#xff0c;越来越多的人开始关注这个行业。那么&#xff0c;现在是否是进入AIGC行业的好时机呢&#xff1f;本文将从行业前景、市场需求以及个人选择与规划三个方向进行…

基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型

整理了基于死区补偿的永磁同步电动机矢量控制系统simulink仿真&#xff0c;该模型使用线性死区补偿的PMSM矢量控制算法进行仿真&#xff0c;使用Foc电流双闭环 。 1.模块划分清晰&#xff0c;补偿前后仿真有对比&#xff0c;易于学习; 2.死区补偿算法的线性区区域可调; 3.自…

AI Agent LangChain使用方法记录

B站教程OpenAI官网获取密钥&#xff1a; OPENAI官网获取KEY 报错“Did not find openai_api_key, please add an environment variable OPENAI_API_KEY”

【LeetCode】每日一题 2024_5_14 完成所有任务需要的最少轮数(哈希)

文章目录 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01;题目&#xff1a;完成所有任务需要的最少轮数题目描述代码与解题思路 每天进步一点点 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;完成所有任务需要的最少轮数 题…

Git团队协作机制

Git 团队协作机制 1.团队内协作 小故事&#xff1a;岳不群手里有华山剑法但是不完整&#xff0c;需要弟子令狐冲进行完善&#xff0c;岳不群将华山剑法推送&#xff08;push&#xff09;到代码托管中心&#xff0c;这样岳不群就有属于自己的远程库&#xff0c;令狐冲从远程库…

短剧私域-快速引流变现

短剧的爆火&#xff0c;衍生出了很多周边项目。 比如免费看剧App&#xff0c;短剧搜索机器人&#xff0c;短剧付费圈子等等。 这些项目的本质&#xff0c;就是借助短剧的热度&#xff0c;把流量引到自己的鱼塘进行变现。 短剧机器人大家都知道&#xff0c;目前最火的一种玩法…

tomcat--安装

官网&#xff1a;Apache Tomcat - Welcome! 官网文档&#xff1a;Apache Tomcat 8 (8.5.100) - Documentation Index 帮助文档&#xff1a;Apache Tomcat Home - Apache Tomcat - Apache Software Foundation FAQ - Apache Tomcat - Apache Software Foundation yum安装 查…

智能AI数字人直播带货软件系统,支持所有平台直播可带货,引流私域,同城团购 带源代码包

系统概述 智能AI数字人直播带货软件系统是一款基于人工智能技术的创新产品&#xff0c;该系统集成了深度学习、自然语言处理、图像识别等多项前沿技术&#xff0c;能够模拟真实主播的行为和表情&#xff0c;实现高度智能化的直播带货体验。该系统支持所有主流直播平台&#xf…

【Flask 系统教程 6】进阶操作

Flask操作cookie 在 Flask 中操作 Cookie 是相对简单的。Cookie 是一种存储在用户计算机上的小型数据片段&#xff0c;由服务器发送到用户浏览器&#xff0c;然后在每次请求时由浏览器发送回服务器。在 Flask 中&#xff0c;你可以使用 request 对象来读取 cookie&#xff0c;…

Vue.js 详细介绍

文章目录 一、Vue.js 简介1.1 什么是 Vue.js&#xff1f;1.2 Vue.js 的特点 二、快速上手 Vue.js2.1 安装 Vue.js使用 CDN使用 npm 或 yarn 2.2 创建一个 Vue 实例2.3 Vue.js 项目结构 三、Vue.js 核心概念3.1 数据绑定3.2 指令&#xff08;Directives&#xff09;3.3 组件&…