mirror of
https://github.com/Bodmer/TFT_eSPI.git
synced 2025-08-03 20:54:42 +02:00
Add support for ST7735 128x128 display
May not cater for 128x128 ST7735 displays with different RGB and offset configurations.
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
#define INITR_BLACKTAB 0x2
|
#define INITR_BLACKTAB 0x2
|
||||||
#define INITR_GREENTAB2 0x3 // Use if you get random pixels on two edges of green tab display
|
#define INITR_GREENTAB2 0x3 // Use if you get random pixels on two edges of green tab display
|
||||||
#define INITR_GREENTAB3 0x4 // Use if you get random pixels on edge(s) of 128x128 screen
|
#define INITR_GREENTAB3 0x4 // Use if you get random pixels on edge(s) of 128x128 screen
|
||||||
|
#define INITR_GREENTAB128 0x5 // Use if you only get part of 128x128 screen in rotation 0 & 1
|
||||||
#define INITB 0xB
|
#define INITB 0xB
|
||||||
|
|
||||||
|
|
||||||
@@ -23,13 +24,20 @@
|
|||||||
|
|
||||||
#elif defined (ST7735_GREENTAB)
|
#elif defined (ST7735_GREENTAB)
|
||||||
#define TAB_COLOUR INITR_GREENTAB
|
#define TAB_COLOUR INITR_GREENTAB
|
||||||
|
#define CGRAM_OFFSET
|
||||||
|
|
||||||
#elif defined (ST7735_GREENTAB2)
|
#elif defined (ST7735_GREENTAB2)
|
||||||
#define TAB_COLOUR INITR_GREENTAB2
|
#define TAB_COLOUR INITR_GREENTAB2
|
||||||
|
#define CGRAM_OFFSET
|
||||||
|
|
||||||
#elif defined (ST7735_GREENTAB3)
|
#elif defined (ST7735_GREENTAB3)
|
||||||
#define TAB_COLOUR INITR_GREENTAB3
|
#define TAB_COLOUR INITR_GREENTAB3
|
||||||
|
#define CGRAM_OFFSET
|
||||||
|
|
||||||
|
#elif defined (ST7735_GREENTAB128)
|
||||||
|
#define TAB_COLOUR INITR_GREENTAB128
|
||||||
|
#define CGRAM_OFFSET
|
||||||
|
|
||||||
#elif defined (ST6635_REDTAB)
|
#elif defined (ST6635_REDTAB)
|
||||||
#define TAB_COLOUR INITR_REDTAB
|
#define TAB_COLOUR INITR_REDTAB
|
||||||
|
|
||||||
|
@@ -169,6 +169,12 @@
|
|||||||
colstart = 2;
|
colstart = 2;
|
||||||
rowstart = 3;
|
rowstart = 3;
|
||||||
}
|
}
|
||||||
|
else if (tabcolor == INITR_GREENTAB128)
|
||||||
|
{
|
||||||
|
commandList(Rcmd2green);
|
||||||
|
colstart = 0;
|
||||||
|
rowstart = 32;
|
||||||
|
}
|
||||||
else if (tabcolor == INITR_REDTAB)
|
else if (tabcolor == INITR_REDTAB)
|
||||||
{
|
{
|
||||||
commandList(Rcmd2red);
|
commandList(Rcmd2red);
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_BGR);
|
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_BGR);
|
||||||
colstart = 2;
|
colstart = 2;
|
||||||
rowstart = 3;
|
rowstart = 3;
|
||||||
|
} else if(tabcolor == INITR_GREENTAB128) {
|
||||||
|
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_MH | TFT_MAD_BGR);
|
||||||
|
colstart = 0;
|
||||||
|
rowstart = 32;
|
||||||
} else {
|
} else {
|
||||||
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_BGR);
|
writedata(TFT_MAD_MX | TFT_MAD_MY | TFT_MAD_BGR);
|
||||||
}
|
}
|
||||||
@@ -33,7 +37,11 @@
|
|||||||
writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR);
|
writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR);
|
||||||
colstart = 3;
|
colstart = 3;
|
||||||
rowstart = 2;
|
rowstart = 2;
|
||||||
} else {
|
} else if(tabcolor == INITR_GREENTAB128) {
|
||||||
|
writedata(TFT_MAD_MV | TFT_MAD_MY | TFT_MAD_BGR);
|
||||||
|
colstart = 32;
|
||||||
|
rowstart = 0;
|
||||||
|
} else {
|
||||||
writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR);
|
writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR);
|
||||||
}
|
}
|
||||||
_width = TFT_HEIGHT;
|
_width = TFT_HEIGHT;
|
||||||
@@ -50,7 +58,11 @@
|
|||||||
writedata(TFT_MAD_BGR);
|
writedata(TFT_MAD_BGR);
|
||||||
colstart = 2;
|
colstart = 2;
|
||||||
rowstart = 1;
|
rowstart = 1;
|
||||||
} else {
|
} else if(tabcolor == INITR_GREENTAB128) {
|
||||||
|
writedata(TFT_MAD_BGR);
|
||||||
|
colstart = 0;
|
||||||
|
rowstart = 0;
|
||||||
|
} else {
|
||||||
writedata(TFT_MAD_BGR);
|
writedata(TFT_MAD_BGR);
|
||||||
}
|
}
|
||||||
_width = TFT_WIDTH;
|
_width = TFT_WIDTH;
|
||||||
@@ -67,6 +79,10 @@
|
|||||||
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
|
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
|
||||||
colstart = 1;
|
colstart = 1;
|
||||||
rowstart = 2;
|
rowstart = 2;
|
||||||
|
} else if(tabcolor == INITR_GREENTAB128) {
|
||||||
|
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
|
||||||
|
colstart = 0;
|
||||||
|
rowstart = 0;
|
||||||
} else {
|
} else {
|
||||||
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
|
writedata(TFT_MAD_MX | TFT_MAD_MV | TFT_MAD_BGR);
|
||||||
}
|
}
|
||||||
|
31
TFT_eSPI.cpp
31
TFT_eSPI.cpp
@@ -151,12 +151,12 @@ void TFT_eSPI::begin(void)
|
|||||||
void TFT_eSPI::init(void)
|
void TFT_eSPI::init(void)
|
||||||
{
|
{
|
||||||
#ifdef TFT_CS
|
#ifdef TFT_CS
|
||||||
csport = portOutputRegister(digitalPinToPort(TFT_CS));
|
//csport = portOutputRegister(digitalPinToPort(TFT_CS));
|
||||||
cspinmask = (uint32_t) digitalPinToBitMask(TFT_CS);
|
cspinmask = (uint32_t) digitalPinToBitMask(TFT_CS);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TFT_DC
|
#ifdef TFT_DC
|
||||||
dcport = portOutputRegister(digitalPinToPort(TFT_DC));
|
//dcport = portOutputRegister(digitalPinToPort(TFT_DC));
|
||||||
dcpinmask = (uint32_t) digitalPinToBitMask(TFT_DC);
|
dcpinmask = (uint32_t) digitalPinToBitMask(TFT_DC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1476,7 +1476,7 @@ inline void TFT_eSPI::setAddrWindow(int32_t xs, int32_t ys, int32_t xe, int32_t
|
|||||||
addr_col = 0xFFFF;
|
addr_col = 0xFFFF;
|
||||||
addr_row = 0xFFFF;
|
addr_row = 0xFFFF;
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
xs+=colstart;
|
xs+=colstart;
|
||||||
xe+=colstart;
|
xe+=colstart;
|
||||||
ys+=rowstart;
|
ys+=rowstart;
|
||||||
@@ -1504,21 +1504,6 @@ inline void TFT_eSPI::setAddrWindow(int32_t xs, int32_t ys, int32_t xe, int32_t
|
|||||||
SPI1CMD |= SPIBUSY;
|
SPI1CMD |= SPIBUSY;
|
||||||
while(SPI1CMD & SPIBUSY) {}
|
while(SPI1CMD & SPIBUSY) {}
|
||||||
|
|
||||||
// This proves we can only change the byte level bit SPI register read-out order, not the actual byte order
|
|
||||||
// So we can't use this method to avoid coordinate byte order swapping!
|
|
||||||
//uint32_t x = (xs << 16) | xe;
|
|
||||||
// Swap bits in 32 bit word end for end
|
|
||||||
//x = (((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1));
|
|
||||||
//x = (((x & 0xCCCCCCCC) >> 2) | ((x & 0x33333333) << 2));
|
|
||||||
//x = (((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4));
|
|
||||||
//x = (((x & 0xFF00FF00) >> 8) | ((x & 0x00FF00FF) << 8));
|
|
||||||
//x = (x >> 16) | (x << 16);
|
|
||||||
//SPI1W0 = x;
|
|
||||||
//SPI1C |= (SPICWBO | SPICRBO); // LSB first
|
|
||||||
//SPI1CMD |= SPIBUSY;
|
|
||||||
//while(SPI1CMD & SPIBUSY) {}
|
|
||||||
//SPI1C &= ~(SPICWBO | SPICRBO); // MSB first = default
|
|
||||||
|
|
||||||
// Row addr set
|
// Row addr set
|
||||||
DC_C;
|
DC_C;
|
||||||
|
|
||||||
@@ -1690,7 +1675,7 @@ inline void TFT_eSPI::setAddrWindow(int32_t x0, int32_t y0, int32_t x1, int32_t
|
|||||||
addr_col = 0xFFFF;
|
addr_col = 0xFFFF;
|
||||||
addr_row = 0xFFFF;
|
addr_row = 0xFFFF;
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
x0+=colstart;
|
x0+=colstart;
|
||||||
x1+=colstart;
|
x1+=colstart;
|
||||||
y0+=rowstart;
|
y0+=rowstart;
|
||||||
@@ -1746,7 +1731,7 @@ void TFT_eSPI::readAddrWindow(int32_t xs, int32_t ys, int32_t xe, int32_t ye)
|
|||||||
addr_col = 0xFFFF;
|
addr_col = 0xFFFF;
|
||||||
addr_row = 0xFFFF;
|
addr_row = 0xFFFF;
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
xs+=colstart;
|
xs+=colstart;
|
||||||
xe+=colstart;
|
xe+=colstart;
|
||||||
ys+=rowstart;
|
ys+=rowstart;
|
||||||
@@ -1812,7 +1797,7 @@ void TFT_eSPI::readAddrWindow(int32_t x0, int32_t y0, int32_t x1, int32_t y1)
|
|||||||
addr_col = 0xFFFF;
|
addr_col = 0xFFFF;
|
||||||
addr_row = 0xFFFF;
|
addr_row = 0xFFFF;
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
x0+=colstart;
|
x0+=colstart;
|
||||||
x1+=colstart;
|
x1+=colstart;
|
||||||
y0+=rowstart;
|
y0+=rowstart;
|
||||||
@@ -1861,7 +1846,7 @@ void TFT_eSPI::drawPixel(uint32_t x, uint32_t y, uint32_t color)
|
|||||||
// Faster range checking, possible because x and y are unsigned
|
// Faster range checking, possible because x and y are unsigned
|
||||||
if ((x >= _width) || (y >= _height)) return;
|
if ((x >= _width) || (y >= _height)) return;
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
x+=colstart;
|
x+=colstart;
|
||||||
y+=rowstart;
|
y+=rowstart;
|
||||||
#endif
|
#endif
|
||||||
@@ -2043,7 +2028,7 @@ void TFT_eSPI::drawPixel(uint32_t x, uint32_t y, uint32_t color)
|
|||||||
if ((x >= _width) || (y >= _height)) return;
|
if ((x >= _width) || (y >= _height)) return;
|
||||||
spi_begin();
|
spi_begin();
|
||||||
|
|
||||||
#if defined (ST7735_DRIVER) && (defined (ST7735_GREENTAB) || defined (ST7735_GREENTAB2) || defined (ST7735_GREENTAB3))
|
#ifdef CGRAM_OFFSET
|
||||||
x+=colstart;
|
x+=colstart;
|
||||||
y+=rowstart;
|
y+=rowstart;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
//#define ST7735_GREENTAB
|
//#define ST7735_GREENTAB
|
||||||
//#define ST7735_GREENTAB2
|
//#define ST7735_GREENTAB2
|
||||||
//#define ST7735_GREENTAB3
|
//#define ST7735_GREENTAB3
|
||||||
|
//#define ST7735_GREENTAB128 // For 128 x 128 display
|
||||||
//#define ST7735_REDTAB
|
//#define ST7735_REDTAB
|
||||||
//#define ST7735_BLACKTAB
|
//#define ST7735_BLACKTAB
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@
|
|||||||
// Display LED to NodeMCU pin VIN (or 5V, see below)
|
// Display LED to NodeMCU pin VIN (or 5V, see below)
|
||||||
// Display SCK to NodeMCU pin D5
|
// Display SCK to NodeMCU pin D5
|
||||||
// Display SDI/MOSI to NodeMCU pin D7
|
// Display SDI/MOSI to NodeMCU pin D7
|
||||||
// Display DC (or AO)to NodeMCU pin D3
|
// Display DC (RS/AO)to NodeMCU pin D3
|
||||||
// Display RESET to NodeMCU pin D4 (or RST, see below)
|
// Display RESET to NodeMCU pin D4 (or RST, see below)
|
||||||
// Display CS to NodeMCU pin D8 (or GND, see below)
|
// Display CS to NodeMCU pin D8 (or GND, see below)
|
||||||
// Display GND to NodeMCU pin GND (0V)
|
// Display GND to NodeMCU pin GND (0V)
|
||||||
@@ -60,6 +61,8 @@
|
|||||||
//
|
//
|
||||||
// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
|
// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin
|
||||||
//
|
//
|
||||||
|
// The DC (Data Command) pin may be labell AO or RS (Register Select)
|
||||||
|
//
|
||||||
// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
|
// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more
|
||||||
// SPI deivces (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
|
// SPI deivces (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS
|
||||||
// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
|
// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin
|
||||||
@@ -146,8 +149,8 @@
|
|||||||
// #define SPI_FREQUENCY 5000000
|
// #define SPI_FREQUENCY 5000000
|
||||||
// #define SPI_FREQUENCY 10000000
|
// #define SPI_FREQUENCY 10000000
|
||||||
// #define SPI_FREQUENCY 20000000
|
// #define SPI_FREQUENCY 20000000
|
||||||
#define SPI_FREQUENCY 27000000 // Actually sets it to 26.67MHz = 80/3
|
// #define SPI_FREQUENCY 27000000 // Actually sets it to 26.67MHz = 80/3
|
||||||
// #define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS
|
#define SPI_FREQUENCY 40000000 // Maximum to use SPIFFS
|
||||||
// #define SPI_FREQUENCY 80000000
|
// #define SPI_FREQUENCY 80000000
|
||||||
|
|
||||||
|
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
//#include <User_Setups/Setup4_S6D02A1.h> // Setup file configured for my S6D02A1
|
//#include <User_Setups/Setup4_S6D02A1.h> // Setup file configured for my S6D02A1
|
||||||
//#include <User_Setups/Setup5_RPi_ILI9486.h> // Setup file configured for my stock RPi TFT
|
//#include <User_Setups/Setup5_RPi_ILI9486.h> // Setup file configured for my stock RPi TFT
|
||||||
//#include <User_Setups/Setup6_RPi_Wr_ILI9486.h> // Setup file configured for my modified RPi TFT
|
//#include <User_Setups/Setup6_RPi_Wr_ILI9486.h> // Setup file configured for my modified RPi TFT
|
||||||
|
//#include <User_Setups/Setup7_ST7735_128x128.h> // Setup file configured for my ST7735 128x128 display
|
||||||
|
|
||||||
//#include <User_Setups/SetupX_Template.h> // Setup file template for copying/editting
|
//#include <User_Setups/SetupX_Template.h> // Setup file template for copying/editting
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
// //
|
// //
|
||||||
// DON'T TINKER WITH ANY OF THE FOLLOWING LINES, THESE ADD THE TFT DRIVERS //
|
// DON'T TINKER WITH ANY OF THE FOLLOWING LINES, THESE ADD THE TFT DRIVERS //
|
||||||
// THEY ARE HERE FOR BODMER'S CONVENIENCE! //
|
// AND ESP8266 PIN DEFINITONS THEY ARE HERE FOR BODMER'S CONVENIENCE! //
|
||||||
// //
|
// //
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "TFT_eSPI",
|
"name": "TFT_eSPI",
|
||||||
"version": "0.16.3",
|
"version": "0.16.4",
|
||||||
"keywords": "TFT, ESP8266, NodeMCU, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486",
|
"keywords": "TFT, ESP8266, NodeMCU, ILI9341, ST7735, ILI9163, S6D02A1, ILI9486",
|
||||||
"description": "A TFT SPI graphics library for ESP8266",
|
"description": "A TFT SPI graphics library for ESP8266",
|
||||||
"repository":
|
"repository":
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name=TFT_eSPI
|
name=TFT_eSPI
|
||||||
version=0.16.3
|
version=0.16.4
|
||||||
author=Bodmer
|
author=Bodmer
|
||||||
maintainer=Bodmer
|
maintainer=Bodmer
|
||||||
sentence=A fast TFT library for ESP8266 processors and the Arduino IDE
|
sentence=A fast TFT library for ESP8266 processors and the Arduino IDE
|
||||||
|
Reference in New Issue
Block a user