3 Star 7 Fork 2

刘泽文/Arduino-ST77XX-Library

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Adafruit_ST7796.cpp 6.29 KB
一键复制 编辑 原始数据 按行查看 历史
刘泽文 提交于 2020-08-13 11:19 . 建立库
#include "Adafruit_ST7796.h"
#include "Adafruit_ST77xx.h"
// CONSTRUCTORS ************************************************************
/*!
@brief Instantiate Adafruit ST7789 driver with software SPI
@param cs Chip select pin #
@param dc Data/Command pin #
@param mosi SPI MOSI pin #
@param sclk SPI Clock pin #
@param rst Reset pin # (optional, pass -1 if unused)
*/
Adafruit_ST7796::Adafruit_ST7796(int8_t cs, int8_t dc, int8_t mosi, int8_t sclk,
int8_t rst)
: Adafruit_ST77xx(320, 480, cs, dc, mosi, sclk, rst) {}
/*!
@brief Instantiate Adafruit ST7789 driver with hardware SPI
@param cs Chip select pin #
@param dc Data/Command pin #
@param rst Reset pin # (optional, pass -1 if unused)
*/
Adafruit_ST7796::Adafruit_ST7796(int8_t cs, int8_t dc, int8_t rst)
: Adafruit_ST77xx(320, 480, cs, dc, rst) {}
#if !defined(ESP8266)
/*!
@brief Instantiate Adafruit ST7789 driver with selectable hardware SPI
@param spiClass Pointer to an SPI device to use (e.g. &SPI1)
@param cs Chip select pin #
@param dc Data/Command pin #
@param rst Reset pin # (optional, pass -1 if unused)
*/
Adafruit_ST7796::Adafruit_ST7796(SPIClass *spiClass, int8_t cs, int8_t dc,
int8_t rst)
: Adafruit_ST77xx(320, 480, spiClass, cs, dc, rst) {}
#endif // end !ESP8266
// SCREEN INITIALIZATION ***************************************************
// Rather than a bazillion writecommand() and writedata() calls, screen
// initialization commands and arguments are organized in these tables
// stored in PROGMEM. The table may look bulky, but that's mostly the
// formatting -- storage-wise this is hundreds of bytes more compact
// than the equivalent code. Companion function follows.
// clang-format off
static const uint8_t PROGMEM
Rcmd1[] = { // ST7796S init, part 1 (red or green tab)
15, // 15条命令
0xF0, 1, // 1
0xC3,
0xF0, 1, // 2
0x96,
0x36, 1, // 3
0x68,
0x3A, 1, // 4
0x05,
0xB0, 1, // 5
0x80,
0xB6, 2, // 6
0x00, 0x02,
0xB5, 4, // 7
0x02, 0x03, 0x00, 0x04,
0xB1, 2, // 8
0x80, 0x10,
0xB4, 1, // 9
0x00,
0xB7, 1, // 10
0xC6,
0xC5, 1, // 11
0x24,
0xE4, 1, // 12
0x31,
0xE8, 8, // 13
0x40, 0x8A, 0x00, 0x00,
0x29, 0x19, 0xA5, 0x33,
0xC2, ST_CMD_DELAY, // 14
255,
0xA7, ST_CMD_DELAY, // 15
255,
}, // 16-bit color
Rcmd2green480x320[] = { // 7735R init, part 2 (mini 160x80)
2, // 2 commands in list:
ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay:
0x00, 0x00, // XSTART = 0
ST7796_LCD_W>>8, ST7796_LCD_W&0xFF, // XEND = 79
ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay:
0x00, 0x00, // XSTART = 0
ST7796_LCD_H>>8, ST7796_LCD_H&0xFF }, // XEND = 159
Rcmd3[] = { // 7735R init, part 3 (red or green tab)
8, // 4 commands in list:
ST7796_GMCTRP1, 14 , // 1: Gamma Adjustments (pos. polarity), 16 args + delay:
0xF0, 0x09, 0x13, 0x12, // (Not entirely necessary, but provides
0x12, 0x2B, 0x3C, 0x44, // accurate colors)
0x4B, 0x1B, 0x18, 0x17,
0x1D, 0x21,
ST7796_GMCTRN1, 14 , // 2: Gamma Adjustments (neg. polarity), 16 args + delay:
0xF0, 0x09, 0x13, 0x0C, // (Not entirely necessary, but provides
0x0D, 0x27, 0x3B, 0x44, // accurate colors)
0x4D, 0x0B, 0x17, 0x17,
0x1D, 0x21,
0X36, 1, // 3: Normal display on, no args, w/delay
0xEC,
0xF0, 1, // 4: Normal display on, no args, w/delay
0xC3,
0xF0, 1, // 5: Normal display on, no args, w/delay
0x69,
ST77XX_NORON, ST_CMD_DELAY, // 6: Normal display on, no args, w/delay
10, // 10 ms delay
ST77XX_SLPOUT, ST_CMD_DELAY, // 7.
10,
ST77XX_DISPON, ST_CMD_DELAY, // 8: Main screen turn on, no args w/delay
100 }; // 100 ms delay
// clang-format on
/**************************************************************************/
/*!
@brief Initialization code common to all ST7789 displays
@param width Display width
@param height Display height
@param mode SPI data mode; one of SPI_MODE0, SPI_MODE1, SPI_MODE2
or SPI_MODE3 (do NOT pass the numbers 0,1,2 or 3 -- use
the defines only, the values are NOT the same!)
*/
/**************************************************************************/
void Adafruit_ST7796::init(void) {
commonInit(Rcmd1);
_height = ST7796_LCD_W;
_width = ST7796_LCD_H;
_colstart = 0;
_rowstart = 0;
displayInit(Rcmd2green480x320);
displayInit(Rcmd3);
setRotation(0);
}
/**************************************************************************/
/*!
@brief Set origin of (0,0) and orientation of TFT display
@param m The index for rotation, from 0-3 inclusive
*/
/**************************************************************************/
void Adafruit_ST7796::setRotation(uint8_t m) {
uint8_t madctl = 0;
rotation = m & 3; // can't be higher than 3
switch (rotation) {
case 0:
madctl = (1<<3)|(1<<6);
_height = ST7796_LCD_H;
_width = ST7796_LCD_W;
_xstart = _colstart;
_ystart = _rowstart;
break;
case 1:
madctl = (1<<3)|(1<<5);
_width = ST7796_LCD_H;
_height = ST7796_LCD_W;
_ystart = _colstart;
_xstart = _rowstart;
break;
case 2:
madctl = (1<<3)|(1<<7);
_height = ST7796_LCD_H;
_width = ST7796_LCD_W;
_xstart = _colstart;
_ystart = _rowstart;
break;
case 3:
madctl = (1<<3)|(1<<7)|(1<<6)|(1<<5);
_width = ST7796_LCD_H;
_height = ST7796_LCD_W;
_ystart = _colstart;
_xstart = _rowstart;
break;
}
sendCommand(ST77XX_MADCTL, &madctl, 1);//设置屏幕旋转方向
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/liuzewen/Arduino-ST77XX-Library.git
git@gitee.com:liuzewen/Arduino-ST77XX-Library.git
liuzewen
Arduino-ST77XX-Library
Arduino-ST77XX-Library
master

搜索帮助