mirror of
https://github.com/smartykit/apple1.git
synced 2024-06-17 18:30:05 +00:00
436 lines
22 KiB
C++
436 lines
22 KiB
C++
/* SmartyKit 1 - 2.8" TFT 320x240 Display driver
|
|
* http://www.smartykit.io/
|
|
* Copyright (C) 2019-2022, Sergey Panarin <contact@smartykit.io>
|
|
*
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#define _SMARTYKIT_DISPLAY_DRIVER_IL9341H_
|
|
#include <SPI.h>
|
|
|
|
//SmartyKit Display Driver parameters
|
|
#define ILI9341_TFTWIDTH 240 ///< ILI9341 max TFT width
|
|
#define ILI9341_TFTHEIGHT 320 ///< ILI9341 max TFT height
|
|
|
|
#define TFT_TFTwidth 320
|
|
#define TFT_TFTheight 240
|
|
#define SCREEN_COLS 40
|
|
#define SCREEN_ROWS 24
|
|
#define LINE_WIDTH 6
|
|
#define LINE_HEIGHT 8
|
|
#define SCREEN_WIDTH SCREEN_COLS*LINE_WIDTH
|
|
#define SCREEN_HEIGHT SCREEN_ROWS*LINE_HEIGHT
|
|
#define MARGIN_TOP 3*LINE_HEIGHT
|
|
#define MARGIN_BOTTOM 3*LINE_HEIGHT
|
|
#define MARGIN_LEFT (TFT_TFTwidth - SCREEN_COLS*LINE_WIDTH)/2
|
|
#define MARGIN_RIGHT (TFT_TFTwidth - SCREEN_COLS*LINE_WIDTH)/2
|
|
#define SCREEN_TOP MARGIN_TOP
|
|
#define SCREEN_BOTTOM (TFT_TFTheight - MARGIN_BOTTOM)
|
|
#define SCREEN_LEFT MARGIN_LEFT
|
|
#define SCREEN_RIGHT (TFT_TFTwidth - MARGIN_RIGHT)
|
|
#define SCREEN_RECT_MARGIN 3
|
|
|
|
//driver commands and parameters
|
|
#define ILI9341_NOP 0x00 ///< No-op register
|
|
#define ILI9341_SWRESET 0x01 ///< Software reset register
|
|
#define ILI9341_RDDID 0x04 ///< Read display identification information
|
|
#define ILI9341_RDDST 0x09 ///< Read Display Status
|
|
|
|
#define ILI9341_SLPIN 0x10 ///< Enter Sleep Mode
|
|
#define ILI9341_SLPOUT 0x11 ///< Sleep Out
|
|
#define ILI9341_PTLON 0x12 ///< Partial Mode ON
|
|
#define ILI9341_NORON 0x13 ///< Normal Display Mode ON
|
|
|
|
#define ILI9341_RDMODE 0x0A ///< Read Display Power Mode
|
|
#define ILI9341_RDMADCTL 0x0B ///< Read Display MADCTL
|
|
#define ILI9341_RDPIXFMT 0x0C ///< Read Display Pixel Format
|
|
#define ILI9341_RDIMGFMT 0x0D ///< Read Display Image Format
|
|
#define ILI9341_RDSELFDIAG 0x0F ///< Read Display Self-Diagnostic Result
|
|
|
|
#define ILI9341_INVOFF 0x20 ///< Display Inversion OFF
|
|
#define ILI9341_INVON 0x21 ///< Display Inversion ON
|
|
#define ILI9341_GAMMASET 0x26 ///< Gamma Set
|
|
#define ILI9341_DISPOFF 0x28 ///< Display OFF
|
|
#define ILI9341_DISPON 0x29 ///< Display ON
|
|
|
|
#define ILI9341_CASET 0x2A ///< Column Address Set
|
|
#define ILI9341_PASET 0x2B ///< Page Address Set
|
|
#define ILI9341_RAMWR 0x2C ///< Memory Write
|
|
#define ILI9341_RAMRD 0x2E ///< Memory Read
|
|
|
|
#define ILI9341_PTLAR 0x30 ///< Partial Area
|
|
#define ILI9341_VSCRDEF 0x33 ///< Vertical Scrolling Definition
|
|
#define ILI9341_MADCTL 0x36 ///< Memory Access Control
|
|
#define ILI9341_VSCRSADD 0x37 ///< Vertical Scrolling Start Address
|
|
#define ILI9341_PIXFMT 0x3A ///< COLMOD: Pixel Format Set
|
|
|
|
#define ILI9341_FRMCTR1 \
|
|
0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors)
|
|
#define ILI9341_FRMCTR2 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors)
|
|
#define ILI9341_FRMCTR3 \
|
|
0xB3 ///< Frame Rate control (In Partial Mode/Full Colors)
|
|
#define ILI9341_INVCTR 0xB4 ///< Display Inversion Control
|
|
#define ILI9341_DFUNCTR 0xB6 ///< Display Function Control
|
|
|
|
#define ILI9341_PWCTR1 0xC0 ///< Power Control 1
|
|
#define ILI9341_PWCTR2 0xC1 ///< Power Control 2
|
|
#define ILI9341_PWCTR3 0xC2 ///< Power Control 3
|
|
#define ILI9341_PWCTR4 0xC3 ///< Power Control 4
|
|
#define ILI9341_PWCTR5 0xC4 ///< Power Control 5
|
|
#define ILI9341_VMCTR1 0xC5 ///< VCOM Control 1
|
|
#define ILI9341_VMCTR2 0xC7 ///< VCOM Control 2
|
|
|
|
#define ILI9341_RDID1 0xDA ///< Read ID 1
|
|
#define ILI9341_RDID2 0xDB ///< Read ID 2
|
|
#define ILI9341_RDID3 0xDC ///< Read ID 3
|
|
#define ILI9341_RDID4 0xDD ///< Read ID 4
|
|
|
|
#define ILI9341_GMCTRP1 0xE0 ///< Positive Gamma Correction
|
|
#define ILI9341_GMCTRN1 0xE1 ///< Negative Gamma Correction
|
|
//#define ILI9341_PWCTR6 0xFC
|
|
|
|
#define MADCTL_MY 0x80 ///< Bottom to top
|
|
#define MADCTL_MX 0x40 ///< Right to left
|
|
#define MADCTL_MV 0x20 ///< Reverse Mode
|
|
#define MADCTL_NOTMV 0x00 ///< Reverse Mode
|
|
|
|
#define MADCTL_ML 0x10 ///< LCD refresh Bottom to top
|
|
#define MADCTL_RGB 0x00 ///< Red-Green-Blue pixel order
|
|
#define MADCTL_BGR 0x08 ///< Blue-Green-Red pixel order
|
|
#define MADCTL_MH 0x04 ///< LCD refresh right to left
|
|
|
|
// Color definitions
|
|
#define ILI9341_BLACK 0x0000 ///< 0, 0, 0
|
|
#define ILI9341_NAVY 0x000F ///< 0, 0, 123
|
|
#define ILI9341_DARKGREEN 0x03E0 ///< 0, 125, 0
|
|
#define ILI9341_DARKCYAN 0x03EF ///< 0, 125, 123
|
|
#define ILI9341_MAROON 0x7800 ///< 123, 0, 0
|
|
#define ILI9341_PURPLE 0x780F ///< 123, 0, 123
|
|
#define ILI9341_OLIVE 0x7BE0 ///< 123, 125, 0
|
|
#define ILI9341_LIGHTGREY 0xC618 ///< 198, 195, 198
|
|
#define ILI9341_DARKGREY 0x7BEF ///< 123, 125, 123
|
|
#define ILI9341_BLUE 0x001F ///< 0, 0, 255
|
|
#define ILI9341_GREEN 0x07E0 ///< 0, 255, 0
|
|
#define ILI9341_CYAN 0x07FF ///< 0, 255, 255
|
|
#define ILI9341_RED 0xF800 ///< 255, 0, 0
|
|
#define ILI9341_MAGENTA 0xF81F ///< 255, 0, 255
|
|
#define ILI9341_YELLOW 0xFFE0 ///< 255, 255, 0
|
|
#define ILI9341_WHITE 0xFFFF ///< 255, 255, 255
|
|
#define ILI9341_ORANGE 0xFD20 ///< 255, 165, 0
|
|
#define ILI9341_GREENYELLOW 0xAFE5 ///< 173, 255, 41
|
|
#define ILI9341_PINK 0xFC18 ///< 255, 130, 198
|
|
|
|
// Possible values for SPITFT.connection:
|
|
#define TFT_HARD_SPI 0 ///< Display interface = hardware SPI
|
|
#define TFT_SOFT_SPI 1 ///< Display interface = software SPI
|
|
|
|
#define TFT_PORTRAIT 1
|
|
#define TFT_LANDSCAPE 0
|
|
|
|
#define CURSOR_RELATIVE 1
|
|
#define CURSOR_ABSOLUTE 0
|
|
|
|
#define SCREEN_FULL_SCREEN 0
|
|
#define SCREEN_CLIPPED 1
|
|
|
|
|
|
#if defined(__AVR__)
|
|
#define DEFAULT_SPI_FREQ 2000000 ///< Hardware SPI default speed
|
|
#else
|
|
#define DEFAULT_SPI_FREQ 4000000L ///< Hardware SPI default speed
|
|
#endif
|
|
|
|
#if defined(__AVR__)
|
|
#define AVR_WRITESPI(x) for (SPDR = (x); (!(SPSR & _BV(SPIF)));)
|
|
#endif
|
|
|
|
// #undef USE_FAST_PINIO
|
|
|
|
|
|
|
|
|
|
// clang-format off
|
|
static const uint8_t PROGMEM initcmd[] = {
|
|
0xEF, 3, 0x03, 0x80, 0x02,
|
|
0xCF, 3, 0x00, 0xC1, 0x30, //Power control B (CFh)
|
|
0xED, 4, 0x64, 0x03, 0x12, 0x81, //Power on sequence control (EDh)
|
|
0xE8, 3, 0x85, 0x00, 0x78, //Driver timing control A (E8h) 0xE8, 3, 0x85, 0x00, 0x78,
|
|
0xCB, 5, 0x39, 0x2C, 0x00, 0x34, 0x02, //Power control A (CBh)
|
|
0xF7, 1, 0x20, //Pump ratio control (F7h)
|
|
0xEA, 2, 0x00, 0x00, //Driver timing control B (EAh) 0xEA, 2, 0x00, 0x00,
|
|
ILI9341_PWCTR1 , 1, 0x23, // Power control VRH[5:0]
|
|
ILI9341_PWCTR2 , 1, 0x10, // Power control SAP[2:0];BT[3:0]
|
|
ILI9341_VMCTR1 , 2, 0x3e, 0x28, // VCM control
|
|
ILI9341_VMCTR2 , 1, 0x86, // VCM control2
|
|
ILI9341_MADCTL , 1, 0x48, // Memory Access Control
|
|
ILI9341_VSCRSADD, 1, 0x00, // Vertical scroll zero
|
|
ILI9341_PIXFMT , 1, 0x55,
|
|
ILI9341_FRMCTR1 , 2, 0x00, 0x18,
|
|
ILI9341_DFUNCTR , 3, 0x08, 0x82, 0x27, // Display Function Control
|
|
0xF2, 1, 0x00, // 3Gamma Function Disable
|
|
ILI9341_GAMMASET , 1, 0x01, // Gamma curve selected
|
|
ILI9341_GMCTRP1 , 15, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, // Set Gamma
|
|
0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,
|
|
ILI9341_GMCTRN1 , 15, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, // Set Gamma
|
|
0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,
|
|
ILI9341_SLPOUT , 0x80, // Exit Sleep
|
|
ILI9341_DISPON , 0x80, // Display on
|
|
0x00 // End of list
|
|
};
|
|
// clang-format on
|
|
|
|
// Standard ASCII 5x7 font
|
|
static const unsigned char font[] PROGMEM = {
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B,
|
|
0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C,
|
|
0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
|
|
0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24,
|
|
0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E,
|
|
0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F,
|
|
0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C,
|
|
0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F,
|
|
0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89,
|
|
0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94,
|
|
0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08,
|
|
0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10,
|
|
0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06,
|
|
0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F,
|
|
0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14,
|
|
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49,
|
|
0x56, 0x20, 0x50, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x1C, 0x22, 0x41,
|
|
0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x08,
|
|
0x08, 0x3E, 0x08, 0x08, 0x00, 0x80, 0x70, 0x30, 0x00, 0x08, 0x08, 0x08,
|
|
0x08, 0x08, 0x00, 0x00, 0x60, 0x60, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,
|
|
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x72, 0x49,
|
|
0x49, 0x49, 0x46, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x18, 0x14, 0x12, 0x7F,
|
|
0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x41,
|
|
0x21, 0x11, 0x09, 0x07, 0x36, 0x49, 0x49, 0x49, 0x36, 0x46, 0x49, 0x49,
|
|
0x29, 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00,
|
|
0x00, 0x08, 0x14, 0x22, 0x41, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41,
|
|
0x22, 0x14, 0x08, 0x02, 0x01, 0x59, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x59,
|
|
0x4E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E,
|
|
0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49,
|
|
0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x41, 0x51, 0x73,
|
|
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40,
|
|
0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40,
|
|
0x40, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E,
|
|
0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51,
|
|
0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32,
|
|
0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20,
|
|
0x40, 0x20, 0x1F, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14,
|
|
0x63, 0x03, 0x04, 0x78, 0x04, 0x03, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
|
|
0x7F, 0x41, 0x41, 0x41, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41,
|
|
0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40,
|
|
0x00, 0x03, 0x07, 0x08, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x7F, 0x28,
|
|
0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x28, 0x38, 0x44, 0x44, 0x28,
|
|
0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x18,
|
|
0xA4, 0xA4, 0x9C, 0x78, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D,
|
|
0x40, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,
|
|
0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08,
|
|
0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0xFC, 0x18, 0x24, 0x24,
|
|
0x18, 0x18, 0x24, 0x24, 0x18, 0xFC, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48,
|
|
0x54, 0x54, 0x54, 0x24, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x3C, 0x40, 0x40,
|
|
0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x30, 0x40, 0x3C,
|
|
0x44, 0x28, 0x10, 0x28, 0x44, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x44, 0x64,
|
|
0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x77, 0x00,
|
|
0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x3C,
|
|
0x26, 0x23, 0x26, 0x3C, 0x1E, 0xA1, 0xA1, 0x61, 0x12, 0x3A, 0x40, 0x40,
|
|
0x20, 0x7A, 0x38, 0x54, 0x54, 0x55, 0x59, 0x21, 0x55, 0x55, 0x79, 0x41,
|
|
0x22, 0x54, 0x54, 0x78, 0x42, // a-umlaut
|
|
0x21, 0x55, 0x54, 0x78, 0x40, 0x20, 0x54, 0x55, 0x79, 0x40, 0x0C, 0x1E,
|
|
0x52, 0x72, 0x12, 0x39, 0x55, 0x55, 0x55, 0x59, 0x39, 0x54, 0x54, 0x54,
|
|
0x59, 0x39, 0x55, 0x54, 0x54, 0x58, 0x00, 0x00, 0x45, 0x7C, 0x41, 0x00,
|
|
0x02, 0x45, 0x7D, 0x42, 0x00, 0x01, 0x45, 0x7C, 0x40, 0x7D, 0x12, 0x11,
|
|
0x12, 0x7D, // A-umlaut
|
|
0xF0, 0x28, 0x25, 0x28, 0xF0, 0x7C, 0x54, 0x55, 0x45, 0x00, 0x20, 0x54,
|
|
0x54, 0x7C, 0x54, 0x7C, 0x0A, 0x09, 0x7F, 0x49, 0x32, 0x49, 0x49, 0x49,
|
|
0x32, 0x3A, 0x44, 0x44, 0x44, 0x3A, // o-umlaut
|
|
0x32, 0x4A, 0x48, 0x48, 0x30, 0x3A, 0x41, 0x41, 0x21, 0x7A, 0x3A, 0x42,
|
|
0x40, 0x20, 0x78, 0x00, 0x9D, 0xA0, 0xA0, 0x7D, 0x3D, 0x42, 0x42, 0x42,
|
|
0x3D, // O-umlaut
|
|
0x3D, 0x40, 0x40, 0x40, 0x3D, 0x3C, 0x24, 0xFF, 0x24, 0x24, 0x48, 0x7E,
|
|
0x49, 0x43, 0x66, 0x2B, 0x2F, 0xFC, 0x2F, 0x2B, 0xFF, 0x09, 0x29, 0xF6,
|
|
0x20, 0xC0, 0x88, 0x7E, 0x09, 0x03, 0x20, 0x54, 0x54, 0x79, 0x41, 0x00,
|
|
0x00, 0x44, 0x7D, 0x41, 0x30, 0x48, 0x48, 0x4A, 0x32, 0x38, 0x40, 0x40,
|
|
0x22, 0x7A, 0x00, 0x7A, 0x0A, 0x0A, 0x72, 0x7D, 0x0D, 0x19, 0x31, 0x7D,
|
|
0x26, 0x29, 0x29, 0x2F, 0x28, 0x26, 0x29, 0x29, 0x29, 0x26, 0x30, 0x48,
|
|
0x4D, 0x40, 0x20, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
|
|
0x38, 0x2F, 0x10, 0xC8, 0xAC, 0xBA, 0x2F, 0x10, 0x28, 0x34, 0xFA, 0x00,
|
|
0x00, 0x7B, 0x00, 0x00, 0x08, 0x14, 0x2A, 0x14, 0x22, 0x22, 0x14, 0x2A,
|
|
0x14, 0x08, 0x55, 0x00, 0x55, 0x00, 0x55, // #176 (25% block) missing in old
|
|
// code
|
|
0xAA, 0x55, 0xAA, 0x55, 0xAA, // 50% block
|
|
0xFF, 0x55, 0xFF, 0x55, 0xFF, // 75% block
|
|
0x00, 0x00, 0x00, 0xFF, 0x00, 0x10, 0x10, 0x10, 0xFF, 0x00, 0x14, 0x14,
|
|
0x14, 0xFF, 0x00, 0x10, 0x10, 0xFF, 0x00, 0xFF, 0x10, 0x10, 0xF0, 0x10,
|
|
0xF0, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00,
|
|
0x00, 0xFF, 0x00, 0xFF, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x14, 0x14, 0x17,
|
|
0x10, 0x1F, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0x1F, 0x00,
|
|
0x10, 0x10, 0x10, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10,
|
|
0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x10, 0x00, 0x00, 0x00, 0xFF,
|
|
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xFF, 0x10, 0x00,
|
|
0x00, 0x00, 0xFF, 0x14, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x1F,
|
|
0x10, 0x17, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x17, 0x10, 0x17,
|
|
0x14, 0x14, 0xF4, 0x04, 0xF4, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14,
|
|
0x14, 0x14, 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14, 0x14, 0x17,
|
|
0x14, 0x10, 0x10, 0x1F, 0x10, 0x1F, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x10,
|
|
0x10, 0xF0, 0x10, 0xF0, 0x00, 0x00, 0x1F, 0x10, 0x1F, 0x00, 0x00, 0x00,
|
|
0x1F, 0x14, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x00, 0x00, 0xF0, 0x10, 0xF0,
|
|
0x10, 0x10, 0xFF, 0x10, 0xFF, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x10, 0x10,
|
|
0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x10, 0xFF, 0xFF, 0xFF, 0xFF,
|
|
0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
|
|
0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x38, 0x44, 0x44,
|
|
0x38, 0x44, 0xFC, 0x4A, 0x4A, 0x4A, 0x34, // sharp-s or beta
|
|
0x7E, 0x02, 0x02, 0x06, 0x06, 0x02, 0x7E, 0x02, 0x7E, 0x02, 0x63, 0x55,
|
|
0x49, 0x41, 0x63, 0x38, 0x44, 0x44, 0x3C, 0x04, 0x40, 0x7E, 0x20, 0x1E,
|
|
0x20, 0x06, 0x02, 0x7E, 0x02, 0x02, 0x99, 0xA5, 0xE7, 0xA5, 0x99, 0x1C,
|
|
0x2A, 0x49, 0x2A, 0x1C, 0x4C, 0x72, 0x01, 0x72, 0x4C, 0x30, 0x4A, 0x4D,
|
|
0x4D, 0x30, 0x30, 0x48, 0x78, 0x48, 0x30, 0xBC, 0x62, 0x5A, 0x46, 0x3D,
|
|
0x3E, 0x49, 0x49, 0x49, 0x00, 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x2A, 0x2A,
|
|
0x2A, 0x2A, 0x2A, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x40, 0x51, 0x4A, 0x44,
|
|
0x40, 0x40, 0x44, 0x4A, 0x51, 0x40, 0x00, 0x00, 0xFF, 0x01, 0x03, 0xE0,
|
|
0x80, 0xFF, 0x00, 0x00, 0x08, 0x08, 0x6B, 0x6B, 0x08, 0x36, 0x12, 0x36,
|
|
0x24, 0x36, 0x06, 0x0F, 0x09, 0x0F, 0x06, 0x00, 0x00, 0x18, 0x18, 0x00,
|
|
0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x40, 0xFF, 0x01, 0x01, 0x00, 0x1F,
|
|
0x01, 0x01, 0x1E, 0x00, 0x19, 0x1D, 0x17, 0x12, 0x00, 0x3C, 0x3C, 0x3C,
|
|
0x3C, 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP
|
|
};
|
|
|
|
// allow clean compilation with [-Wunused-const-variable=] and [-Wall]
|
|
static inline void avoid_unused_const_variable_compiler_warning(void) {
|
|
(void)font;
|
|
}
|
|
|
|
|
|
|
|
// ASCII art
|
|
static const PROGMEM char line1[SCREEN_COLS] = " _____ ___ ___ _____ _____ ______ __ __ \n";
|
|
static const PROGMEM char line2[SCREEN_COLS] = "| __| | | _ | _ |_ _| | |\n";
|
|
static const PROGMEM char line3[SCREEN_COLS] = "|__ | | | | | | | |\n";
|
|
static const PROGMEM char line4[SCREEN_COLS] = "|_____|__\\_/__|__|__|__\\__\\ |__| |___| \n";
|
|
static const PROGMEM char line5[SCREEN_COLS] = " ______ _____ _________ ___________ \n";
|
|
static const PROGMEM char line6[SCREEN_COLS] = "| / | | | | |\n";
|
|
static const PROGMEM char line7[SCREEN_COLS] = "| < | | |_ _|\n";
|
|
static const PROGMEM char line8[SCREEN_COLS] = "|______\\_____| |_________| |_______| \n";
|
|
static const PROGMEM char line9[SCREEN_COLS] = " \n";
|
|
static const PROGMEM char line10[SCREEN_COLS] = ". . . . . . . . . . . _N_. . \n";
|
|
static const PROGMEM char line11[SCREEN_COLS] = " : . : . : . : . : . : . : . : .|=|. : .\n";
|
|
static const PROGMEM char line12[SCREEN_COLS] = ":.:.:.:.:.:.:.:.:.:.\' \'_________|=|_____\n";
|
|
static const PROGMEM char line13[SCREEN_COLS] = "::::::::::::\'\'\'__..--==-=-=-=-= |=| =-=-\n";
|
|
static const PROGMEM char line14[SCREEN_COLS] = "::::\'\'\'__..--===-=-=-=-=-=-=-=-=- -=-=-=\n";
|
|
static const PROGMEM char line15[SCREEN_COLS] = "\'..--==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n";
|
|
static const PROGMEM char line16[SCREEN_COLS] = " [======================================\n";
|
|
static const PROGMEM char line17[SCREEN_COLS] = ":.. | _ . . . . . . . . . _ . \n";
|
|
static const PROGMEM char line18[SCREEN_COLS] = "::: |[_]____________[=]___________[_] \n";
|
|
static const PROGMEM char line19[SCREEN_COLS] = "::: | | ||_____|_____|_____|____|| | . \n";
|
|
static const PROGMEM char line20[SCREEN_COLS] = "::: | ||_____|_____|_____|____|| \n";
|
|
static const PROGMEM char line21[SCREEN_COLS] = "::: | . ||_____|_____|_____|____|| . . \n";
|
|
static const PROGMEM char line22[SCREEN_COLS] = "::: | ||_____|_____|_____|____|| \n";
|
|
static const PROGMEM char line23[SCREEN_COLS] = "----|___||_____|_____|_____|____||______\n";
|
|
static const PROGMEM char line24[SCREEN_COLS] = ",\',\',\',/ , \' , \' , \' . ` . ` . ` .\\` adl\n";
|
|
|
|
static const char *const string_table[SCREEN_ROWS] PROGMEM = {line1, line2, line3, line4, line5, line6, line7, line8, line9,
|
|
line10, line11, line12, line13, line14, line15, line16, line17, line18, line19, line20, line21, line22, line23, line24};
|
|
|
|
|
|
|
|
//SmartyKit Display Driver Class members
|
|
class SmartyKit_DisplayDriver
|
|
{
|
|
public:
|
|
SmartyKit_DisplayDriver::SmartyKit_DisplayDriver(int cs, int dc, int mosi, int clk, int rst, int miso);
|
|
|
|
SmartyKit_DisplayDriver::~SmartyKit_DisplayDriver()
|
|
{
|
|
if(spiClass)
|
|
spiClass->endTransaction();
|
|
}
|
|
SPIClass *spiClass;
|
|
SPISettings spiSettings;
|
|
int connection;
|
|
int clipScreen;
|
|
uint8_t rotation;
|
|
int16_t _TFTwidth; //full TFT width
|
|
int16_t _TFTheight; //full TFT height
|
|
int16_t _workingScreenWidth; //screen area width: SCREEN_WIDTH
|
|
int16_t _workingScreenHeight; //screen area height: SCREEN_HEIGHT
|
|
int16_t _workingScreenTopMargin;
|
|
int16_t _workingScreenLeftMargin;
|
|
int16_t scrollLine;
|
|
int16_t cursor_x;
|
|
int16_t cursor_y;
|
|
int16_t screen_col;
|
|
int16_t screen_row;
|
|
|
|
int16_t textsize_x;
|
|
int16_t textsize_y;
|
|
int8_t _dc;
|
|
int8_t _rst; ///< Reset pin # (or -1)
|
|
int8_t _cs; ///< Chip select pin # (or -1)
|
|
int8_t _sck;
|
|
int8_t _mosi;
|
|
int8_t _miso;
|
|
|
|
uint16_t color;
|
|
uint16_t bgColor;
|
|
char madeWithLove[40];
|
|
|
|
bool bCursorOn;
|
|
|
|
//functions
|
|
void setup(uint16_t setupColor, uint16_t setupBgColor, char* madeWithLoveString);
|
|
void initSPI(void);
|
|
void sendCommand(uint8_t commandByte, const uint8_t *dataBytes, uint8_t numDataBytes);
|
|
void sendCommand(uint8_t commandByte, uint8_t *dataBytes = 0, uint8_t numDataBytes = 0);
|
|
void spiWrite(uint8_t b); // Write single byte as DATA
|
|
void writeCommand(uint8_t cmd);
|
|
void setAddrWindow(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h);
|
|
inline void writeColor(uint16_t color, uint32_t len);
|
|
inline void startWrite(void);
|
|
inline void endWrite(void);
|
|
|
|
void setRotation(uint8_t m);
|
|
void clearFullScreen(uint16_t color = ILI9341_WHITE);
|
|
void clearScreen(uint16_t color = ILI9341_WHITE);
|
|
void splashScreen();
|
|
|
|
void drawScreenRect(uint16_t color);
|
|
void drawHLine(uint16_t y, uint16_t color);
|
|
void writeFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
|
|
inline void writeFillRectPreclipped(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
|
|
void writeFillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
|
|
void scrollTo(uint16_t y);
|
|
void setScrollMargins(uint16_t top, uint16_t bottom);
|
|
void scrollToNextLine(void);
|
|
void drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size);
|
|
void writePixel(int16_t x, int16_t y, uint16_t color);
|
|
void setCursor(int16_t x, int16_t y, uint8_t relative = CURSOR_RELATIVE);
|
|
void print(uint8_t c, uint16_t color = ILI9341_GREEN);
|
|
void ASCIIart(void);
|
|
|
|
inline void SPI_BEGIN_TRANSACTION(void) { };
|
|
inline void SPI_END_TRANSACTION(void) { };
|
|
void SPI_WRITE16(uint16_t w);
|
|
//for TFT_SOFT_SPI
|
|
inline void SPI_MOSI_HIGH(void) { PORTC = PORTC | B000100;}; //MOSI = A2 = PC2
|
|
inline void SPI_MOSI_LOW(void) { PORTC = PORTC & B111011;}; //MOSI = A2 = PC2
|
|
inline void SPI_SCK_HIGH(void) { PORTC = PORTC | B001000;}; //SCK = A3 = PC3
|
|
inline void SPI_SCK_LOW(void) { PORTC = PORTC & B110111;}; //SCK = A3 = PC3
|
|
inline void SPI_DC_HIGH(void) { digitalWrite(_dc, HIGH); };
|
|
inline void SPI_DC_LOW(void) { digitalWrite(_dc, LOW); };
|
|
inline void SPI_CS_LOW(void) { digitalWrite(_cs, LOW); };
|
|
inline void SPI_CS_HIGH(void) { digitalWrite(_cs, HIGH); };
|
|
|
|
|
|
|
|
};
|