文章目录

  • 前言
  • 一、TFT_Clock_Digital例程简介
  • 二、代码记录
    • 1.初始化全局变量
    • 2.conv2d()函数
    • 3.初始化
    • 4.loop循环中的程序段
  • 总结

前言

本文主要记录自己在VSCode+PlatformIO平台下学习ESP32-S的TFT_eSPI库时对库自带例程的学习。本次学习的第一个项目是TFT_Clock_Digital。本人作为一名单片机爱好者未写过自己的代码,仅仅在业余时间学习此类知识,希望通过阅读别人的代码提升自己的代码能力,难免出现各种错误,请大家批评指正。


一、TFT_Clock_Digital例程简介

TFT_Clock_Digital是一个简单的时钟例程,使用TFT屏幕展示时间。该例程能够更新时间但日期只能显示编译时的日期,没有更新功能。
例程更新时间的方式是通过编译时获取“TIME”并累加millis()函数计算时间。作者提示如果需要更加精确的时间,可以使用RTClib库。

二、代码记录

1.初始化全局变量

#include <TFT_eSPI.h>
#include <SPI.h>TFT_eSPI tft = TFT_eSPI(); //初始化TFT_eSPI对象
uint32_t targetTime = 0;   //更新时间标志(本程序中为1秒更新)byte omm = 99;//时间的背景阴影的刷新标志
bool initial = 1;//代码段初始化标志
byte xcolon = 0;//xpos的中间储存变量
unsigned int colour = 0;

上述代码建立了各种后续代码中需要的全局变量,标志等。

2.conv2d()函数

static uint8_t conv2d(const char* p) {uint8_t v = 0;if ('0' <= *p && *p <= '9')//比较字符的ASCII码是否在0和9之间v = *p - '0';//转化为数字return 10 * v + *++p - '0';//把两个字符转化为两位数字
}uint8_t hh=conv2d(__TIME__), mm=conv2d(__TIME__+3), ss=conv2d(__TIME__+6);  //从编译时间中分别获取小时分钟秒

该函数实现了将字符串中的前两位取出并转换为数字的功能,其中char*为字符串指针,需要保证输入的字符串为0-99之间的字符才能按照预想输出相应数字,此处输入的是__TIME__,TIME+3,TIME+6。__TIME__是内置宏定义,其意义为在源文件中插入当前编译时间。函数取出的数值为xx:xx:xx这个字符串的零一位,三四位,六七位。

3.初始化

void setup(void) {tft.init();tft.setRotation(1);//旋转90度tft.fillScreen(TFT_BLACK);//填满黑色tft.setTextColor(TFT_YELLOW, TFT_BLACK); // 文本颜色为黄,背景为黑targetTime = millis() + 1000; //初始化计时,单位为毫秒
}

初始化程序实现了调用了实例的函数,完成了相应的功能。

4.loop循环中的程序段

  if (targetTime < millis()) {//每秒targetTime = millis()+1000;ss++;              // Advance secondif (ss==60) {ss=0;omm = mm;//刷新标志,每分钟更新一次mm++;            // Advance minuteif(mm>59) {mm=0;hh++;          // Advance hourif (hh>23) {hh=0;}}}//更新时间的内容

首先判断targettime的值,其值在初始化时被赋值为millis()+1000,判断的目的是为了保证每一秒更新一次输出。当millis()函数计数达到上限,时钟就会停止更新。剩下的语句更新时间。

    if (ss==0 || initial) {//每一分钟更新一次initial = 0;tft.setTextColor(TFT_GREEN, TFT_BLACK);tft.setCursor (8, 52);tft.print(__DATE__); // This uses the standard ADAFruit small fonttft.setTextColor(TFT_BLUE, TFT_BLACK);tft.drawCentreString("It is windy",120,48,2); // Next size up font 2//tft.setTextColor(0xF81F, TFT_BLACK); // Pink//tft.drawCentreString("12.34",80,100,6); // Large font 6 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 . : a p m}

在第一次更新或每一分钟开始,都会更新当前日期(绿色)和字符串“It is windy”(蓝色)。

    // Update digital time更新显示byte xpos = 6;byte ypos = 0;if (omm != mm) { // Only redraw every minute to minimise flicker// Uncomment ONE of the next 2 lines, using the ghost image demonstrates text overlay as time is drawn over ittft.setTextColor(0x39C4, TFT_BLACK);  // Leave a 7 segment ghost image, comment out next line!//tft.setTextColor(TFT_BLACK, TFT_BLACK); // Set font colour to black to wipe image// Font 7 is to show a pseudo 7 segment display.// Font 7 only contains characters [space] 0 1 2 3 4 5 6 7 8 9 0 : .tft.drawString("88:88",xpos,ypos,7); // Overwrite the text to clear ittft.setTextColor(0xFBE0); // Orangeomm = mm;//omm此处作为刷新标志,每分钟刷新分钟和小时这两个数if (hh<10) xpos+= tft.drawChar('0',xpos,ypos,7);//多绘制一个零xpos+= tft.drawNumber(hh,xpos,ypos,7);//写小时,并返回位置保存在xposxcolon=xpos;//记录小时后面的坐标位置xpos+= tft.drawChar(':',xpos,ypos,7);//写冒号if (mm<10) xpos+= tft.drawChar('0',xpos,ypos,7);//多绘制一个零tft.drawNumber(mm,xpos,ypos,7);//分钟}

在这个程序段中,会显示整个程序中最主要的部分——电子时钟。电子时钟前景数字(橘色)和阴影(灰色)组成,字体为7号字体(七段数码管样式),程序通过TFT库的绘制函数将每个部分分别绘制出来。

if (ss%2) { // Flash the colon每两秒刷新冒号tft.setTextColor(0x39C4, TFT_BLACK);xpos+= tft.drawChar(':',xcolon,ypos,7);tft.setTextColor(0xFBE0, TFT_BLACK);}else {tft.drawChar(':',xcolon,ypos,7);colour = random(0xFFFF);  // Erase the old text with a rectangle, the disadvantage of this method is increased display flickertft.fillRect (0, 64, 160, 20, TFT_BLACK);tft.setTextColor(colour);tft.drawRightString("Colour",75,64,4); // Right justified string drawing to x position 75String scolour = String(colour,HEX);scolour.toUpperCase();//小写变大写char buffer[20];scolour.toCharArray(buffer,20);tft.drawString(buffer,82,64,4);//tft.drawString(scolour,82,64,4);//这样也能实现效果,但时常花屏和画面出错。作者用的是buffer数组实现}

上述程序段完成偶数秒绘制阴影颜色(0x39C4)的冒号,奇数秒绘制文本颜色(0xFBE0)的冒号,同时绘制随机颜色的字符串Colour,并输出Colour颜色的十六进制数值。在程序中通过实例化一个String对象获取字符串,转换为大写,储存在了数组中,最后绘制在了屏幕上。经试验,drawString()函数也能通过直接输出String对象实现字符输出,此处创建一个数组暂未知作者用意。


总结

本文试图通过详细阅读TFT_eSPI库作者提供的例程学校库的用法,并加以记录,希望能在学习库的过程中借鉴其编程方法,提高自身编程技巧。

ESP32+PlatformIO库开发--TFT_eSPI库例程解析(学习笔记1)相关推荐

  1. python web开发入门_python大佬整理的python web开发从入门到精通学习笔记

    原标题:python大佬整理的python web开发从入门到精通学习笔记 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通 ...

  2. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  3. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 --持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  4. 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习

    深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 文章目录 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 表示学习 表示学习的意义 离散表示与分布式表示 端到端学习 基于重构损 ...

  5. 算法学习 (门徒计划)4-3 专项面试题解析 学习笔记

    算法学习 (门徒计划)4-3 专项面试题解析 学习笔记 前言 LeetCode 1367. 二叉树中的列表 解题思路 示例代码 LeetCode 958. 二叉树的完全性检验 解题思路 示例代码 Le ...

  6. Arduino开发-TFT_eSPI库学习

    TFT_eSPI库学习 文章目录 TFT_eSPI库学习 TFT_eSPI库安装以及配置 TFT_eSPI库文件目录 配置文件 1.User_Setup_.h 2. User_Setup_Select ...

  7. PlatformIO平台使用TFT_eSPI库驱动IC为ST7789的TFT屏幕(TFT_eSPI详解)

    TFT_eSPI库的安装 首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面.   我们需要在这里选择要添加TFT_espi库的工程里面,选择完之后就直接Add就添加好了. TF ...

  8. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  9. Mixly第三方库开发——OLED库

    前言 Mixly自从2015年问世以来,就深受国内创客.中小学教师喜爱,如今已经成为国内最好用的Arduino图形化软件之一.Mixly最大的优点就是其开放性,Mixly建立了一个生态圈,这个生态圈欢 ...

最新文章

  1. Java Persistence API中的FetchType LAZY和EAGER之间的区别?
  2. 置换怎么表示成轮换_§2.3 置换群
  3. 服务器mysql显示链接次数太多,服务器mysql显示链接次数太多
  4. MySQL 迁移到半同步模式
  5. 工作278:控制数据从字典表获取
  6. perl中的文件句柄
  7. CGI-Plus v5.0.0.6 一键系统备份恢复工具箱单文件增强版
  8. 因多次登录失败导致的账户锁定,ssh无法登录处理
  9. Packet Tracer 思科模拟器入门教程
  10. 定时任务cron表达式详解
  11. java高级进阶面试题
  12. python爬楼梯多少种_LeetCode70爬楼梯-Python3-两种方法实现
  13. android 打开闹钟,Android中的闹钟设置关闭和打开
  14. 学车考试技巧(图解)
  15. navicat如何粘贴多行数据
  16. 【论文笔记】EagerMOT:3D Multi-Object Tracking via Sensor Fusion
  17. 使用Windows PE部署Windows镜像
  18. 使用孪生网络和零样本学习进行文本分类
  19. U盘写保护无法格式化
  20. POI java导出Excel设置自适应行高

热门文章

  1. 笔记本计算机恢复出厂设置软件,恢复出厂设置的笔记本怎样恢复数据?
  2. python3实现二维码定位及识别
  3. 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)
  4. 【STM32F429开发板用户手册】第35章 STM32F429的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)
  5. 07 Linux软件包管理
  6. 打包工具-rollup
  7. 帧率越高越清晰吗?怎么提高视频画质质量?
  8. Android App 性能优化之启动优化
  9. windows如何查看jdk安装目录
  10. linux驱动开发笔记 一 基本流程