Added a function that can refresh only part of the screen area.
This commit is contained in:
parent
fb3ce18166
commit
ce29fad2c3
4 changed files with 357 additions and 297 deletions
|
@ -30,49 +30,63 @@
|
||||||
|
|
||||||
static const UBYTE lut_4Gray_GC[] =
|
static const UBYTE lut_4Gray_GC[] =
|
||||||
{
|
{
|
||||||
0x2A,0x06,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x2A,0x06,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x28,0x06,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
0x28,0x06,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
||||||
0x20,0x06,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x20,0x06,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x14,0x06,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
0x14,0x06,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x08,0x08,0x02,//6
|
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x08,0x08,0x02,//6
|
||||||
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UBYTE lut_1Gray_GC[] =
|
static const UBYTE lut_1Gray_GC[] =
|
||||||
{
|
{
|
||||||
0x2A,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x2A,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x05,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
0x05,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
||||||
0x2A,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x2A,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x05,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
0x05,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x02,0x03,0x0A,0x00,0x02,0x06,0x0A,0x05,0x00,//6
|
0x00,0x02,0x03,0x0A,0x00,0x02,0x06,0x0A,0x05,0x00,//6
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UBYTE lut_1Gray_DU[] =
|
static const UBYTE lut_1Gray_DU[] =
|
||||||
{
|
{
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x01,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x01,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x0A,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x0A,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x00,0x05,0x05,0x00,0x05,0x03,0x05,0x05,0x00,
|
0x00,0x00,0x05,0x05,0x00,0x05,0x03,0x05,0x05,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const UBYTE lut_1Gray_A2[] =
|
||||||
|
{
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //1
|
||||||
|
0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //2
|
||||||
|
0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //3
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //4
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //5
|
||||||
|
0x00,0x00,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00, //6
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //7
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //8
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //9
|
||||||
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //10
|
||||||
|
0x22,0x22,0x22,0x22,0x22
|
||||||
|
};
|
||||||
|
|
||||||
Epd::~Epd() {
|
Epd::~Epd() {
|
||||||
};
|
};
|
||||||
|
@ -87,80 +101,80 @@ Epd::Epd() {
|
||||||
};
|
};
|
||||||
|
|
||||||
int Epd::Init(void) {
|
int Epd::Init(void) {
|
||||||
if (IfInit() != 0) {
|
if (IfInit() != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
Reset();
|
Reset();
|
||||||
|
|
||||||
SendCommand(0x12);
|
SendCommand(0x12);
|
||||||
DelayMs(300);
|
DelayMs(300);
|
||||||
|
|
||||||
SendCommand(0x46);
|
|
||||||
SendData(0xF7);
|
|
||||||
WaitUntilIdle();
|
|
||||||
SendCommand(0x47);
|
|
||||||
SendData(0xF7);
|
|
||||||
WaitUntilIdle();
|
|
||||||
|
|
||||||
SendCommand(0x01); // setting gaet number
|
|
||||||
SendData(0xDF);
|
|
||||||
SendData(0x01);
|
|
||||||
SendData(0x00);
|
|
||||||
|
|
||||||
SendCommand(0x03); // set gate voltage
|
SendCommand(0x46);
|
||||||
SendData(0x00);
|
SendData(0xF7);
|
||||||
|
WaitUntilIdle();
|
||||||
|
SendCommand(0x47);
|
||||||
|
SendData(0xF7);
|
||||||
|
WaitUntilIdle();
|
||||||
|
|
||||||
SendCommand(0x04); // set source voltage
|
SendCommand(0x01); // setting gaet number
|
||||||
SendData(0x41);
|
SendData(0xDF);
|
||||||
SendData(0xA8);
|
SendData(0x01);
|
||||||
SendData(0x32);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x11); // set data entry sequence
|
SendCommand(0x03); // set gate voltage
|
||||||
SendData(0x03);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x3C); // set border
|
SendCommand(0x04); // set source voltage
|
||||||
SendData(0x00);
|
SendData(0x41);
|
||||||
|
SendData(0xA8);
|
||||||
|
SendData(0x32);
|
||||||
|
|
||||||
SendCommand(0x0C); // set booster strength
|
SendCommand(0x11); // set data entry sequence
|
||||||
SendData(0xAE);
|
SendData(0x03);
|
||||||
SendData(0xC7);
|
|
||||||
SendData(0xC3);
|
|
||||||
SendData(0xC0);
|
|
||||||
SendData(0xC0);
|
|
||||||
|
|
||||||
SendCommand(0x18); // set internal sensor on
|
SendCommand(0x3C); // set border
|
||||||
SendData(0x80);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x2C); // set vcom value
|
|
||||||
SendData(0x44);
|
|
||||||
|
|
||||||
SendCommand(0x37); // set display option, these setting turn on previous function
|
|
||||||
SendData(0x00);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0x4f);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
SendData(0xff);
|
|
||||||
|
|
||||||
SendCommand(0x44); // setting X direction start/end position of RAM
|
SendCommand(0x0C); // set booster strength
|
||||||
SendData(0x00);
|
SendData(0xAE);
|
||||||
SendData(0x00);
|
SendData(0xC7);
|
||||||
SendData(0x17);
|
SendData(0xC3);
|
||||||
SendData(0x01);
|
SendData(0xC0);
|
||||||
|
SendData(0xC0);
|
||||||
|
|
||||||
SendCommand(0x45); // setting Y direction start/end position of RAM
|
SendCommand(0x18); // set internal sensor on
|
||||||
SendData(0x00);
|
SendData(0x80);
|
||||||
SendData(0x00);
|
|
||||||
SendData(0xDF);
|
|
||||||
SendData(0x01);
|
|
||||||
|
|
||||||
SendCommand(0x22); // Display Update Control 2
|
SendCommand(0x2C); // set vcom value
|
||||||
SendData(0xCF);
|
SendData(0x44);
|
||||||
return 0;
|
|
||||||
|
SendCommand(0x37); // set display option, these setting turn on previous function
|
||||||
|
SendData(0x00);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0x4f);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
SendData(0xff);
|
||||||
|
|
||||||
|
SendCommand(0x44); // setting X direction start/end position of RAM
|
||||||
|
SendData(0x00);
|
||||||
|
SendData(0x00);
|
||||||
|
SendData(0x17);
|
||||||
|
SendData(0x01);
|
||||||
|
|
||||||
|
SendCommand(0x45); // setting Y direction start/end position of RAM
|
||||||
|
SendData(0x00);
|
||||||
|
SendData(0x00);
|
||||||
|
SendData(0xDF);
|
||||||
|
SendData(0x01);
|
||||||
|
|
||||||
|
SendCommand(0x22); // Display Update Control 2
|
||||||
|
SendData(0xCF);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -183,15 +197,13 @@ void Epd::SendData(unsigned char data) {
|
||||||
* @brief: Wait until the busy_pin goes HIGH
|
* @brief: Wait until the busy_pin goes HIGH
|
||||||
*/
|
*/
|
||||||
void Epd::WaitUntilIdle(void) {
|
void Epd::WaitUntilIdle(void) {
|
||||||
Serial.print("e-Paper busy \r\n ");
|
Serial.print("e-Paper busy \r\n ");
|
||||||
UBYTE busy;
|
UBYTE busy;
|
||||||
do
|
do {
|
||||||
{
|
busy = DigitalRead(busy_pin);
|
||||||
busy = DigitalRead(busy_pin);
|
} while(busy);
|
||||||
}
|
DelayMs(200);
|
||||||
while(busy);
|
Serial.print("e-Paper busy release \r\n ");
|
||||||
DelayMs(200);
|
|
||||||
Serial.print("e-Paper busy release \r\n ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -200,78 +212,131 @@ void Epd::WaitUntilIdle(void) {
|
||||||
* see Epd::Sleep();
|
* see Epd::Sleep();
|
||||||
*/
|
*/
|
||||||
void Epd::Reset(void) {
|
void Epd::Reset(void) {
|
||||||
DigitalWrite(reset_pin, LOW); //module reset
|
|
||||||
DelayMs(1);
|
|
||||||
DigitalWrite(reset_pin, HIGH);
|
DigitalWrite(reset_pin, HIGH);
|
||||||
DelayMs(200);
|
DelayMs(20);
|
||||||
|
DigitalWrite(reset_pin, LOW); //module reset
|
||||||
|
DelayMs(2);
|
||||||
|
DigitalWrite(reset_pin, HIGH);
|
||||||
|
DelayMs(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Display
|
function : Display
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Epd::DisplayFrame(const UBYTE *Image) {
|
void Epd::DisplayFrame(const UBYTE *Image) {
|
||||||
UWORD i;
|
UWORD i;
|
||||||
UWORD IMAGE_COUNTER = width * height / 8;
|
UWORD IMAGE_COUNTER = width * height / 8;
|
||||||
|
|
||||||
SendCommand(0x4E);
|
SendCommand(0x4E);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendCommand(0x4F);
|
SendCommand(0x4F);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x24);
|
SendCommand(0x24);
|
||||||
for (i = 0; i < IMAGE_COUNTER; i++)
|
for (i = 0; i < IMAGE_COUNTER; i++) {
|
||||||
{
|
SendData(pgm_read_byte(&Image[i]));
|
||||||
SendData(pgm_read_byte(&Image[i]));
|
}
|
||||||
}
|
SendCommand(0x26);
|
||||||
|
for (i = 0; i < IMAGE_COUNTER; i++) {
|
||||||
|
SendData(pgm_read_byte(&Image[i]));
|
||||||
|
}
|
||||||
|
|
||||||
Load_LUT(1);
|
Load_LUT(1);
|
||||||
SendCommand(0x20);
|
SendCommand(0x20);
|
||||||
WaitUntilIdle();
|
WaitUntilIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Partial Display
|
function : Partial Display
|
||||||
|
note:
|
||||||
|
1. iwidth must be a multiple of 8
|
||||||
|
2. The update will clear other parts of the image data
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Epd::DisplayFrame_Partial(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD iwidth, UWORD iheight) {
|
void Epd::DisplayFrame_Partial(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD iwidth, UWORD iheight) {
|
||||||
UWORD i, j;
|
UWORD i, j;
|
||||||
SendCommand(0x4E);
|
SendCommand(0x4E);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendCommand(0x4F);
|
SendCommand(0x4F);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x24);
|
SendCommand(0x24);
|
||||||
for(i=0; i<EPD_WIDTH; i++) {
|
for(i=0; i<EPD_WIDTH; i++) {
|
||||||
for(j=0; j<EPD_HEIGHT/8; j++) {
|
for(j=0; j<EPD_HEIGHT/8; j++) {
|
||||||
if(i>=Ystart && i<Ystart+iheight && j>=Xstart/8 && j<(Xstart+iwidth)/8)
|
if(i>=Ystart && i<Ystart+iheight && j>=Xstart/8 && j<(Xstart+iwidth)/8)
|
||||||
SendData(Image[(j-Xstart/8) + (i-Ystart)*iwidth/8]);
|
SendData(Image[(j-Xstart/8) + (i-Ystart)*iwidth/8]);
|
||||||
else
|
else
|
||||||
SendData(0xff);
|
SendData(0xff);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
Load_LUT(0);
|
||||||
Load_LUT(0);
|
SendCommand(0x20);
|
||||||
SendCommand(0x20);
|
WaitUntilIdle();
|
||||||
WaitUntilIdle();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
function : Sends part the image buffer in RAM to e-Paper and displays
|
||||||
|
notes:
|
||||||
|
1. Xstart must be a multiple of 8
|
||||||
|
1. isGC: use GC mode to clear base-image
|
||||||
|
******************************************************************************/
|
||||||
|
void Epd::DisplayFrame_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, bool isGC)
|
||||||
|
{
|
||||||
|
UWORD i, Width;
|
||||||
|
Width = (Xend-Xstart)%8 == 0 ? (Xend-Xstart)/8 : (Xend-Xstart)/8+1;
|
||||||
|
UWORD IMAGE_COUNTER = Width * (Yend-Ystart);
|
||||||
|
|
||||||
|
Xend -= 1;
|
||||||
|
Yend -= 1;
|
||||||
|
|
||||||
|
SendCommand(0x44);
|
||||||
|
SendData(Xstart & 0xff);
|
||||||
|
SendData((Xstart>>8) & 0x03);
|
||||||
|
SendData(Xend & 0xff);
|
||||||
|
SendData((Xend>>8) & 0x03);
|
||||||
|
SendCommand(0x45);
|
||||||
|
SendData(Ystart & 0xff);
|
||||||
|
SendData((Ystart>>8) & 0x03);
|
||||||
|
SendData(Yend & 0xff);
|
||||||
|
SendData((Yend>>8) & 0x03);
|
||||||
|
|
||||||
|
SendCommand(0x4E); // SET_RAM_X_ADDRESS_COUNTER
|
||||||
|
SendData(Xstart & 0xFF);
|
||||||
|
|
||||||
|
SendCommand(0x4F); // SET_RAM_Y_ADDRESS_COUNTER
|
||||||
|
SendData(Ystart & 0xFF);
|
||||||
|
SendData((Ystart >> 8) & 0xFF);
|
||||||
|
|
||||||
|
SendCommand(0x24);
|
||||||
|
for (i = 0; i < IMAGE_COUNTER; i++)
|
||||||
|
{
|
||||||
|
SendData(Image[i]);
|
||||||
|
}
|
||||||
|
if(isGC)
|
||||||
|
Load_LUT(1);
|
||||||
|
else
|
||||||
|
Load_LUT(0);
|
||||||
|
SendCommand(0x20);
|
||||||
|
WaitUntilIdle();
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : set the look-up tables
|
function : set the look-up tables
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Epd::Load_LUT(UBYTE mode) {
|
void Epd::Load_LUT(UBYTE mode) {
|
||||||
UWORD i;
|
UWORD i;
|
||||||
SendCommand(0x32);
|
SendCommand(0x32);
|
||||||
for (i = 0; i < 105; i++) {
|
for (i = 0; i < 105; i++) {
|
||||||
if(mode == 1)
|
if(mode == 1)
|
||||||
SendData(lut_1Gray_GC[i]);
|
SendData(lut_1Gray_GC[i]);
|
||||||
else if(mode == 0)
|
else if(mode == 0)
|
||||||
SendData(lut_1Gray_DU[i]);
|
SendData(lut_1Gray_A2[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -281,28 +346,27 @@ parameter:
|
||||||
1:clear all
|
1:clear all
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Epd::Clear(UBYTE mode) {
|
void Epd::Clear(UBYTE mode) {
|
||||||
UWORD i;
|
UWORD i;
|
||||||
UWORD IMAGE_COUNTER = width * height / 8;
|
UWORD IMAGE_COUNTER = width * height / 8;
|
||||||
|
|
||||||
SendCommand(0x4E);
|
SendCommand(0x4E);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendCommand(0x4F);
|
SendCommand(0x4F);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
SendData(0x00);
|
SendData(0x00);
|
||||||
|
|
||||||
SendCommand(0x24);
|
|
||||||
for (i = 0; i < IMAGE_COUNTER; i++)
|
|
||||||
{
|
|
||||||
SendData(0xff);
|
|
||||||
}
|
|
||||||
if(mode)
|
|
||||||
Load_LUT(1);
|
|
||||||
else
|
|
||||||
Load_LUT(0);
|
|
||||||
SendCommand(0x20);
|
|
||||||
WaitUntilIdle();
|
|
||||||
|
|
||||||
|
SendCommand(0x24);
|
||||||
|
for (i = 0; i < IMAGE_COUNTER; i++)
|
||||||
|
{
|
||||||
|
SendData(0xff);
|
||||||
|
}
|
||||||
|
if(mode)
|
||||||
|
Load_LUT(1);
|
||||||
|
else
|
||||||
|
Load_LUT(0);
|
||||||
|
SendCommand(0x20);
|
||||||
|
WaitUntilIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -319,7 +383,4 @@ void Epd::Sleep(void) {
|
||||||
SendCommand(0X07); //deep sleep
|
SendCommand(0X07); //deep sleep
|
||||||
SendData(0xA5);
|
SendData(0xA5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* END OF FILE */
|
/* END OF FILE */
|
||||||
|
|
|
@ -47,6 +47,7 @@ public:
|
||||||
void DisplayFrame(const UBYTE *Image);
|
void DisplayFrame(const UBYTE *Image);
|
||||||
void SendCommand(unsigned char command);
|
void SendCommand(unsigned char command);
|
||||||
void DisplayFrame_Partial(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD iwidth, UWORD iheight);
|
void DisplayFrame_Partial(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD iwidth, UWORD iheight);
|
||||||
|
void DisplayFrame_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, bool isGC);
|
||||||
void SendData(unsigned char data);
|
void SendData(unsigned char data);
|
||||||
void Sleep(void);
|
void Sleep(void);
|
||||||
void Clear(UBYTE mode);
|
void Clear(UBYTE mode);
|
||||||
|
|
|
@ -32,51 +32,55 @@
|
||||||
#define COLORED 0
|
#define COLORED 0
|
||||||
#define UNCOLORED 1
|
#define UNCOLORED 1
|
||||||
|
|
||||||
UBYTE image[800];
|
UBYTE image[700];
|
||||||
Paint paint(image, 0, 0); // width should be the multiple of 8
|
Paint paint(image, 0, 0); // width should be the multiple of 8
|
||||||
UDOUBLE time_start_ms;
|
UDOUBLE time_start_ms;
|
||||||
UDOUBLE time_now_s;
|
UDOUBLE time_now_s;
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
// put your setup code here, to run once:
|
// put your setup code here, to run once:
|
||||||
Serial.begin(115200);
|
Serial.begin(115200);
|
||||||
Epd epd;
|
Epd epd;
|
||||||
if (epd.Init() != 0) {
|
if (epd.Init() != 0) {
|
||||||
Serial.print("e-Paper init failed");
|
Serial.print("e-Paper init failed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Serial.print("3.7inch e-paper demo\r\n ");
|
Serial.print("3.7inch e-paper demo\r\n ");
|
||||||
Serial.print("e-Paper Clear\r\n ");
|
Serial.print("e-Paper Clear\r\n ");
|
||||||
epd.Clear(1);
|
epd.Clear(1);
|
||||||
Serial.print("draw image\r\n ");
|
Serial.print("draw image\r\n ");
|
||||||
epd.DisplayFrame(IMAGE_DATA);
|
epd.DisplayFrame(IMAGE_DATA); // Set base image
|
||||||
delay(4000);
|
delay(3000);
|
||||||
epd.Clear(0);
|
|
||||||
|
paint.SetWidth(40);
|
||||||
UBYTE i;
|
paint.SetHeight(120);
|
||||||
time_start_ms = millis();
|
|
||||||
for(i=0; i<10; i++) {
|
|
||||||
time_now_s = (millis() - time_start_ms) / 1000;
|
|
||||||
char time_string[] = {'0', '0', ':', '0', '0', '\0'};
|
|
||||||
time_string[0] = time_now_s / 60 / 10 + '0';
|
|
||||||
time_string[1] = time_now_s / 60 % 10 + '0';
|
|
||||||
time_string[3] = time_now_s % 60 / 10 + '0';
|
|
||||||
time_string[4] = time_now_s % 60 % 10 + '0';
|
|
||||||
paint.SetWidth(48);
|
|
||||||
paint.SetHeight(100);
|
|
||||||
paint.SetRotate(ROTATE_270);
|
paint.SetRotate(ROTATE_270);
|
||||||
paint.Clear(UNCOLORED);
|
paint.Clear(UNCOLORED);
|
||||||
paint.DrawStringAt(20, 10, time_string, &Font16, COLORED);
|
|
||||||
Serial.print("refresh------\r\n ");
|
UBYTE i;
|
||||||
epd.DisplayFrame_Partial(paint.GetImage(), 20, 100, 48, 100);
|
time_start_ms = millis();
|
||||||
}
|
for(i=0; i<10; i++) {
|
||||||
|
time_now_s = (millis() - time_start_ms) / 1000;
|
||||||
Serial.print("clear and sleep......\r\n ");
|
char time_string[] = {'0', '0', ':', '0', '0', '\0'};
|
||||||
epd.Clear(1);
|
time_string[0] = time_now_s / 60 / 10 + '0';
|
||||||
epd.Sleep();
|
time_string[1] = time_now_s / 60 % 10 + '0';
|
||||||
|
time_string[3] = time_now_s % 60 / 10 + '0';
|
||||||
|
time_string[4] = time_now_s % 60 % 10 + '0';
|
||||||
|
|
||||||
|
paint.Clear(UNCOLORED);
|
||||||
|
paint.DrawStringAt(20, 10, time_string, &Font16, COLORED);
|
||||||
|
Serial.print("refresh------\r\n ");
|
||||||
|
// epd.DisplayFrame_Partial(paint.GetImage(), 20, 100, 40, 120); // Width must be a multiple of 8
|
||||||
|
epd.DisplayFrame_Part(paint.GetImage(), 40, 30, 80, 140, false); // Xstart must be a multiple of 8
|
||||||
|
}
|
||||||
|
|
||||||
|
Serial.print("clear and sleep......\r\n ");
|
||||||
|
epd.Init();
|
||||||
|
epd.Clear(1);
|
||||||
|
epd.Sleep();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
// put your main code here, to run repeatedly:
|
// put your main code here, to run repeatedly:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,62 +33,62 @@
|
||||||
|
|
||||||
static const UBYTE lut_4Gray_GC[] =
|
static const UBYTE lut_4Gray_GC[] =
|
||||||
{
|
{
|
||||||
0x2A,0x06,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x2A,0x06,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x28,0x06,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
0x28,0x06,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
||||||
0x20,0x06,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x20,0x06,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x14,0x06,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
0x14,0x06,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x08,0x08,0x02,//6
|
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x08,0x08,0x02,//6
|
||||||
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x02,0x02,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UBYTE lut_1Gray_GC[] =
|
static const UBYTE lut_1Gray_GC[] =
|
||||||
{
|
{
|
||||||
0x2A,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x2A,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x05,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
0x05,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
|
||||||
0x2A,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x2A,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x05,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
0x05,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x02,0x03,0x0A,0x00,0x02,0x06,0x0A,0x05,0x00,//6
|
0x00,0x02,0x03,0x0A,0x00,0x02,0x06,0x0A,0x05,0x00,//6
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//8
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//10
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UBYTE lut_1Gray_DU[] =
|
static const UBYTE lut_1Gray_DU[] =
|
||||||
{
|
{
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
|
||||||
0x01,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x01,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x0A,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
0x0A,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//5
|
||||||
0x00,0x00,0x05,0x05,0x00,0x05,0x03,0x05,0x05,0x00,
|
0x00,0x00,0x05,0x05,0x00,0x05,0x03,0x05,0x05,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
static const UBYTE lut_1Gray_A2[] =
|
static const UBYTE lut_1Gray_A2[] =
|
||||||
{
|
{
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //1
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //1
|
||||||
0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //2
|
0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //2
|
||||||
0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //3
|
0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //3
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //4
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //4
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //5
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //5
|
||||||
0x00,0x00,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00, //6
|
0x00,0x00,0x03,0x05,0x00,0x00,0x00,0x00,0x00,0x00, //6
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //7
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //7
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //8
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //8
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //9
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //9
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //10
|
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //10
|
||||||
0x22,0x22,0x22,0x22,0x22
|
0x22,0x22,0x22,0x22,0x22
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -150,8 +150,7 @@ void EPD_3IN7_Load_LUT(UBYTE lut)
|
||||||
{
|
{
|
||||||
UWORD i;
|
UWORD i;
|
||||||
EPD_3IN7_SendCommand(0x32);
|
EPD_3IN7_SendCommand(0x32);
|
||||||
for (i = 0; i < 105; i++)
|
for (i = 0; i < 105; i++) {
|
||||||
{
|
|
||||||
if(lut == 0)
|
if(lut == 0)
|
||||||
EPD_3IN7_SendData(lut_4Gray_GC[i]);
|
EPD_3IN7_SendData(lut_4Gray_GC[i]);
|
||||||
else if(lut == 1)
|
else if(lut == 1)
|
||||||
|
@ -376,26 +375,25 @@ parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_3IN7_1Gray_Clear(void)
|
void EPD_3IN7_1Gray_Clear(void)
|
||||||
{
|
{
|
||||||
UWORD i;
|
UWORD i;
|
||||||
UWORD IMAGE_COUNTER = EPD_3IN7_WIDTH * EPD_3IN7_HEIGHT / 8;
|
UWORD IMAGE_COUNTER = EPD_3IN7_WIDTH * EPD_3IN7_HEIGHT / 8;
|
||||||
|
|
||||||
EPD_3IN7_SendCommand(0x4E);
|
EPD_3IN7_SendCommand(0x4E);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendCommand(0x4F);
|
EPD_3IN7_SendCommand(0x4F);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
|
|
||||||
EPD_3IN7_SendCommand(0x24);
|
EPD_3IN7_SendCommand(0x24);
|
||||||
for (i = 0; i < IMAGE_COUNTER; i++)
|
for (i = 0; i < IMAGE_COUNTER; i++) {
|
||||||
{
|
EPD_3IN7_SendData(0xff);
|
||||||
EPD_3IN7_SendData(0xff);
|
}
|
||||||
}
|
|
||||||
|
EPD_3IN7_Load_LUT(2);
|
||||||
EPD_3IN7_Load_LUT(2);
|
|
||||||
|
EPD_3IN7_SendCommand(0x20);
|
||||||
EPD_3IN7_SendCommand(0x20);
|
EPD_3IN7_ReadBusy_HIGH();
|
||||||
EPD_3IN7_ReadBusy_HIGH();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -518,33 +516,30 @@ parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_3IN7_1Gray_Display(const UBYTE *Image)
|
void EPD_3IN7_1Gray_Display(const UBYTE *Image)
|
||||||
{
|
{
|
||||||
UWORD i;
|
UWORD i;
|
||||||
UWORD IMAGE_COUNTER = EPD_3IN7_WIDTH * EPD_3IN7_HEIGHT / 8;
|
UWORD IMAGE_COUNTER = EPD_3IN7_WIDTH * EPD_3IN7_HEIGHT / 8;
|
||||||
|
|
||||||
EPD_3IN7_SendCommand(0x4E);
|
EPD_3IN7_SendCommand(0x4E);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendCommand(0x4F);
|
EPD_3IN7_SendCommand(0x4F);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
EPD_3IN7_SendData(0x00);
|
EPD_3IN7_SendData(0x00);
|
||||||
|
|
||||||
EPD_3IN7_SendCommand(0x24);
|
EPD_3IN7_SendCommand(0x24);
|
||||||
for (i = 0; i < IMAGE_COUNTER; i++)
|
for (i = 0; i < IMAGE_COUNTER; i++) {
|
||||||
{
|
EPD_3IN7_SendData(Image[i]);
|
||||||
EPD_3IN7_SendData(Image[i]);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_3IN7_Load_LUT(2);
|
EPD_3IN7_Load_LUT(2);
|
||||||
EPD_3IN7_SendCommand(0x20);
|
EPD_3IN7_SendCommand(0x20);
|
||||||
EPD_3IN7_ReadBusy_HIGH();
|
EPD_3IN7_ReadBusy_HIGH();
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Sends part the image buffer in RAM to e-Paper and displays
|
function : Sends part the image buffer in RAM to e-Paper and displays
|
||||||
notes:
|
notes:
|
||||||
You can send a part of data to e-Paper,But this function is not recommended
|
Xstart must be a multiple of 8
|
||||||
1.Xsize must be as big as EPD_3IN7_WIDTH
|
|
||||||
2.Ypointer must be start at 0
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_3IN7_1Gray_Display_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
|
void EPD_3IN7_1Gray_Display_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
|
||||||
{
|
{
|
||||||
|
@ -574,9 +569,8 @@ void EPD_3IN7_1Gray_Display_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart,
|
||||||
EPD_3IN7_SendData((Ystart >> 8) & 0xFF);
|
EPD_3IN7_SendData((Ystart >> 8) & 0xFF);
|
||||||
|
|
||||||
EPD_3IN7_SendCommand(0x24);
|
EPD_3IN7_SendCommand(0x24);
|
||||||
for (i = 0; i < IMAGE_COUNTER; i++)
|
for (i = 0; i < IMAGE_COUNTER; i++) {
|
||||||
{
|
EPD_3IN7_SendData(Image[i]);
|
||||||
EPD_3IN7_SendData(Image[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EPD_3IN7_Load_LUT(3);
|
EPD_3IN7_Load_LUT(3);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue