【问题标题】:Using 2.4" MCUFriend TFT LCD Display with Arduino使用 2.4" MCUFriend TFT LCD 显示器和 Arduino
【发布时间】:2020-07-22 01:19:49
【问题描述】:

我希望有人熟悉 MCUFriend 的 2.4" TFT LCD 显示板。我在使用 Arduino Uno 时遇到了麻烦,希望有人能提供帮助。

我遇到的问题是,在重置和初始化后,屏幕上会出现所有这些彩色线条。现在我要做的就是填满屏幕并画一个框。这是我的代码:

#include <Adafruit_GFX.h>
#include <TouchScreen.h>
#include <Adafruit_TFTLCD.h>

//SPI Communication
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0 
#define LCD_RESET A4 

//Color Definitons
#define BLACK   0x0000
#define WHITE   0xFFFF

#define BOXSIZE  40

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

void setup() {  
  Serial.begin(9600);

  tft.reset();  
  tft.begin();

  tft.fillScreen(BLACK);
  tft.drawRect(100, 100, BOXSIZE, BOXSIZE, WHITE);
}

void loop() {

}

这就是我的屏幕正在做的事情:

如您所见,背景是黑色的,并且在这些彩色条的后面绘制了一个框。

任何帮助将不胜感激!

非常感谢!

【问题讨论】:

    标签: arduino-uno


    【解决方案1】:

    我自己是 Arduino 的新手,但我确实有同样的屏幕,它工作得很好,你的问题可能是 TFT 屏蔽在 arduino usb 的顶部短路,在那里放了一些不导电的东西并重置。如果您仍然遇到问题,请尝试移除屏蔽并在插入时观察每个引脚,以确保它们都插入正确的引脚,LCD_02 应该在 Dig 引脚 2 中。 这是我用于测试的代码,它使用相同的库,希望对您有所帮助。

            #include <Adafruit_GFX.h>    // Core graphics library
        #include <Adafruit_TFTLCD.h> // Hardware-specific library
    
        // The control pins for the LCD can be assigned to any digital or
        // analog pins...but we'll use the analog pins as this allows us to
        // double up the pins with the touch screen (see the TFT paint example).
        #define LCD_CS A3 // Chip Select goes to Analog 3
        #define LCD_CD A2 // Command/Data goes to Analog 2
        #define LCD_WR A1 // LCD Write goes to Analog 1
        #define LCD_RD A0 // LCD Read goes to Analog 0
    
        #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
    
        // When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
        // For the Arduino Uno, Duemilanove, Diecimila, etc.:
        //   D0 connects to digital pin 8  (Notice these are
        //   D1 connects to digital pin 9   NOT in order!)
        //   D2 connects to digital pin 2
        //   D3 connects to digital pin 3
        //   D4 connects to digital pin 4
        //   D5 connects to digital pin 5
        //   D6 connects to digital pin 6
        //   D7 connects to digital pin 7
        // For the Arduino Mega, use digital pins 22 through 29
        // (on the 2-row header at the end of the board).
    
        // Assign human-readable names to some common 16-bit color values:
        #define BLACK   0x0000
        #define BLUE    0x001F
        #define RED     0xF800
        #define GREEN   0x07E0
        #define CYAN    0x07FF
        #define MAGENTA 0xF81F
        #define YELLOW  0xFFE0
        #define WHITE   0xFFFF
    
        Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
    
    void setup(void) {
      Serial.begin(9600);
      Serial.println(F("TFT LCD test"));
    
    #ifdef USE_ADAFRUIT_SHIELD_PINOUT
      Serial.println(F("Using Adafruit 2.8\" TFT Arduino Shield Pinout"));
    #else
      Serial.println(F("Using Adafruit 2.8\" TFT Breakout Board Pinout"));
    #endif
    
      Serial.print("TFT size is "); Serial.print(tft.width()); Serial.print("x"); Serial.println(tft.height());
    
      tft.reset();
    
      uint16_t identifier = tft.readID();
    
      if(identifier == 0x9325) {
        Serial.println(F("Found ILI9325 LCD driver"));
      } else if(identifier == 0x9327) {
        Serial.println(F("Found ILI9327 LCD driver"));
      } else if(identifier == 0x9328) {
        Serial.println(F("Found ILI9328 LCD driver"));
      } else if(identifier == 0x7575) {
        Serial.println(F("Found HX8347G LCD driver"));
      } else if(identifier == 0x9341) {
        Serial.println(F("Found ILI9341 LCD driver"));
      } else if(identifier == 0x8357) {
        Serial.println(F("Found HX8357D LCD driver"));
      } else if(identifier == 0x0154) {
        Serial.println(F("Found S6D0154 LCD driver"));
      } else {
        Serial.print(F("Unknown LCD driver chip: "));
        Serial.println(identifier, HEX);
        Serial.println(F("If using the Adafruit 2.8\" TFT Arduino shield, the line:"));
        Serial.println(F("  #define USE_ADAFRUIT_SHIELD_PINOUT"));
        Serial.println(F("should appear in the library header (Adafruit_TFT.h)."));
        Serial.println(F("If using the breakout board, it should NOT be #defined!"));
        Serial.println(F("Also if using the breakout, double-check that all wiring"));
        Serial.println(F("matches the tutorial."));
        return;
      }
    
      tft.begin(identifier);
    
      Serial.println(F("Benchmark                Time (microseconds)"));
    
      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(CYAN));
      delay(500);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(RED, BLUE));
      delay(500);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(GREEN));
      delay(500);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(YELLOW, MAGENTA));
      delay(500);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, WHITE));
      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(2000);
      }
    }
    
    unsigned long testFillScreen() {
      unsigned long start = micros();
      tft.fillScreen(BLACK);
      tft.fillScreen(RED);
      tft.fillScreen(GREEN);
      tft.fillScreen(BLUE);
      tft.fillScreen(BLACK);
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(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;
    }
    
    unsigned long testLines(uint16_t color) {
      unsigned long start, t;
      int           x1, y1, x2, y2,
                    w = tft.width(),
                    h = tft.height();
    
      tft.fillScreen(BLACK);
    
      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
    
      tft.fillScreen(BLACK);
    
      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;
    
      tft.fillScreen(BLACK);
    
      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;
    
      tft.fillScreen(BLACK);
    
      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);
    
      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(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(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(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);
      }
    
      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(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,
                    h = tft.height() + radius;
    
      // Screen is not cleared for this one -- this is
      // 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(BLACK);
      n     = min(cx, cy);
      start = micros();
      for(i=0; i<n; i+=5) {
        tft.drawTriangle(
          cx    , cy - i, // peak
          cx - i, cy + i, // bottom left
          cx + i, cy + i, // bottom right
          tft.color565(0, 0, 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(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, i));
        t += micros() - start;
        tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
          tft.color565(i, i, 0));
      }
    
      return t;
    }
    
    unsigned long testRoundRects() {
      unsigned long start;
      int           w, i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(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(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));
      }
    
      return micros() - start;
    }
    

    【讨论】:

    • 感谢您提供的示例,Tom :) 默认设置没有给我任何结果,我很生气。我注意到我的 LCD 上有两个引脚,看起来有一个很小的焊桥连接它们。起初我认为这可能是我遇到问题的原因,但看到屏幕正常工作是一种解脱。当我的焊锡芯进来时,我会清理电路板。 OP 可能也想检查是否有不良焊点。
    【解决方案2】:

    排队:

    uint16_t 标识符 = tft.readID();

    您可以像这样修复您的 LCD 驱动程序:

    uint16_t 标识符 = 0x7575; //根据你的LDC DRIVER ID更改,查看serial (Serial.println(identifier, HEX));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多