【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;
- }
复制代码
|