388浏览
查看: 388|回复: 175

[项目] 【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例

[复制链接]
本帖最后由 驴友花雕 于 2025-3-27 21:09 编辑

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1


驴友花雕  中级技神
 楼主|

发表于 昨天 11:40

【花雕学编程】Arduino动手做(249)--GC9A01屏16个特色案例

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之二十:基于Adafruit_GFX库测试ESP32与GC9A01显示屏的功能

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之二十:基于Adafruit_GFX库测试ESP32与GC9A01显示屏的功能
  5. */
  6. //       GC9A010 -------- ESP32
  7. //       RST ------------ NC(复位引脚,此处未连接)
  8. //       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
  9. //       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
  10. //       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
  11. //       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
  12. //       GND ------------ GND(接地引脚,连接到ESP32的接地端)
  13. //       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
  14. #include "SPI.h"
  15. #include "Adafruit_GFX.h"
  16. #include "Adafruit_GC9A01A.h"
  17. #define TFT_DC 2
  18. #define TFT_CS 4
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
  20. void setup() {
  21.   Serial.begin (9600);
  22.   Serial.println (" ");
  23.   Serial.println ("GC9A01A Test!");
  24.   tft.begin();
  25.   Serial.println (F("Benchmark                Time (microseconds)"));
  26.   delay (10);
  27.   Serial.print(F ("Screen fill              "));
  28.   Serial.println (testFillScreen ());
  29.   delay (500);
  30.   Serial.print (F("Text                     "));
  31.   Serial.println (testText());
  32.   delay (3000);
  33.   Serial.print (F("Lines                    "));
  34.   Serial.println (testLines (GC9A01A_CYAN));
  35.   delay (500);
  36.   Serial.print (F("Horiz/Vert Lines         "));
  37.   Serial.println (testFastLines (GC9A01A_RED, GC9A01A_BLUE));
  38.   delay (500);
  39.   Serial.print (F("Rectangles (outline)     "));
  40.   Serial.println (testRects (GC9A01A_GREEN));
  41.   delay (500);
  42.   Serial.print (F("Rectangles (filled)      "));
  43.   Serial.println (testFilledRects (GC9A01A_YELLOW, GC9A01A_MAGENTA));
  44.   delay (500);
  45.   Serial.print (F("Circles (filled)         "));
  46.   Serial.println (testFilledCircles (10, GC9A01A_MAGENTA));
  47.   Serial.print (F("Circles (outline)        "));
  48.   delay (500);
  49.   Serial.print (F("Triangles (outline)      "));
  50.   Serial.println (testTriangles ());
  51.   delay (500);
  52.   Serial.print (F("Triangles (filled)       "));
  53.   Serial.println (testFilledTriangles ());
  54.   delay (500);
  55.   Serial.print (F("Rounded rects (outline)  "));
  56.   Serial.println (testRoundRects ());
  57.   delay (500);
  58.   Serial.print (F("Rounded rects (filled)   "));
  59.   Serial.println (testFilledRoundRects ());
  60.   delay (500);
  61.   Serial.println (F("Done!"));
  62. }
  63. void loop(void) {
  64.   for (uint8_t rotation = 0; rotation < 4; rotation++)
  65.   {
  66.     tft.setRotation (rotation);
  67.     testText ();
  68.     delay (1000);
  69.   }
  70. }
  71. unsigned long testFillScreen() {
  72.   unsigned long start = micros();
  73.   tft.fillScreen (GC9A01A_BLACK);
  74.   yield ();
  75.   tft.fillScreen (GC9A01A_RED);
  76.   yield ();
  77.   tft.fillScreen (GC9A01A_GREEN);
  78.   yield ();
  79.   tft.fillScreen (GC9A01A_BLUE);
  80.   yield ();
  81.   tft.fillScreen (GC9A01A_BLACK);
  82.   yield ();
  83.   return micros () - start;
  84. }
  85. unsigned long testText () {
  86.   tft.fillScreen (GC9A01A_BLACK);
  87.   unsigned long start = micros ();
  88.   tft.setCursor (10, 40);
  89.   tft.setTextColor (GC9A01A_WHITE);  tft.setTextSize(1);
  90.   tft.println ("     Hello World!");
  91.   tft.setTextColor (GC9A01A_YELLOW); tft.setTextSize(2);
  92.   tft.println ("   1234.56");
  93.   tft.setTextColor (GC9A01A_RED);    tft.setTextSize(3);
  94.   tft.println (0xDEADBEEF, HEX);
  95.   tft.println ();
  96.   tft.setTextColor (GC9A01A_GREEN);
  97.   tft.setTextSize (5);
  98.   tft.println ("Groop");
  99.   tft.setTextSize (2);
  100.   tft.println ("I implore thee,");
  101.   tft.setTextSize (1);
  102.   tft.println ("my foonting turlingdromes.");
  103.   tft.println ("And hooptiously drangle me");
  104.   tft.println ("with crinkly bindlewurdles,");
  105.   tft.println ("Or I will rend thee");
  106.   tft.println ("in the gobberwarts");
  107.   tft.println ("with my blurglecruncheon,");
  108.   tft.println ("see if I don't!");
  109.   return micros () - start;
  110.   delay (1000);
  111. }
  112. unsigned long testLines (uint16_t color) {
  113.   unsigned long start, t;
  114.   int           x1, y1, x2, y2,
  115.                 w = tft.width (),
  116.                 h = tft.height ();
  117.   tft.fillScreen (GC9A01A_BLACK);
  118.   yield ();
  119.   x1    = y1 = 0;
  120.   y2    = h - 1;
  121.   start = micros ();
  122.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  123.   x2    = w - 1;
  124.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  125.   t     = micros () - start;                                                  
  126.   // fillScreen doesn't count against timing
  127.   yield ();
  128.   tft.fillScreen (GC9A01A_BLACK);
  129.   yield ();
  130.   x1    = w - 1;
  131.   y1    = 0;
  132.   y2    = h - 1;
  133.   start = micros ();
  134.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  135.   x2    = 0;
  136.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  137.   t    += micros() - start;
  138.   yield ();
  139.   tft.fillScreen (GC9A01A_BLACK);
  140.   yield ();
  141.   x1    = 0;
  142.   y1    = h - 1;
  143.   y2    = 0;
  144.   start = micros ();
  145.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  146.   x2    = w - 1;
  147.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  148.   t    += micros () - start;
  149.   yield ();
  150.   tft.fillScreen (GC9A01A_BLACK);
  151.   yield ();
  152.   x1    = w - 1;
  153.   y1    = h - 1;
  154.   y2    = 0;
  155.   start = micros ();
  156.   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  157.   x2    = 0;
  158.   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
  159.   yield();
  160.   return micros () - start;
  161. }
  162. unsigned long testFastLines(uint16_t color1, uint16_t color2) {
  163.   unsigned long start;
  164.   int           x, y, w = tft.width (), h = tft.height ();
  165.   tft.fillScreen (GC9A01A_BLACK);
  166.   start = micros ();
  167.   for (y = 0; y < h; y += 5) tft.drawFastHLine ( 0, y, w, color1);
  168.   for (x = 0; x < w; x += 5) tft.drawFastVLine (x, 0, h, color2);
  169.   return micros () - start;
  170. }
  171. unsigned long testRects (uint16_t color) {
  172.   unsigned long start;
  173.   int           n, i, i2,
  174.                 cx = tft.width ()  / 2,
  175.                 cy = tft.height () / 2;
  176.   tft.fillScreen (GC9A01A_BLACK);
  177.   n     = min (tft.width (), tft.height ());
  178.   start = micros ();
  179.   for (i = 2; i < n; i += 6)
  180.   {
  181.     i2 = i / 2;
  182.     tft.drawRect (cx - i2, cy - i2, i, i, color);
  183.   }
  184.   return micros () - start;
  185. }
  186. unsigned long testFilledRects (uint16_t color1, uint16_t color2) {
  187.   unsigned long start, t = 0;
  188.   int           n, i, i2,
  189.                 cx = tft.width ()  / 2 - 1,
  190.                 cy = tft.height () / 2 - 1;
  191.   tft.fillScreen (GC9A01A_BLACK);
  192.   n = min (tft.width (), tft.height ());
  193.   for (i = n; i > 0; i -= 6)
  194.   {
  195.     i2    = i / 2;
  196.     start = micros ();
  197.     tft.fillRect (cx - i2, cy - i2, i, i, color1);
  198.     t    += micros () - start;
  199.     // outlines are not included in timing results
  200.     tft.drawRect (cx - i2, cy - i2, i, i, color2);
  201.     yield ();
  202.   }
  203.   return t;
  204. }
  205. unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
  206.   unsigned long start;
  207.   int x, y, w = tft.width (), h = tft.height (), r2 = radius * 2;
  208.   tft.fillScreen (GC9A01A_BLACK);
  209.   start = micros ();
  210.   for (x = radius; x < w; x += r2)
  211.   {
  212.     for (y = radius; y < h; y += r2)
  213.     {
  214.       tft.fillCircle (x, y, radius, color);
  215.     }
  216.   }
  217.   return micros () - start;
  218. }
  219. unsigned long testCircles (uint8_t radius, uint16_t color) {
  220.   unsigned long start;
  221.   int           x, y, r2 = radius * 2,
  222.                       w = tft.width ()  + radius,   // screen is not cleared for this one -- this is
  223.                       h = tft.height () + radius;   // intentional and does not affect the reported time.
  224.   start = micros ();
  225.   for (x = 0; x < w; x += r2)
  226.   {
  227.     for (y = 0; y < h; y += r2)
  228.     {
  229.       tft.drawCircle (x, y, radius, color);
  230.     }
  231.   }
  232.   return micros () - start;
  233. }
  234. unsigned long testTriangles () {
  235.   unsigned long start;
  236.   int           n, i, cx = tft.width  () / 2 - 1,
  237.                       cy = tft.height () / 2 - 1;
  238.   tft.fillScreen (GC9A01A_BLACK);
  239.   n     = min (cx, cy);
  240.   start = micros ();
  241.   for (i = 0; i < n; i += 5)
  242.   {
  243.     tft.drawTriangle (
  244.       cx    , cy - i,                                                     // top of triangle
  245.       cx - i, cy + i,                                                     // bottom left
  246.       cx + i, cy + i,                                                     // bottom right
  247.       tft.color565( i, i, i));
  248.   }
  249.   return micros () - start;
  250. }
  251. unsigned long testFilledTriangles () {
  252.   unsigned long start, t = 0;
  253.   int           i, cx = tft.width ()  / 2 - 1,
  254.                    cy = tft.height () / 2 - 1;
  255.   tft.fillScreen (GC9A01A_BLACK);
  256.   start = micros ();
  257.   for (i = min (cx, cy); i > 10; i -= 5)
  258.   {
  259.     start = micros ();
  260.     tft.fillTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
  261.                       tft.color565 (0, i * 10, i * 10));
  262.     t += micros () - start;
  263.     tft.drawTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
  264.                       tft.color565 (i * 10, i * 10, 0));
  265.     yield ();
  266.   }
  267.   return t;
  268. }
  269. unsigned long testRoundRects () {
  270.   unsigned long start;
  271.   int           w, i, i2,
  272.                 cx = tft.width  () / 2 - 1,
  273.                 cy = tft.height () / 2 - 1;
  274.   tft.fillScreen (GC9A01A_BLACK);
  275.   w     = min (tft.width (), tft.height ());
  276.   start = micros ();
  277.   for (i = 0; i < w; i += 6)
  278.   {
  279.     i2 = i / 2;
  280.     tft.drawRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (i, 0, 0));
  281.   }
  282.   return micros () - start;
  283. }
  284. unsigned long testFilledRoundRects () {
  285.   unsigned long start;
  286.   int           i, i2,
  287.                 cx = tft.width  () / 2 - 1,
  288.                 cy = tft.height () / 2 - 1;
  289.   tft.fillScreen (GC9A01A_BLACK);
  290.   start = micros ();
  291.   for (i = min (tft.width (), tft.height ()); i > 20; i -= 6)
  292.   {
  293.     i2 = i / 2;
  294.     tft.fillRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (0, i, 0));
  295.     yield ();
  296.   }
  297.   return micros () - start;
  298. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 昨天 09:27

【花雕学编程】Arduino动手做(249)--GC9A01屏16个特色案例

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之十七:实现文本正反旋转与随机中心文字

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之十七:实现文本正反旋转与随机中心文字
  5. */
  6. //       GC9A010 -------- ESP32
  7. //       RST ------------ NC(复位引脚,此处未连接)
  8. //       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
  9. //       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
  10. //       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
  11. //       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
  12. //       GND ------------ GND(接地引脚,连接到ESP32的接地端)
  13. //       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
  14. #include "SPI.h"                   // 引入SPI库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. #define DELAY_TIME 100             // 每次旋转延迟(毫秒)
  21. #define SCREEN_CENTER_X 120        // 屏幕中心X坐标(240x240屏幕)
  22. #define SCREEN_CENTER_Y 120        // 屏幕中心Y坐标(240x240屏幕)
  23. #define RADIUS 80                  // 旋转半径
  24. #define NUM_TURNS 1                // 每个方向的旋转圈数
  25. #define OFFSET_LEFT 25             // 向左偏移量
  26. void setup() {
  27.     Serial.begin(9600);            // 初始化串口通信
  28.     Serial.println("Rotating Letters and Centered Random 'OK'!");
  29.     tft.begin();                   // 初始化显示屏
  30.     tft.setRotation(2);            // 设置初始旋转方向
  31.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  32.     randomSeed(analogRead(0));     // 初始化随机数种子
  33. }
  34. void rotateText(int direction) {
  35.     // 根据旋转方向正转或反转
  36.     for (int angle = 0; angle < NUM_TURNS * 360; angle += 10) {
  37.         // 清屏
  38.         tft.fillScreen(GC9A01A_BLACK);
  39.         // 随机生成颜色
  40.         uint16_t randomColor = random(0x0000, 0xFFFF); // RGB565随机颜色
  41.         // 计算字母位置(向左偏移 OFFSET_LEFT)
  42.         float radian = angle * direction * 3.14159 / 180; // 正转:方向为1,反转:方向为-1
  43.         int x = SCREEN_CENTER_X + RADIUS * cos(radian) - OFFSET_LEFT; // “Hello”左偏移
  44.         int y = SCREEN_CENTER_Y + RADIUS * sin(radian);
  45.         // 设置旋转文字属性
  46.         tft.setTextColor(randomColor);                 // 设置随机颜色
  47.         tft.setTextSize(2);                            // 设置字体大小
  48.         tft.setCursor(x, y);                           // 设置文本位置
  49.         tft.print("Hello");                            // 显示字母
  50.         // 显示中心文字“OK”
  51.         int randomSize = random(1, 5);                 // 随机生成字体大小
  52.         tft.setTextColor(GC9A01A_WHITE);               // 中心文字颜色为白色
  53.         tft.setTextSize(randomSize);                   // 设置中心文字大小
  54.         tft.setCursor(SCREEN_CENTER_X - (6 * randomSize), SCREEN_CENTER_Y - (8 * randomSize));
  55.         tft.print("OK");                               // 屏幕正中心显示“OK”
  56.         delay(DELAY_TIME);                             // 延迟控制动画速度
  57.     }
  58. }
  59. void loop() {
  60.     rotateText(1);  // 正转一圈
  61.     rotateText(-1); // 反转一圈
  62. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 前天 10:14

【花雕学编程】Arduino动手做(249)--ESP32 GC9A01动态同心园

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之五:多色彩动态循环同心园

  实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之五:多色彩动态循环同心园
  5. */
  6. //       GC9A010 -------- ESP32
  7. //       RST ------------ NC(复位引脚,此处未连接)
  8. //       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
  9. //       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
  10. //       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
  11. //       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
  12. //       GND ------------ GND(接地引脚,连接到ESP32的接地端)
  13. //       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
  14. #include "SPI.h"                   // 引入SPI库
  15. #include "Adafruit_GFX.h"          // 引入Adafruit GFX库
  16. #include "Adafruit_GC9A01A.h"      // 引入GC9A01A显示屏驱动库
  17. #define TFT_DC 2                   // 定义TFT显示屏的DC引脚
  18. #define TFT_CS 4                   // 定义TFT显示屏的CS引脚
  19. Adafruit_GC9A01A tft(TFT_CS, TFT_DC); // 创建GC9A01A对象
  20. void setup() {
  21.     Serial.begin(9600);            // 初始化串口通信
  22.     Serial.println("Multi-Circle Animation with Color Change!");
  23.     tft.begin();                   // 初始化显示屏
  24.     tft.setRotation(3);            // 设置显示屏方向
  25.     tft.fillScreen(GC9A01A_BLACK); // 清屏
  26. }
  27. void loop() {
  28.     int centerX = tft.width() / 2; // 屏幕中心X坐标
  29.     int centerY = tft.height() / 2; // 屏幕中心Y坐标
  30.     // 定义颜色数组用于动态颜色切换
  31.     uint16_t colors[] = {GC9A01A_RED, GC9A01A_GREEN, GC9A01A_BLUE, GC9A01A_YELLOW, GC9A01A_CYAN, GC9A01A_MAGENTA, GC9A01A_WHITE};
  32.     int colorCount = sizeof(colors) / sizeof(colors[0]);
  33.     static int colorIndex = 0;      // 当前颜色索引
  34.     static int radius1 = 10;        // 第一个圆的半径
  35.     static int radius2 = 20;        // 第二个圆的半径
  36.     static int radius3 = 30;        // 第三个圆的半径
  37.     int step = 5;                   // 半径的变化步长
  38.     static bool increasing1 = true; // 控制第一个圆半径增减
  39.     static bool increasing2 = true; // 控制第二个圆半径增减
  40.     static bool increasing3 = true; // 控制第三个圆半径增减
  41.     // 清屏,绘制新一帧动画
  42.     tft.fillScreen(GC9A01A_BLACK);
  43.     // 绘制三个圆
  44.     tft.drawCircle(centerX, centerY, radius1, colors[colorIndex]);                 // 圆1
  45.     tft.drawCircle(centerX, centerY, radius2, colors[(colorIndex + 1) % colorCount]); // 圆2
  46.     tft.drawCircle(centerX, centerY, radius3, colors[(colorIndex + 2) % colorCount]); // 圆3
  47.     // 更新第一个圆半径
  48.     if (increasing1) {
  49.         radius1 += step;
  50.         if (radius1 >= 115) {       // 达到最大半径后反向
  51.             increasing1 = false;
  52.         }
  53.     } else {
  54.         radius1 -= step;
  55.         if (radius1 <= 10) {        // 达到最小半径后反向
  56.             increasing1 = true;
  57.         }
  58.     }
  59.     // 更新第二个圆半径
  60.     if (increasing2) {
  61.         radius2 += step;
  62.         if (radius2 >= 115) {
  63.             increasing2 = false;
  64.         }
  65.     } else {
  66.         radius2 -= step;
  67.         if (radius2 <= 10) {
  68.             increasing2 = true;
  69.         }
  70.     }
  71.     // 更新第三个圆半径
  72.     if (increasing3) {
  73.         radius3 += step;
  74.         if (radius3 >= 115) {
  75.             increasing3 = false;
  76.         }
  77.     } else {
  78.         radius3 -= step;
  79.         if (radius3 <= 10) {
  80.             increasing3 = true;
  81.         }
  82.     }
  83.     // 更新颜色索引
  84.     colorIndex = (colorIndex + 1) % colorCount;
  85.     // 延时0.3秒,控制动画速度
  86.     delay(300);
  87. }
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

知识点:GC9A01 驱动芯片

GC9A01是一款支持262,144种颜色的单芯片SOC驱动器,专用于a-TFT液晶显示器,分辨率为240RGBx240像素。它集成了一个360通道源驱动器、一个32通道栅极驱动器,以及129,600字节的GRAM(用于存储240RGBx240像素的图形显示数据),并配备电源电路。

GC9A01支持多种接口模式,包括并行的8/9/12/16/18位数据总线MCU接口、6/12/16/18位数据总线RGB接口,以及3/4线串行外围接口(SPI)。通过窗口地址功能,可以在内部GRAM中指定动态图像区域,并实现该区域的选择性更新,从而同时显示动态图像和静态图像区域。

此外,GC9A01支持全彩模式、8色显示模式以及通过软件控制的睡眠模式,从而实现精准的电源管理。这些特点使GC9A01成为中小型便携设备(如数字手机、智能手机、MP3和PMP)液晶驱动器的理想选择,特别适合那些注重电池续航的应用场景。

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

关于1.28寸圆形彩色TFT显示屏(240 * 240,SPI接口,GC9A01驱动)的详细介绍:

一、显示屏基本参数
​尺寸与形状
尺寸为1.28寸,采用圆形设计。这种圆形的屏幕在一些特定的应用场景中具有独特优势,比如在可穿戴设备(如智能手表)上,圆形屏幕更符合人体工程学和用户的视觉习惯,能够提供更自然、舒适的观看体验。
​分辨率与显示效果
分辨率为240 * 240像素。这一分辨率在1.28寸的小尺寸屏幕上能够提供较为清晰的图像显示效果。对于显示简单的图标、文字以及一些基本的图形元素来说已经足够,并且可以在有限的空间内展示较为丰富的信息。
作为彩色TFT显示屏,它能够呈现出丰富的色彩。相比黑白显示屏,彩色显示可以增强视觉效果,使数据显示、图像展示等更加生动直观。
采用IPS(In - Plane Switching)技术。IPS技术的优势在于能够提供更广阔的可视角度,从不同的方向观看屏幕时,图像的色彩和对比度变化较小。这对于需要多人查看或者在各种角度下使用设备的场景非常重要,如在工业控制设备中,不同角度的操作人员都能清晰看到屏幕内容。

二、接口与驱动
​SPI接口
SPI(Serial Peripheral Interface)接口是一种高速、全双工、同步的串行通信接口。对于这个1.28寸的显示屏来说,SPI接口具有很多优点。
高速数据传输能力使得微控制器(MCU)能够快速地向显示屏驱动芯片(GC9A01)发送指令和数据。这有助于提高屏幕的响应速度,减少图像显示的延迟,在显示动态图像或者频繁更新的数据时表现得更为出色。
SPI接口的布线相对简单,只需要少量的信号线(如时钟线、数据线、片选线等)就可以实现通信。这对于PCB(印刷电路板)布局来说非常有利,可以减少布线的复杂性,降低电磁干扰(EMI)的风险,同时也有助于节省PCB的空间,使得整个模块更加紧凑。
​GC9A01驱动芯片
GC9A01芯片专门用于驱动这种TFT - LCD屏幕。它负责接收来自MCU通过SPI接口发送过来的指令和数据,并将其转换为对液晶像素的控制信号。
芯片能够对屏幕的显示参数进行设置,如对比度、亮度、色彩饱和度等。通过MCU的软件控制,可以根据具体的应用需求调整这些参数,以达到最佳的显示效果。
在显示控制方面,GC9A01可以实现对240 * 240像素的精确控制,将接收到的数据准确地显示在屏幕上相应的位置。它还支持多种显示模式和图形操作,如清屏、画点、画线、填充区域等基本图形操作,以及更复杂的图像显示和文字显示功能。

三、应用场景
​可穿戴设备
在智能手表、智能手环等可穿戴设备中,这种显示屏可以用来显示时间、通知信息(如短信、邮件提醒)、健康数据(如心率、步数)等。圆形屏幕和彩色显示能够提升用户体验,而SPI接口和GC9A01驱动芯片的组合则保证了数据传输的高效性和显示的稳定性。
​物联网设备
对于一些小型的物联网终端设备,如智能家居传感器节点(带有显示功能)或者工业物联网中的小型监控设备。它可以显示设备的状态信息(如在线/离线、工作模式)、采集到的数据(如温度、湿度数值)等。其紧凑的尺寸、低功耗(得益于SPI接口和芯片本身的特性)以及良好的显示效果使其成为物联网设备显示模块的理想选择。
​小型消费电子设备
在一些小型的消费电子设备中,如便携式音乐播放器、电子相册等。它可以用来显示歌曲信息、播放进度、照片等内容。彩色屏幕和合适的分辨率能够提供较好的视觉体验,而SPI接口方便与设备的MCU进行连接,GC9A01驱动芯片确保了显示功能的正常实现。

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

本帖最后由 驴友花雕 于 2025-3-23 21:03 编辑

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验开发板使用ESP32

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验模块接线示意图

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图3
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之一:点亮GC9A01A显示屏
  实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之一:点亮GC9A01A显示屏
  5. */
  6. #include "SPI.h" // 引入SPI库,用于与SPI设备通信
  7. #include "Adafruit_GFX.h" // 引入Adafruit GFX库,用于图形绘制
  8. #include "Adafruit_GC9A01A.h" // 引入GC9A01A显示屏驱动库
  9. #define TFT_DC 2 // 定义TFT显示屏的DC引脚
  10. #define TFT_CS 4 // 定义TFT显示屏的CS引脚
  11. // 创建GC9A01A对象,初始化显示屏
  12. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
  13. void setup() {
  14.     Serial.begin(9600); // 初始化串口通信,波特率为9600
  15.     Serial.println("GC9A01A Test!"); // 打印测试信息到串口
  16.     // 初始化显示屏
  17.     tft.begin();
  18.     // 设置显示屏方向
  19.     tft.setRotation(2);
  20. }
  21. void loop() {
  22.     // 填充屏幕颜色,这里使用黑色,相当于清屏
  23.     tft.fillScreen(GC9A01A_BLACK);
  24.     // 设置文本颜色为白色
  25.     tft.setTextColor(GC9A01A_WHITE);
  26.     // 设置文本大小
  27.     tft.setTextSize(2);
  28.     // 设置文本起始位置
  29.     tft.setCursor(75, 110);
  30.     // 显示欢迎词
  31.     tft.println("Welcome!");
  32.     // 可以适当添加延时,避免刷新过快
  33.     delay(100);
  34. }   
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

代码解读:

1、引用库文件

  1. #include "SPI.h"                 
  2. #include "Adafruit_GFX.h"         
  3. #include "Adafruit_GC9A01A.h"     
复制代码


SPI库 (SPI.h):用于支持与SPI设备通信,这是一种快速同步通信协议。
Adafruit GFX库 (Adafruit_GFX.h):一个灵活的图形库,支持基本图形操作,如绘制线条、矩形和文本。
Adafruit GC9A01A库 (Adafruit_GC9A01A.h):特定于GC9A01A显示屏的驱动库,负责初始化和控制显示屏硬件。

2、定义引脚

  1. #define TFT_DC 2   
  2. #define TFT_CS 4   
复制代码


TFT_DC:数据/命令引脚,用于区分发送的是显示数据还是指令。
TFT_CS:片选引脚,用于选择当前连接的显示屏。
通过这些定义,代码可以轻松调整连接的硬件配置。

3、创建显示屏对象

  1. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
复制代码


tft对象:通过将TFT_CS和TFT_DC作为参数传入构造函数,创建显示屏的控制对象,用于后续操作显示屏。

4、初始化设置 (setup())

  1. Serial.begin(9600);                 
  2. Serial.println("GC9A01A Test!");   
  3. tft.begin();                        
  4. tft.setRotation(2);         
复制代码


串口初始化:Serial.begin(9600) 设置波特率为9600,方便进行调试和输出信息。
串口信息输出:Serial.println("GC9A01A Test!") 在串口监视器打印一条调试信息。
显示屏初始化:调用tft.begin()完成GC9A01A显示屏的初始化配置。
屏幕方向设置:使用tft.setRotation(2)调整屏幕的显示方向(数字参数对应不同方向)。

5、主循环 (loop())

  1. tft.fillScreen(GC9A01A_BLACK);      
  2. tft.setTextColor(GC9A01A_WHITE);   
  3. tft.setTextSize(2);                 
  4. tft.setCursor(75, 110);            
  5. tft.println("Welcome!");            
  6. delay(100);
复制代码


填充屏幕背景色:tft.fillScreen(GC9A01A_BLACK) 将屏幕填充为黑色,相当于清屏。
设置文本颜色:tft.setTextColor(GC9A01A_WHITE) 将后续的文本颜色设为白色。
设置文本大小:tft.setTextSize(2) 设置字体的放大比例,2表示常规字体的2倍大小。
设置文本位置:tft.setCursor(75, 110) 将文本的绘制起始点设置为(75, 110)的像素坐标。
显示文本:tft.println("Welcome!") 在屏幕上输出“Welcome!”文字。
延时:delay(100) 增加短暂延时(100毫秒),避免屏幕内容频繁刷新。

6、总结
这段代码主要完成了以下功能:
硬件初始化:通过串口和显示屏驱动库配置硬件。
屏幕方向设置:调整显示方向以适配需求。
屏幕清屏与文字显示:在屏幕上输出静态文本“Welcome!”。
延时避免刷新干扰:延时使屏幕显示更加稳定。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验串口返回情况

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验场景图

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之二:显示线条与大小圆形

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之二:显示线条与大小圆形
  5. */
  6. #include "SPI.h" // 引入SPI库,用于与SPI设备通信
  7. #include "Adafruit_GFX.h" // 引入Adafruit GFX库,用于图形绘制
  8. #include "Adafruit_GC9A01A.h" // 引入GC9A01A显示屏驱动库
  9. #define TFT_DC 2 // 定义TFT显示屏的DC引脚
  10. #define TFT_CS 4 // 定义TFT显示屏的CS引脚
  11. // 创建GC9A01A对象,初始化显示屏
  12. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
  13. void setup() {
  14.     Serial.begin(9600); // 初始化串口通信,波特率为9600
  15.     Serial.println("GC9A01A Test!"); // 打印测试信息到串口
  16.     // 初始化显示屏
  17.     tft.begin();
  18.     // 设置显示屏方向
  19.     tft.setRotation(3);
  20. }
  21. void loop() {
  22.     // 填充屏幕颜色,这里使用黑色,相当于清屏
  23.     tft.fillScreen(GC9A01A_BLACK);
  24.     // 设置文本颜色为白色
  25.     tft.setTextColor(GC9A01A_WHITE);
  26.     // 设置文本大小
  27.     tft.setTextSize(2);
  28.     // 设置文本起始位置
  29.     tft.setCursor(80, 120);
  30.     // 显示欢迎词
  31.     tft.println("Welcome!");
  32.     // 绘制线条
  33.     tft.drawLine(20, 20, 200, 20, GC9A01A_RED);
  34.     // 绘制小圆形
  35.     tft.drawCircle(120, 60, 10, GC9A01A_GREEN);
  36.     // 绘制大圆形
  37.     tft.fillCircle(130, 200, 30, GC9A01A_BLUE);
  38.     // 可以适当添加延时,避免刷新过快
  39.     delay(100);
  40. }   
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

代码解读

1、​引入库:

SPI.h:用于与SPI设备通信。
Adafruit_GFX.h:提供基本的图形绘制功能(如绘制线条、圆形等)。
Adafruit_GC9A01A.h:提供GC9A01A显示屏的驱动支持。

2、​引脚定义:

TFT_DC:定义TFT显示屏的DC引脚(数据/命令选择引脚)。
TFT_CS:定义TFT显示屏的CS引脚(片选引脚)。

3、​显示屏对象:

使用Adafruit_GC9A01A类创建tft对象,初始化显示屏。

4、setup()函数:

初始化串口通信,用于调试输出。
初始化显示屏,设置显示屏方向为横向(setRotation(3))。

5、loop()函数:

清空屏幕(填充为黑色)。
显示欢迎词("Welcome!")。
绘制一条红色线条。
绘制一个小绿色圆形。
绘制一个大蓝色填充圆形。
添加延时(delay(100)),避免刷新过快。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验串口返回情况

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验场景图  

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目实验之三:间隔1秒循环显示七彩虹颜色

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目实验之三:间隔1秒循环显示七彩虹颜色
  5. */
  6. #include "SPI.h" // 引入SPI库,用于与SPI设备通信
  7. #include "Adafruit_GFX.h" // 引入Adafruit GFX库,用于图形绘制
  8. #include "Adafruit_GC9A01A.h" // 引入GC9A01A显示屏驱动库
  9. #define TFT_DC 2 // 定义TFT显示屏的DC引脚
  10. #define TFT_CS 4 // 定义TFT显示屏的CS引脚
  11. // 创建GC9A01A对象,初始化显示屏
  12. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
  13. // 定义七彩虹颜色
  14. const uint16_t rainbowColors[] = {
  15.     GC9A01A_RED,
  16.     GC9A01A_ORANGE,
  17.     GC9A01A_YELLOW,
  18.     GC9A01A_GREEN,
  19.     GC9A01A_BLUE,
  20.     0x4B0082, // 近似靛色的 RGB565 值
  21.     0xEE82EE  // 近似紫色的 RGB565 值
  22. };
  23. // 定义颜色数量
  24. const int numColors = sizeof(rainbowColors) / sizeof(rainbowColors[0]);
  25. void setup() {
  26.     Serial.begin(9600); // 初始化串口通信,波特率为9600
  27.     Serial.println("GC9A01A Test!"); // 打印测试信息到串口
  28.     // 初始化显示屏
  29.     tft.begin();
  30.     // 设置显示屏方向
  31.     tft.setRotation(3);
  32. }
  33. void loop() {
  34.     for (int i = 0; i < numColors; i++) {
  35.         // 填充屏幕为当前七彩虹颜色
  36.         tft.fillScreen(rainbowColors[i]);
  37.         // 设置文本颜色为白色
  38.         tft.setTextColor(GC9A01A_WHITE);
  39.         // 设置文本大小
  40.         tft.setTextSize(2);
  41.         // 设置文本起始位置
  42.         tft.setCursor(80, 120);
  43.         // 显示欢迎词
  44.         tft.println("Welcome!");
  45.         // 绘制线条
  46.         tft.drawLine(20, 20, 200, 20, GC9A01A_RED);
  47.         // 绘制小圆形
  48.         tft.drawCircle(120, 60, 10, GC9A01A_GREEN);
  49.         // 绘制大圆形
  50.         tft.fillCircle(130, 200, 30, GC9A01A_BLUE);
  51.         // 间隔1秒
  52.         delay(1000);
  53.     }
  54. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

功能解析
1、​硬件连接:

使用SPI接口连接TFT显示屏。
TFT_DC(数据/命令选择引脚)连接到Arduino的GPIO 2。
TFT_CS(片选引脚)连接到Arduino的GPIO 4。

2、主要功能:

初始化TFT显示屏。
定义七彩虹颜色数组。
每隔1秒循环填充屏幕为不同的彩虹颜色。
在屏幕上显示欢迎词("Welcome!")。
绘制简单的图形(线条和圆形)。

3、​颜色定义:

使用GC9A01A_RED、GC9A01A_ORANGE等预定义颜色常量。
使用RGB565格式手动定义靛色(0x4B0082)和紫色(0xEE82EE)。

4、​关键代码段分析
​1. 引入库和引脚定义

  1. #include "SPI.h" // 引入SPI库,用于与SPI设备通信
  2. #include "Adafruit_GFX.h" // 引入Adafruit GFX库,用于图形绘制
  3. #include "Adafruit_GC9A01A.h" // 引入GC9A01A显示屏驱动库
  4. #define TFT_DC 2 // 定义TFT显示屏的DC引脚
  5. #define TFT_CS 4 // 定义TFT显示屏的CS引脚
复制代码


​解读:
SPI.h:提供SPI通信协议的支持,TFT显示屏通过SPI接口与Arduino通信。
Adafruit_GFX.h:提供通用的图形绘制功能(如绘制线条、圆形等)。
Adafruit_GC9A01A.h:提供GC9A01A显示屏的驱动支持,包括初始化、设置方向、填充颜色等功能。
TFT_DC和TFT_CS:定义显示屏的控制引脚,分别用于数据/命令选择和片选。

​2. 创建显示屏对象

  1. Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
复制代码


​解读:
创建tft对象,初始化GC9A01A显示屏。
TFT_CS和TFT_DC分别传递给构造函数,用于控制显示屏的片选和数据/命令选择。

​3. 定义七彩虹颜色

  1. const uint16_t rainbowColors[] = {
  2.     GC9A01A_RED,
  3.     GC9A01A_ORANGE,
  4.     GC9A01A_YELLOW,
  5.     GC9A01A_GREEN,
  6.     GC9A01A_BLUE,
  7.     0x4B0082, // 近似靛色的 RGB565 值
  8.     0xEE82EE  // 近似紫色的 RGB565 值
  9. };
  10. const int numColors = sizeof(rainbowColors) / sizeof(rainbowColors[0]);
复制代码


​解读:
rainbowColors数组定义了七彩虹颜色,包括预定义的颜色常量(如GC9A01A_RED)和手动定义的RGB565颜色值。
numColors计算数组中颜色的数量,方便循环遍历。

​4. 初始化显示屏

  1. void setup() {
  2.     Serial.begin(9600); // 初始化串口通信,波特率为9600
  3.     Serial.println("GC9A01A Test!"); // 打印测试信息到串口
  4.     // 初始化显示屏
  5.     tft.begin();
  6.     // 设置显示屏方向
  7.     tft.setRotation(3);
  8. }
复制代码


​解读:
Serial.begin(9600):初始化串口通信,波特率为9600,用于调试输出。
tft.begin():初始化GC9A01A显示屏,配置显示屏的工作模式。
tft.setRotation(3):设置显示屏的方向为横向(旋转180°)。setRotation的值范围为0到3,分别对应不同的屏幕方向:
0:正常方向。
1:顺时针旋转90°。
2:旋转180°。
3:顺时针旋转270°。

​5. 循环显示七彩虹颜色

  1. void loop() {
  2.     for (int i = 0; i < numColors; i++) {
  3.         // 填充屏幕为当前七彩虹颜色
  4.         tft.fillScreen(rainbowColors[i]);
  5.         // 设置文本颜色为白色
  6.         tft.setTextColor(GC9A01A_WHITE);
  7.         // 设置文本大小
  8.         tft.setTextSize(2);
  9.         // 设置文本起始位置
  10.         tft.setCursor(80, 120);
  11.         // 显示欢迎词
  12.         tft.println("Welcome!");
  13.         // 绘制线条
  14.         tft.drawLine(20, 20, 200, 20, GC9A01A_RED);
  15.         // 绘制小圆形
  16.         tft.drawCircle(120, 60, 10, GC9A01A_GREEN);
  17.         // 绘制大圆形
  18.         tft.fillCircle(130, 200, 30, GC9A01A_BLUE);
  19.         // 间隔1秒
  20.         delay(1000);
  21.     }
  22. }
复制代码


​解读:
​循环遍历颜色数组:
使用for循环遍历rainbowColors数组,依次填充屏幕为不同的颜色。
​清空屏幕:
tft.fillScreen(rainbowColors):用当前颜色填充整个屏幕。
​显示欢迎词:
tft.setTextColor(GC9A01A_WHITE):设置文本颜色为白色。
tft.setTextSize(2):设置文本大小为2倍。
tft.setCursor(80, 120):设置文本的起始位置为(80, 120)。
tft.println("Welcome!"):在屏幕上显示"Welcome!",并换行。
​绘制图形:
tft.drawLine(20, 20, 200, 20, GC9A01A_RED):从(20, 20)到(200, 20)绘制一条红色线条。
tft.drawCircle(120, 60, 10, GC9A01A_GREEN):在(120, 60)处绘制一个半径为10的绿色空心圆。
tft.fillCircle(130, 200, 30, GC9A01A_BLUE):在(130, 200)处绘制一个半径为30的蓝色实心圆。
​延时:
delay(1000):延时1秒,确保每种颜色显示1秒。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验串口返回情况

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 天前

【花雕学编程】Arduino动手做(249)---1.28寸 TFT 圆屏 GC9A01

实验场景图  动态图

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图2

【花雕学编程】Arduino动手做(249)--GC9A01屏38个特色案例图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail