Pentru a afisa diferite informatii putem folosi si displayul LCD 160X128 ST7735 impreuna cu placa de dezvoltare STM32 BluePill.
Acest display se va alimenta cu o tensiune de 3.3V iar conexiunile cu placa de dezvoltare se fac in felul urmator:
| Display LCD ST7735 | STM32 BluePill |
| CS | PA3 |
| RST | PA2 |
| RS | PA4 |
| SDA | PA7 |
| CLK | PA5 |
De asemenea vom avea nevoie si de 2 librarii aditionale: Adafruit-ST7735-Library si Adafruit-GFX-Library.
Dupa instalarea librariilor aditionale vom folosi urmatorul sketch pentru a testa functionarea displayului:
#include <Adafruit_GFX.h> // includere librarie GFX
#include <Adafruit_ST7735.h> // includere librarie pentru flosirea driverului ST7735
#include <SPI.h>
#define TFT_CS PA3
#define TFT_DC PA4
#define TFT_RST PA2
//creem metoda de apelare a functiilor din librariile incluse
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#define DELAY 3000
void setup() {
tft.initR(INITR_BLACKTAB); //initiem displayul
tft.fillScreen(ST77XX_BLACK); //desenam culoarea de fundal
tft.setCursor(0, 30); //setam pozitia cursorului
tft.setTextColor(ST77XX_RED); //setam culoarea textului
tft.setTextSize(2); //setam marimea fontului
tft.setTextWrap(true); //setam continuarea textului pe urmatoarea linie
tft.println("Vizitati site-ul www.electronicstore.ro!"); //afisam textul dorit
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("STM32 BluePill cu un display LCD ST7735");
delay(DELAY);
}
void loop() {
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare un singur pixel");
tft.drawPixel(70, 70, ST77XX_WHITE); //afisam un pixel la coordonatele dorite si in culoarea dorita
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare o linie");
tft.drawLine(10, 70, 100, 70, ST77XX_YELLOW); //afisam o linie la coordonatele dorite si in culoarea dorita
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui patrat");
tft.drawRect(5, 60, 110, 40, ST77XX_RED);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui patrat cu fundal colorat");
tft.fillRect(5, 80, 110, 40, ST77XX_GREEN);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui cerc");
tft.drawCircle(45, 90, 15, ST77XX_CYAN);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui cerc cu fundal colorat");
tft.fillCircle(55, 115, 25, ST77XX_MAGENTA);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui dreptunghi cu margini rotunjite");
tft.drawRoundRect(25, 95, 75, 35, 6, ST77XX_CYAN);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui dreptunghi cu margini rotunjite si fundal");
tft.fillRoundRect(15, 115, 85, 25, 6, ST77XX_YELLOW);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui triunghi");
tft.drawTriangle(15, 130, 45, 70, 95, 110, ST77XX_CYAN);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Desenare a unui triunghi cu fundal");
tft.fillTriangle(10, 140, 35, 80, 100, 110, ST77XX_MAGENTA);
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Folosire caractere speciale");
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 40);
tft.cp437(true);
tft.print("Temperatura: 120");
tft.write(0xF8);
delay(DELAY);
tft.fillScreen(ST77XX_WHITE);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_BLACK);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Folosirea unui text negru pe fundal alb");
delay(DELAY);
tft.fillScreen(ST77XX_YELLOW);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Folosirea unui text albastru pe fundal galben");
delay(DELAY);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Schimbarea orientarii display-ului cu 90 de grade");
delay(DELAY);
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Test display");
delay(DELAY);
tft.setRotation(0);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Schimbarea orientarii display-ului cu 180 de grade");
delay(DELAY);
tft.setRotation(2);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Test display");
delay(DELAY);
tft.setRotation(0);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Schimbarea orientarii display-ului cu 270 de grade");
delay(DELAY);
tft.setRotation(3);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Test display");
delay(DELAY);
tft.setRotation(0);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 10);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Afisare butoane multimedia");
delay(DELAY);
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.fillRoundRect(0, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillTriangle(17, 20, 17, 60, 65, 40, ST77XX_RED);
delay(500);
tft.fillRoundRect(82, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillRoundRect(96, 18, 20, 45, 5, ST77XX_GREEN);
tft.fillRoundRect(127, 18, 20, 45, 5, ST77XX_GREEN);
delay(500);
tft.fillTriangle(17, 20, 17, 60, 65, 40, ST77XX_BLUE);
delay(DELAY);
tft.setRotation(0);
tft.fillScreen(ST77XX_WHITE);
tft.setCursor(0, 50);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(2);
tft.setTextWrap(true);
tft.println("Multumim pentru vizualizare");
delay(5000);
}
Un video cu montajul in functiunea puteti vedea mai jos: