[Diao Ye learns programming] Arduino hands-on (153) --- 2.4-inch TFT LCD touch screen module 4

The reference to 37 sensors and actuators has been widely circulated on the Internet. In fact, there must be more than 37 sensor modules compatible with Arduino. In view of the fact that I have accumulated some sensor and actuator modules on hand, according to the concept of practice to get true knowledge (must be done), for the purpose of learning and communication, I am going to try a series of experiments one by one, regardless of success (the program goes through) or not, They will be recorded - small progress or unsolvable problems, hoping to inspire others.

[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module can be directly plugged into UNO R3 Mega2560 development board

insert image description here
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: The 2.4-inch TFT LCD touch screen color screen module can be directly plugged into the UNO R3 Mega2560 development board

Item 6: Display English strings of different font sizes line by line

Experimental open source code:

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之六:逐行显示不同字号的英文字符串

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/



#include <LCDWIKI_GUI.h> //导入核心图形库

#include <LCDWIKI_KBV.h> //导入特定硬件库

//如果 IC 模型已知或模块不可读,则可以使用此构造函数

LCDWIKI_KBV mylcd(ILI9341, A3, A2, A1, A0, A4); //模型、CS、CD、WR、RD、重置

//如果 IC 模型未知且模块可读,则可以使用此构造函数

//LCDWIKI_KBV my_lcd(240,320,A3,A2,A1,A0,A4);//屏幕宽度、高度、cs、cd、wr、rd、重置

//定义一些颜色值

#define BLACK  0x0000

#define BLUE  0x001F

#define RED   0xF800

#define GREEN  0x07E0

#define CYAN  0x07FF

#define MAGENTA 0xF81F

#define YELLOW 0xFFE0

#define WHITE  0xFFFF

void setup()

{
    
    

 Serial.begin(9600);

 mylcd.Init_LCD();

 Serial.println(mylcd.Read_ID(), HEX);

 mylcd.Fill_Screen(BLACK);

}

void loop()

{
    
    

 mylcd.Set_Text_Mode(0);

 //显示 1 次字符串

 mylcd.Fill_Screen(0x0000);

 mylcd.Set_Text_colour(RED);

 mylcd.Set_Text_Back_colour(BLACK);

 mylcd.Set_Text_Size(1);

 mylcd.Print_String("Hello World!", 0, 0);

 mylcd.Print_Number_Float(01234.56789, 2, 0, 8, '.', 0, ' ');

 mylcd.Print_Number_Int(0xDEADBEF, 0, 16, 0, ' ', 16);

 //mylcd.Print_String("DEADBEF", 0, 16);

 delay(166);

 //显示 2 次字符串

 mylcd.Set_Text_colour(GREEN);

 mylcd.Set_Text_Size(2);

 mylcd.Print_String("Hello World!", 0, 40);

 mylcd.Print_Number_Float(01234.56789, 2, 0, 56, '.', 0, ' ');

 mylcd.Print_Number_Int(0xDEADBEF, 0, 72, 0, ' ', 16);

 //mylcd.Print_String("DEADBEEF", 0, 72);

 delay(166);

 //显示 3 次字符串

 mylcd.Set_Text_colour(BLUE);

 mylcd.Set_Text_Size(3);

 mylcd.Print_String("Hello World!", 0, 104);

 mylcd.Print_Number_Float(01234.56789, 2, 0, 128, '.', 0, ' ');

 mylcd.Print_Number_Int(0xDEADBEF, 0, 152, 0, ' ', 16);

 // mylcd.Print_String("DEADBEEF", 0, 152);

 delay(166);

 //显示 4 次字符串

 mylcd.Set_Text_colour(WHITE);

 mylcd.Set_Text_Size(4);

 mylcd.Print_String("Hello!", 0, 192);

 delay(166);

 //显示 5 次字符串

 mylcd.Set_Text_colour(YELLOW);

 mylcd.Set_Text_Size(5);

 mylcd.Print_String("Hello!", 0, 224);

 delay(166);

 //显示 6 次字符串

 mylcd.Set_Text_colour(RED);

 mylcd.Set_Text_Size(6);

 mylcd.Print_String("Hello!", 0, 266);

 delay(666);

}

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Item 6: Display English strings of different font sizes line by line

insert image description here
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Item 7: Diagnostic Contact Pin

Experimental open source code:

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之七:诊断接触针

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/



void showpins(int A, int D, int value, const char *msg) {
    
    

 Serial.print(msg);

 Serial.print(" (A" + String(A - A0) + ", D" + String(D) + ") = ");

 Serial.println(value);

}

void setup() {
    
    

 int i, j, value, Apins[2], Dpins[2], Values[2], found = 0;

 Serial.begin(9600);

 Serial.println("Making all control and bus pins INPUT_PULLUP");

 Serial.println("Typical 30k Analog pullup with corresponding pin");

 Serial.println("would read low when digital is written LOW");

 Serial.println("e.g. reads ~25 for 300R X direction");

 Serial.println("e.g. reads ~30 for 500R Y direction");

 Serial.println("");

 for (i = A0; i < A5; i++) pinMode(i, INPUT_PULLUP);

 for (i = 2; i < 10; i++) pinMode(i, INPUT_PULLUP);

 for (i = A0; i < A4; i++) {
    
    

  for (j = 5; j < 10; j++) {
    
    

   pinMode(j, OUTPUT);

   digitalWrite(j, LOW);

   value = analogRead(i);  // 忽略初读

   value = analogRead(i);

   if (value < 100) {
    
    

    showpins(i, j, value, "Testing :");

    if (found < 2) {
    
    

     Apins[found] = i;

     Dpins[found] = j;

     Values[found] = value;

     found++;

    }

   }

   pinMode(j, INPUT_PULLUP);

  }

 }

 if (found == 2) {
    
    

  Serial.println("Diagnosing as:-");

  for (i = 0; i < 2; i++) {
    
    

   showpins(Apins[i], Dpins[i], Values[i], (Values[i] < Values[!i]) ? "XM,XP: " : "YP,YM: ");

  }

 }

}

void loop() {
    
    

}

Experimental serial port return

insert image description here

[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Project Eight: Vertical Flow Display Strings

Experimental open source code:

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之八:纵向流动显示字符串

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/



#include <Adafruit_GFX.h> // 导入特定硬件的库

#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;

#define BLACK  0x0000

#define BLUE  0x001F

#define RED   0xF800

#define GREEN  0x07E0

#define CYAN  0x07FF

#define MAGENTA 0xF81F

#define YELLOW 0xFFE0

#define WHITE  0xFFFF

// 在行号中工作。 以 16 为单位的字体高度

int16_t ht = 16, top = 3, line, lines = 15, scroll;

void setup() {
    
    

 tft.reset();

 uint16_t id = tft.readID();

 tft.begin(id);

 tft.setRotation(0);   //肖像

 tft.fillScreen(BLACK);

 tft.setTextColor(WHITE, BLACK);

 tft.setTextSize(2);   // 系统字体为 8 像素。 ht = 8*2=16

 tft.setCursor(100, 0);

 tft.print("ID = 0x");

 tft.println(id, HEX);

 if (id == 0x9320 || id == 0x9325 || id == 0xB509) {
    
    

  top = 0;           // 这些控制器滚动全屏

  lines = tft.height() / ht;  // 我们处于纵向模式

 }

 if (id == 0x7783) {
    
    

  tft.println("can NOT scroll");

  while (1);          // 休止

 }

 tft.setCursor(0, 0);

 for (line = 1; line < 21; line++) tft.println(String(line) + ": ");

}

void loop(){
    
    

 tft.setCursor(0, (scroll + top) * ht);

 if (++scroll >= lines) scroll = 0;

 tft.vertScroll(top * ht, lines * ht, (scroll) * ht);

 tft.println(String(line) + ": [" + String(scroll) + "] ");

 delay(100);

 line++;

}

Arduino experiment scene diagram

https://imagemc.dfrobot.com.cn/data/attachment/forum/202106/28/125955hrd1ln1n7xrcmg7g.gif

insert image description here
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Item 9: Display strings on four sides in a dynamic background cycle

Arduino experiment open source code

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

  实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之九:动态背景四面循环显示字符串

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/



#include <Adafruit_GFX.h> // 导入基本图形库

#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;

void setup(){
    
    

  Serial.begin(9600);

  tft.reset();

  uint16_t identifier = tft.readID();

  Serial.print("ID = 0x");

  Serial.println(identifier, HEX);

  if (identifier == 0xEFEF) identifier = 0x9486;

  tft.begin(identifier);

  // tft fill Screen (BLACK);

}

char *msg[] = {
    
     "PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV" };

uint8_t aspect;

void loop(){
    
    

  uint16_t x = 50, y = 100;

  tft.setRotation(aspect);

  tft.fillScreen(0x0000);

  tft.setCursor(0, 0);

  tft.setTextSize(2);

  tft.println(msg[aspect]);

  tft.setCursor(x, y);

  tft.println("[x=" + String(x) + ",y=" + String(y) + "]");

  delay(800);

  tft.println("INVERT ON");

  tft.invertDisplay(true);

  delay(250);

  tft.invertDisplay(false);

  tft.println("INVERT OFF");

  delay(250);

  if (++aspect >= 4) aspect = 0;

}

Arduino experiment scene diagram

https://mc.dfrobot.com.cn/data/attachment/forum/202106/28/135424yzt2775hhjbth8mf.gif

insert image description here
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Item 10: Display English strings of different font sizes line by line

Arduino experiment open source code

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之十:逐行显示不同字号的英文字符串

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/



#include <Adafruit_GFX.h>  // 导入核心图形库

#include <MCUFRIEND_kbv.h>  // 导入特定硬件库

MCUFRIEND_kbv tft;

#include <Fonts/FreeSans9pt7b.h> //导入字体库

#include <Fonts/FreeSans12pt7b.h>

#include <Fonts/FreeSerif12pt7b.h>

#include <FreeDefaultFonts.h>

#define BLACK  0x0000

#define RED   0xF800

#define GREEN  0x07E0

#define WHITE  0xFFFF

#define GREY  0x8410

void setup(void){
    
    

  Serial.begin(9600);

  uint16_t ID = tft.readID();

  Serial.println("Example: Font_simple");

  Serial.print("found ID = 0x");

  Serial.println(ID, HEX);

  Serial.println("The display font is ready OK!");

  if (ID == 0xD3D3) ID = 0x9481; //如果只写显示,则强制 ID

  tft.begin(ID);

  tft.setRotation(0);

}

void loop(void){
    
    

  tft.fillScreen(BLACK);

  showmsgXY(20, 10, 1, NULL, "System x1");

  showmsgXY(20, 24, 2, NULL, "System x2");

  showmsgXY(20, 60, 1, &FreeSans9pt7b, "FreeSans9pt7b");

  showmsgXY(20, 80, 1, &FreeSans12pt7b, "FreeSans12pt7b");

  showmsgXY(20, 100, 1, &FreeSerif12pt7b, "FreeSerif12pt7b");

  showmsgXY(20, 120, 1, &FreeSmallFont, "FreeSmallFont");

  showmsgXY(5, 180, 1, &FreeSevenSegNumFont, "01234");

  showmsgXY(5, 190, 1, NULL, "System Font is drawn from topline");

  tft.setTextColor(RED, GREY);

  tft.setTextSize(2);

  tft.setCursor(0, 220);

  tft.print("7x5 can overwrite");

  delay(50);

  tft.setCursor(0, 220);

  tft.print("if background set");

  delay(50);

  showmsgXY(5, 260, 1, &FreeSans9pt7b, "Free Fonts from baseline");

   delay(50);

  showmsgXY(5, 285, 1, &FreeSans9pt7b, "Free Fonts transparent");

  delay(50);

  showmsgXY(5, 310, 1, &FreeSans9pt7b, "erase backgnd with fillRect()");

  delay(300);

}

void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg)

{
    
    

  int16_t x1, y1;

  uint16_t wid, ht;

  tft.drawFastHLine(0, y, tft.width(), WHITE);

  tft.setFont(f);

  tft.setCursor(x, y);

  tft.setTextColor(GREEN);

  tft.setTextSize(sz);

  tft.print(msg);

  delay(500);

}


Experimental serial port return

insert image description here
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Item 10: Display English strings of different font sizes line by line

Arduino experiment scene diagram

insert image description here

[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Project 11: Dynamic character strings in full screen in four directions

Experimental open source code:

/*

 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏

 项目之十一:四方向满屏动态字符串

 模块直插,引脚用法如下:

 LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK

 Arduino Uno A3 A2 A1 A0 A4 10 11 12 13

 LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7

 Arduino Uno 8 9 2 3 4 5 6 7

*/

#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

#include <Adafruit_GFX.h> // Hardware-specific library

#include <MCUFRIEND_kbv.h>

MCUFRIEND_kbv tft;

//#include <Adafruit_TFTLCD.h> // Hardware-specific library

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

//Adafruit_TFTLCD tft;

//为一些常见的 16 位颜色值分配可读的名称

#define    BLACK  0x0000

#define    BLUE  0x001F

#define    RED   0xF800

#define    GREEN  0x07E0

#define CYAN  0x07FF

#define MAGENTA 0xF81F

#define YELLOW 0xFFE0

#define WHITE  0xFFFF

void setup(void);

void loop(void);

uint16_t g_identifier;

void setup(void) {
    
    

 tft.reset();

 g_identifier = tft.readID();

 Serial.begin(9600);

 Serial.print("readID = 0x");

 Serial.println(g_identifier, HEX);

 if (g_identifier == 0xFFFF) g_identifier = 0x9341;

 if (g_identifier == 0) {
    
    

  Serial.println("Unknown ID");

  while (1);

 }

 tft.begin(g_identifier);

 tft.setRotation(0);

}

uint16_t colors[] = {
    
    

 BLACK, BLUE

};

void colordump(uint16_t x, uint16_t y)

{
    
    

 uint16_t pixel, pixels[32];

 char i, j, buf[20], dirty;

 uint8_t wid = (tft.width() - 9 * 6) / (5 * 6), ht = (tft.height() / 8) - 1;

 tft.setTextColor(WHITE);

 tft.setTextSize(1);

 for (j = 0; j < ht; j++) {
    
    

  sprintf(buf, "%3d,%3d:", x, y + j);

  tft.print(buf);

  dirty = 1;

  for (i = 0; i < wid; i++) {
    
    

#if 1 && defined(MCUFRIEND_KBV_H_)

   if (dirty) tft.readGRAM(x, y + j, pixels, wid, 1);

   dirty = 0;

   pixel = pixels[i];

#else

   pixel = tft.readPixel(x + i, y + j);

#endif

   tft.print(" ");

   if (pixel == WHITE) tft.setTextColor(GREEN);

   sprintf(buf, "%04X", pixel);

   tft.print(buf);

   tft.setTextColor(WHITE);

  }

  tft.println();

 }

}

uint16_t bgr(uint16_t color) {
    
    

 return ((color & 0xF800) >> 11) | (color & 0x7E0) | (color & 0x1F) << 11;

}

void duffcolor(uint16_t color) {
    
    

 uint16_t pixel, x, y;

 char done, buf[20];

 uint16_t BGR = bgr(color);

 for (done = 0, y = 0; y < 320 && !done; y++) {
    
    

  for (x = 0; x < 240; x++) {
    
    

   //pixel = readxy(x, y);

   pixel = tft.readPixel(x, y);

   if (pixel != BGR) {
    
    

    done = 1;

    sprintf(buf, "0x%04X @ %d, %d", pixel, x, y);

    tft.println(buf);

    break;

   }

  }

 }

}

uint8_t aspect;

char *aspectname[] = {
    
    

 "PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV"

};

void loop(void) {
    
    

 uint16_t iter, color;

 char buf[80];

 aspect = (aspect + 1) & 3;

 tft.setRotation(aspect);

 for (iter = 0; iter < sizeof(colors) / sizeof(uint16_t); iter++) {
    
    

  color = colors[iter];

  tft.fillScreen(color);

  tft.setTextColor(WHITE);

  tft.setTextSize(1);

  tft.setCursor(0, 0);

  sprintf(buf, "ID=0x%04X Background=%04X %s",

      tft.readID(), color, aspectname[aspect]);

  tft.println(buf);

  colordump(6 * 6, 0);

  //duffcolor(color);

  delay(400);

 }

}

[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)

Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display

Project 11: Dynamic character strings in full screen in four directions

Experimental scene graph

insert image description here

Guess you like

Origin blog.csdn.net/weixin_41659040/article/details/131619608
Recommended