【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程) 
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动 
  项目实验之二十:基于Adafruit_GFX库测试ESP32与GC9A01显示屏的功能 
 
实验开源代码 
 
- /*
 -   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
 -   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
 -   项目实验之二十:基于Adafruit_GFX库测试ESP32与GC9A01显示屏的功能
 - */
 - 
 - //       GC9A010 -------- 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_DC 2
 - #define TFT_CS 4
 - 
 - Adafruit_GC9A01A tft(TFT_CS, TFT_DC);
 - 
 - void setup() {
 - 
 -   Serial.begin (9600);
 -   Serial.println (" ");
 -   Serial.println ("GC9A01A Test!");
 - 
 -   tft.begin();
 - 
 -   Serial.println (F("Benchmark                Time (microseconds)"));
 -   delay (10);
 -   Serial.print(F ("Screen fill              "));
 -   Serial.println (testFillScreen ());
 -   delay (500);
 - 
 -   Serial.print (F("Text                     "));
 -   Serial.println (testText());
 -   delay (3000);
 - 
 -   Serial.print (F("Lines                    "));
 -   Serial.println (testLines (GC9A01A_CYAN));
 -   delay (500);
 - 
 -   Serial.print (F("Horiz/Vert Lines         "));
 -   Serial.println (testFastLines (GC9A01A_RED, GC9A01A_BLUE));
 -   delay (500);
 - 
 -   Serial.print (F("Rectangles (outline)     "));
 -   Serial.println (testRects (GC9A01A_GREEN));
 -   delay (500);
 - 
 -   Serial.print (F("Rectangles (filled)      "));
 -   Serial.println (testFilledRects (GC9A01A_YELLOW, GC9A01A_MAGENTA));
 -   delay (500);
 - 
 -   Serial.print (F("Circles (filled)         "));
 -   Serial.println (testFilledCircles (10, GC9A01A_MAGENTA));
 - 
 -   Serial.print (F("Circles (outline)        "));
 - 
 -   delay (500);
 - 
 -   Serial.print (F("Triangles (outline)      "));
 -   Serial.println (testTriangles ());
 -   delay (500);
 - 
 -   Serial.print (F("Triangles (filled)       "));
 -   Serial.println (testFilledTriangles ());
 -   delay (500);
 - 
 -   Serial.print (F("Rounded rects (outline)  "));
 -   Serial.println (testRoundRects ());
 -   delay (500);
 - 
 -   Serial.print (F("Rounded rects (filled)   "));
 -   Serial.println (testFilledRoundRects ());
 -   delay (500);
 - 
 -   Serial.println (F("Done!"));
 - }
 - 
 - void loop(void) {
 - 
 -   for (uint8_t rotation = 0; rotation < 4; rotation++)
 -   {
 -     tft.setRotation (rotation);
 -     testText ();
 -     delay (1000);
 -   }
 - }
 - 
 - unsigned long testFillScreen() {
 - 
 -   unsigned long start = micros();
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 -   tft.fillScreen (GC9A01A_RED);
 -   yield ();
 -   tft.fillScreen (GC9A01A_GREEN);
 -   yield ();
 -   tft.fillScreen (GC9A01A_BLUE);
 -   yield ();
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 -   return micros () - start;
 - }
 - 
 - unsigned long testText () {
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   unsigned long start = micros ();
 -   tft.setCursor (10, 40);
 -   tft.setTextColor (GC9A01A_WHITE);  tft.setTextSize(1);
 -   tft.println ("     Hello World!");
 -   tft.setTextColor (GC9A01A_YELLOW); tft.setTextSize(2);
 -   tft.println ("   1234.56");
 -   tft.setTextColor (GC9A01A_RED);    tft.setTextSize(3);
 -   tft.println (0xDEADBEEF, HEX);
 -   tft.println ();
 -   tft.setTextColor (GC9A01A_GREEN);
 -   tft.setTextSize (5);
 -   tft.println ("Groop");
 -   tft.setTextSize (2);
 -   tft.println ("I implore thee,");
 -   tft.setTextSize (1);
 -   tft.println ("my foonting turlingdromes.");
 -   tft.println ("And hooptiously drangle me");
 -   tft.println ("with crinkly bindlewurdles,");
 -   tft.println ("Or I will rend thee");
 -   tft.println ("in the gobberwarts");
 -   tft.println ("with my blurglecruncheon,");
 -   tft.println ("see if I don't!");
 -   return micros () - start;
 -   delay (1000);
 - }
 - 
 - unsigned long testLines (uint16_t color) {
 - 
 -   unsigned long start, t;
 -   int           x1, y1, x2, y2,
 -                 w = tft.width (),
 -                 h = tft.height ();
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 - 
 -   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 doesn't count against timing
 -   yield ();
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 - 
 -   x1    = w - 1;
 -   y1    = 0;
 -   y2    = h - 1;
 -   start = micros ();
 -   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
 -   x2    = 0;
 -   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
 -   t    += micros() - start;
 -   yield ();
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 - 
 -   x1    = 0;
 -   y1    = h - 1;
 -   y2    = 0;
 -   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;
 -   yield ();
 -   tft.fillScreen (GC9A01A_BLACK);
 -   yield ();
 - 
 -   x1    = w - 1;
 -   y1    = h - 1;
 -   y2    = 0;
 -   start = micros ();
 -   for (x2 = 0; x2 < w; x2 += 6) tft.drawLine (x1, y1, x2, y2, color);
 -   x2    = 0;
 -   for (y2 = 0; y2 < h; y2 += 6) tft.drawLine (x1, y1, x2, y2, color);
 -   yield();
 -   return micros () - start;
 - }
 - 
 - unsigned long testFastLines(uint16_t color1, uint16_t color2) {
 - 
 -   unsigned long start;
 -   int           x, y, w = tft.width (), h = tft.height ();
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   start = micros ();
 -   for (y = 0; y < h; y += 5) tft.drawFastHLine ( 0, y, w, color1);
 -   for (x = 0; x < w; x += 5) tft.drawFastVLine (x, 0, h, color2);
 - 
 -   return micros () - start;
 - }
 - 
 - unsigned long testRects (uint16_t color) {
 - 
 -   unsigned long start;
 -   int           n, i, i2,
 -                 cx = tft.width ()  / 2,
 -                 cy = tft.height () / 2;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   n     = min (tft.width (), tft.height ());
 -   start = micros ();
 -   for (i = 2; i < n; i += 6)
 -   {
 -     i2 = i / 2;
 -     tft.drawRect (cx - i2, cy - i2, i, i, color);
 -   }
 -   return micros () - start;
 - }
 - 
 - unsigned long testFilledRects (uint16_t color1, uint16_t color2) {
 - 
 -   unsigned long start, t = 0;
 -   int           n, i, i2,
 -                 cx = tft.width ()  / 2 - 1,
 -                 cy = tft.height () / 2 - 1;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   n = min (tft.width (), tft.height ());
 -   for (i = n; i > 0; i -= 6)
 -   {
 -     i2    = i / 2;
 -     start = micros ();
 -     tft.fillRect (cx - i2, cy - i2, i, i, color1);
 -     t    += micros () - start;
 -     // outlines are not included in timing results
 -     tft.drawRect (cx - i2, cy - i2, i, i, color2);
 -     yield ();
 -   }
 -   return t;
 - }
 - 
 - unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
 - 
 -   unsigned long start;
 -   int x, y, w = tft.width (), h = tft.height (), r2 = radius * 2;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   start = micros ();
 -   for (x = radius; x < w; x += r2)
 -   {
 -     for (y = radius; y < h; y += r2)
 -     {
 -       tft.fillCircle (x, y, radius, color);
 -     }
 -   }
 -   return micros () - start;
 - }
 - 
 - unsigned long testCircles (uint8_t radius, uint16_t color) {
 - 
 -   unsigned long start;
 -   int           x, y, r2 = radius * 2,
 -                       w = tft.width ()  + radius,   // screen is not cleared for this one -- this is
 -                       h = tft.height () + radius;   // intentional and does not affect the reported time.
 -   start = micros ();
 - 
 -   for (x = 0; x < w; x += r2)
 -   {
 -     for (y = 0; y < h; y += r2)
 -     {
 -       tft.drawCircle (x, y, radius, color);
 -     }
 -   }
 -   return micros () - start;
 - }
 - 
 - unsigned long testTriangles () {
 - 
 -   unsigned long start;
 -   int           n, i, cx = tft.width  () / 2 - 1,
 -                       cy = tft.height () / 2 - 1;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   n     = min (cx, cy);
 -   start = micros ();
 -   for (i = 0; i < n; i += 5)
 -   {
 -     tft.drawTriangle (
 -       cx    , cy - i,                                                     // top of triangle
 -       cx - i, cy + i,                                                     // bottom left
 -       cx + i, cy + i,                                                     // bottom right
 -       tft.color565( i, i, i));
 -   }
 -   return micros () - start;
 - }
 - 
 - unsigned long testFilledTriangles () {
 - 
 -   unsigned long start, t = 0;
 -   int           i, cx = tft.width ()  / 2 - 1,
 -                    cy = tft.height () / 2 - 1;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   start = micros ();
 -   for (i = min (cx, cy); i > 10; i -= 5)
 -   {
 -     start = micros ();
 -     tft.fillTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
 -                       tft.color565 (0, i * 10, i * 10));
 -     t += micros () - start;
 -     tft.drawTriangle (cx, cy - i, cx - i, cy + i, cx + i, cy + i,
 -                       tft.color565 (i * 10, i * 10, 0));
 -     yield ();
 -   }
 -   return t;
 - }
 - 
 - unsigned long testRoundRects () {
 - 
 -   unsigned long start;
 -   int           w, i, i2,
 -                 cx = tft.width  () / 2 - 1,
 -                 cy = tft.height () / 2 - 1;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   w     = min (tft.width (), tft.height ());
 -   start = micros ();
 -   for (i = 0; i < w; i += 6)
 -   {
 -     i2 = i / 2;
 -     tft.drawRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (i, 0, 0));
 -   }
 -   return micros () - start;
 - }
 - 
 - unsigned long testFilledRoundRects () {
 - 
 -   unsigned long start;
 -   int           i, i2,
 -                 cx = tft.width  () / 2 - 1,
 -                 cy = tft.height () / 2 - 1;
 - 
 -   tft.fillScreen (GC9A01A_BLACK);
 -   start = micros ();
 -   for (i = min (tft.width (), tft.height ()); i > 20; i -= 6)
 -   {
 -     i2 = i / 2;
 -     tft.fillRoundRect (cx - i2, cy - i2, i, i, i / 8, tft.color565 (0, i, 0));
 -     yield ();
 -   }
 -   return micros () - start;
 - }
 
  复制代码
  
 
 |