【花雕学编程】Arduino动手做(249)---ESP32 1.28寸 TFT GC9A01屏幕之带边框有日期的数字时钟

2025-03-27104
AI 快速预览详细 收起
本项目使用ESP32和1.28寸TFT GC9A01屏幕制作带边框有日期的数字时钟。硬件清单包括ESP32和TFT GC9A01屏幕。最终效果是每秒更新时间,分钟和日期随时间变化自动调整。难度等级适中,适合初学者和电子爱好者。

00 (1).jpg
00 (2).jpg
02.jpg
10 (1).jpg
10 (2).jpg
12.jpg
15.jpg

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
 项目实验之三十三:带边框有日期的数字时钟

实验开源代码

 

代码
/*
  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之三十三:带边框有日期的数字时钟
*/

//       GC9A01---------- ESP32
//       RST ------------ NC(复位引脚,此处未连接)
//       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
//       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
//       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
//       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
//       GND ------------ GND(接地引脚,连接到ESP32的接地端)
//       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_GC9A01A.h"

// 定义屏幕引脚
#define TFT_CS 4        // 片选引脚
#define TFT_DC 2        // 数据/命令引脚
#define TFT_RST -1      // 重置引脚(未使用时设置为 -1)

// 初始化屏幕对象
Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);

// 初始化时间变量(初始为 2025年3月27日,时间为12:00:00)
int year = 2025, month = 3, day = 27;
int hours = 12, minutes = 0, seconds = 0;

void drawCircularBorders() {
    // 绘制双环圆边框
    tft.drawCircle(120, 120, 119, GC9A01A_WHITE);   // 外环圆(白色)
    tft.drawCircle(120, 120, 110, GC9A01A_CYAN);    // 内环圆(青色)
}

void displayDateAndTime() {
    // 清除显示区域
    tft.fillRect(20, 60, 200, 160, GC9A01A_BLACK);

    // 显示日期
    tft.setTextSize(3);
    tft.setTextColor(GC9A01A_YELLOW, GC9A01A_BLACK); // 黄色文本,黑色背景
    tft.setCursor(35, 80);
    tft.printf("%04d/%02d/%02d", year, month, day);

    // 显示时间
    tft.setTextSize(4);
    tft.setTextColor(GC9A01A_GREEN, GC9A01A_BLACK); // 绿色文本,黑色背景
    tft.setCursor(2, 130);
    tft.printf(" %02d:%02d:%02d", hours, minutes, seconds);
}

void updateClock() {
    // 更新时间
    seconds++;
    if (seconds >= 60) {
        seconds = 0;
        minutes++;
    }
    if (minutes >= 60) {
        minutes = 0;
        hours++;
    }
    if (hours >= 24) {
        hours = 0;
        day++;
        // 简单处理月份和闰年(可进一步完善)
        if ((month == 2 && day > 28) || (month != 2 && day > 30)) {
            day = 1;
            month++;
        }
        if (month > 12) {
            month = 1;
            year++;
        }
    }
}

void setup() {
    Serial.begin(115200);           // 初始化串口通信
    Serial.println("Circular Border Clock");

    tft.begin();                    // 初始化屏幕
    tft.setRotation(2);             // 设置屏幕方向
    tft.fillScreen(GC9A01A_BLACK);  // 设置黑色背景

    drawCircularBorders();          // 绘制双环圆边框
}

void loop() {
    displayDateAndTime();           // 显示日期和时间
    updateClock();                  // 更新时间
    delay(1000);                    // 每秒更新一次
}

代码说明

1、双环圆边框:

外环半径 119,颜色为白色(GC9A01A_WHITE)。

内环半径 110,颜色为青色(GC9A01A_CYAN)。

两环同心围绕屏幕中心点 (120, 120)。

2、日期时间显示:

显示样式为 Date: 2025/03/27 和 Time: 12:00:00。

文本与边框紧密结合,居中显示,整体布局美观。

3、自动时间更新:

每秒更新时间,分钟和日期随时间变化自动调整。

4、屏幕刷新优化:

仅刷新日期和时间区域,不重绘边框,减少屏幕闪烁。

5、效果描述

屏幕显示一个双环圆边框,中间的日期和时间动态更新。

外环和内环颜色鲜明,对比明显,整体设计简洁美观。

每秒刷新一次时间,随着时间推进日期也会自动变化。

 

实验场景图  动态图

 

50 (1).jpg
50 (2).jpg
00092.gif

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -