3.7inch arduino example added a partial refresh example

This commit is contained in:
SSYYL 2022-01-10 16:23:53 +08:00
parent c6a0591118
commit 1a3a24a978
3 changed files with 22 additions and 10 deletions

View file

@ -223,7 +223,7 @@ void Epd::Reset(void) {
/******************************************************************************
function : Display
******************************************************************************/
void Epd::DisplayFrame(const UBYTE *Image) {
void Epd::DisplayFrame(const UBYTE *Image, bool isBase) {
UWORD i;
UWORD IMAGE_COUNTER = width * height / 8;
@ -238,9 +238,11 @@ void Epd::DisplayFrame(const UBYTE *Image) {
for (i = 0; i < IMAGE_COUNTER; i++) {
SendData(pgm_read_byte(&Image[i]));
}
SendCommand(0x26);
for (i = 0; i < IMAGE_COUNTER; i++) {
SendData(pgm_read_byte(&Image[i]));
if(isBase) {
SendCommand(0x26);
for (i = 0; i < IMAGE_COUNTER; i++) {
SendData(pgm_read_byte(&Image[i]));
}
}
Load_LUT(1);
@ -320,8 +322,11 @@ void Epd::DisplayFrame_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWOR
Load_LUT(1);
else
Load_LUT(0);
SendCommand(0x20);
WaitUntilIdle();
}
void Epd::TurnOnDisplay(void) {
SendCommand(0x20);
WaitUntilIdle();
}
/******************************************************************************

View file

@ -44,10 +44,11 @@ public:
int Init(void);
void WaitUntilIdle(void);
void Reset(void);
void DisplayFrame(const UBYTE *Image);
void DisplayFrame(const UBYTE *Image, bool isBase);
void SendCommand(unsigned char command);
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 TurnOnDisplay(void);
void SendData(unsigned char data);
void Sleep(void);
void Clear(UBYTE mode);

View file

@ -49,7 +49,7 @@ void setup() {
Serial.print("e-Paper Clear\r\n ");
epd.Clear(1);
Serial.print("draw image\r\n ");
epd.DisplayFrame(IMAGE_DATA); // Set base image
epd.DisplayFrame(IMAGE_DATA, true); // Set base image
delay(3000);
paint.SetWidth(40);
@ -59,7 +59,7 @@ void setup() {
UBYTE i;
time_start_ms = millis();
for(i=0; i<10; i++) {
for(i=0; i<5; 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';
@ -71,7 +71,13 @@ void setup() {
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
/* Writes new data to RAM */
epd.DisplayFrame_Part(paint.GetImage(), 40+i*40, 30, 80+i*40, 140, false); // Xstart must be a multiple of 8
/* Displays and toggles the RAM currently in use */
epd.TurnOnDisplay();
/* Writes the last data to another RAM */
epd.DisplayFrame_Part(paint.GetImage(), 40+i*40, 30, 80+i*40, 140, false); // Xstart must be a multiple of 8
delay(500);
}
Serial.print("clear and sleep......\r\n ");