Added fast refresh and improved partial refresh effect to the 4.2inch e-Paper
This commit is contained in:
parent
15df676682
commit
d6e11eaae6
18 changed files with 4070 additions and 1871 deletions
|
@ -39,7 +39,6 @@ Epd::Epd() {
|
||||||
height = EPD_HEIGHT;
|
height = EPD_HEIGHT;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int Epd::Init(void) {
|
int Epd::Init(void) {
|
||||||
/* this calls the peripheral hardware interface, see epdif */
|
/* this calls the peripheral hardware interface, see epdif */
|
||||||
if (IfInit() != 0) {
|
if (IfInit() != 0) {
|
||||||
|
@ -47,23 +46,38 @@ int Epd::Init(void) {
|
||||||
}
|
}
|
||||||
/* EPD hardware init start */
|
/* EPD hardware init start */
|
||||||
Reset();
|
Reset();
|
||||||
SendCommand(POWER_SETTING);
|
SendCommand(0x01);
|
||||||
SendData(0x03); // VDS_EN, VDG_EN
|
SendData(0x03); // VDS_EN, VDG_EN
|
||||||
SendData(0x00); // VCOM_HV, VGHL_LV[1], VGHL_LV[0]
|
SendData(0x00); // VCOM_HV, VGHL_LV[1], VGHL_LV[0]
|
||||||
SendData(0x2b); // VDH
|
SendData(0x2b); // VDH
|
||||||
SendData(0x2b); // VDL
|
SendData(0x2b); // VDL
|
||||||
SendData(0xff); // VDHR
|
|
||||||
SendCommand(BOOSTER_SOFT_START);
|
SendCommand(0x06);
|
||||||
SendData(0x17);
|
SendData(0x17);
|
||||||
SendData(0x17);
|
SendData(0x17);
|
||||||
SendData(0x17); //07 0f 17 1f 27 2F 37 2f
|
SendData(0x17); //07 0f 17 1f 27 2F 37 2f
|
||||||
SendCommand(POWER_ON);
|
SendCommand(0x04);
|
||||||
WaitUntilIdle();
|
WaitUntilIdle();
|
||||||
SendCommand(PANEL_SETTING);
|
SendCommand(0x00);
|
||||||
SendData(0xbf); // KW-BF KWR-AF BWROTP 0f
|
SendData(0xbf); // KW-BF KWR-AF BWROTP 0f
|
||||||
SendData(0x0b);
|
|
||||||
SendCommand(PLL_CONTROL);
|
SendCommand(0x30);
|
||||||
SendData(0x3c); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
SendData(0x3c); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
|
||||||
|
SendCommand(0x61); // resolution setting
|
||||||
|
SendData(0x01);
|
||||||
|
SendData(0x90); //128
|
||||||
|
SendData(0x01); //
|
||||||
|
SendData(0x2c);
|
||||||
|
|
||||||
|
SendCommand(0x82); // vcom_DC setting
|
||||||
|
SendData(0x12);
|
||||||
|
|
||||||
|
SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
||||||
|
SendData(0x97); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||||
|
|
||||||
|
SetLut();
|
||||||
|
|
||||||
/* EPD hardware init end */
|
/* EPD hardware init end */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -304,27 +318,27 @@ void Epd::Set_4GrayDisplay(const char *Image, int x, int y, int w, int l)
|
||||||
void Epd::SetLut(void) {
|
void Epd::SetLut(void) {
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
SendCommand(LUT_FOR_VCOM); //vcom
|
SendCommand(LUT_FOR_VCOM); //vcom
|
||||||
for(count = 0; count < 44; count++) {
|
for(count = 0; count < 36; count++) {
|
||||||
SendData(lut_vcom0[count]);
|
SendData(lut_vcom0[count]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendCommand(LUT_WHITE_TO_WHITE); //ww --
|
SendCommand(LUT_WHITE_TO_WHITE); //ww --
|
||||||
for(count = 0; count < 42; count++) {
|
for(count = 0; count < 36; count++) {
|
||||||
SendData(lut_ww[count]);
|
SendData(lut_ww[count]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendCommand(LUT_BLACK_TO_WHITE); //bw r
|
SendCommand(LUT_BLACK_TO_WHITE); //bw r
|
||||||
for(count = 0; count < 42; count++) {
|
for(count = 0; count < 36; count++) {
|
||||||
SendData(lut_bw[count]);
|
SendData(lut_bw[count]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendCommand(LUT_WHITE_TO_BLACK); //wb w
|
SendCommand(LUT_WHITE_TO_BLACK); //wb w
|
||||||
for(count = 0; count < 42; count++) {
|
for(count = 0; count < 36; count++) {
|
||||||
SendData(lut_bb[count]);
|
SendData(lut_bb[count]);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendCommand(LUT_BLACK_TO_BLACK); //bb b
|
SendCommand(LUT_BLACK_TO_BLACK); //bb b
|
||||||
for(count = 0; count < 42; count++) {
|
for(count = 0; count < 36; count++) {
|
||||||
SendData(lut_wb[count]);
|
SendData(lut_wb[count]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,9 +401,7 @@ void Epd::DisplayFrame(const unsigned char* frame_buffer) {
|
||||||
DelayMs(2);
|
DelayMs(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetLut();
|
SendCommand(0x12);
|
||||||
|
|
||||||
SendCommand(DISPLAY_REFRESH);
|
|
||||||
DelayMs(100);
|
DelayMs(100);
|
||||||
WaitUntilIdle();
|
WaitUntilIdle();
|
||||||
}
|
}
|
||||||
|
@ -457,55 +469,56 @@ void Epd::Sleep() {
|
||||||
|
|
||||||
const unsigned char lut_vcom0[] =
|
const unsigned char lut_vcom0[] =
|
||||||
{
|
{
|
||||||
0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
const unsigned char lut_ww[] ={
|
const unsigned char lut_ww[] ={
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
const unsigned char lut_bw[] ={
|
const unsigned char lut_bw[] ={
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char lut_bb[] ={
|
const unsigned char lut_bb[] ={
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char lut_wb[] ={
|
const unsigned char lut_wb[] ={
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x20, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x10, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include "EPD_Test.h"
|
#include "EPD_Test.h"
|
||||||
#include "EPD_4in2.h"
|
#include "EPD_4in2.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
int EPD_4in2_test(void)
|
int EPD_4in2_test(void)
|
||||||
{
|
{
|
||||||
|
@ -39,9 +40,14 @@ int EPD_4in2_test(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("e-Paper Init and Clear...\r\n");
|
printf("e-Paper Init and Clear...\r\n");
|
||||||
EPD_4IN2_Init();
|
EPD_4IN2_Init_Fast();
|
||||||
|
|
||||||
|
struct timespec start={0,0}, finish={0,0};
|
||||||
|
clock_gettime(CLOCK_REALTIME,&start);
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Clear();
|
||||||
DEV_Delay_ms(500);
|
DEV_Delay_ms(500);
|
||||||
|
clock_gettime(CLOCK_REALTIME,&finish);
|
||||||
|
Debug("%ld S\r\n",finish.tv_sec-start.tv_sec);
|
||||||
|
|
||||||
//Create a new image cache
|
//Create a new image cache
|
||||||
UBYTE *BlackImage;
|
UBYTE *BlackImage;
|
||||||
|
@ -56,6 +62,9 @@ int EPD_4in2_test(void)
|
||||||
|
|
||||||
|
|
||||||
#if 1 // show bmp
|
#if 1 // show bmp
|
||||||
|
|
||||||
|
EPD_4IN2_Init_Fast();
|
||||||
|
|
||||||
printf("show window BMP-----------------\r\n");
|
printf("show window BMP-----------------\r\n");
|
||||||
Paint_SelectImage(BlackImage);
|
Paint_SelectImage(BlackImage);
|
||||||
Paint_Clear(WHITE);
|
Paint_Clear(WHITE);
|
||||||
|
@ -68,9 +77,10 @@ int EPD_4in2_test(void)
|
||||||
GUI_ReadBmp("./pic/4in2.bmp", 0, 0);
|
GUI_ReadBmp("./pic/4in2.bmp", 0, 0);
|
||||||
EPD_4IN2_Display(BlackImage);
|
EPD_4IN2_Display(BlackImage);
|
||||||
DEV_Delay_ms(2000);
|
DEV_Delay_ms(2000);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if 0 // show image for array
|
#if 1 // show image for array
|
||||||
printf("show image for array\r\n");
|
printf("show image for array\r\n");
|
||||||
Paint_SelectImage(BlackImage);
|
Paint_SelectImage(BlackImage);
|
||||||
Paint_Clear(WHITE);
|
Paint_Clear(WHITE);
|
||||||
|
@ -102,15 +112,18 @@ int EPD_4in2_test(void)
|
||||||
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
||||||
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
||||||
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
||||||
Paint_DrawString_CN(130, 0, " ÄãºÃabc", &Font12CN, BLACK, WHITE);
|
Paint_DrawString_CN(130, 0, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, BLACK, WHITE);
|
||||||
Paint_DrawString_CN(130, 20, "΢ѩµç×Ó", &Font24CN, WHITE, BLACK);
|
Paint_DrawString_CN(130, 20, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, WHITE, BLACK);
|
||||||
|
|
||||||
printf("EPD_Display\r\n");
|
printf("EPD_Display\r\n");
|
||||||
EPD_4IN2_Display(BlackImage);
|
EPD_4IN2_Display(BlackImage);
|
||||||
DEV_Delay_ms(2000);
|
DEV_Delay_ms(2000);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
printf("Support for partial refresh, but the refresh effect is not good, but it is not recommended\r\n");
|
|
||||||
#if 0
|
#if 0
|
||||||
|
printf("Support for partial refresh, but the refresh effect is not good, but it is not recommended\r\n");
|
||||||
|
EPD_4IN2_Init_Partial();
|
||||||
printf("Partial refresh\r\n");
|
printf("Partial refresh\r\n");
|
||||||
PAINT_TIME sPaint_time;
|
PAINT_TIME sPaint_time;
|
||||||
sPaint_time.Hour = 12;
|
sPaint_time.Hour = 12;
|
||||||
|
@ -142,6 +155,8 @@ int EPD_4in2_test(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#if 1
|
||||||
|
EPD_4IN2_Init_Fast();
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Clear();
|
||||||
EPD_4IN2_Init_4Gray();
|
EPD_4IN2_Init_4Gray();
|
||||||
printf("show Gray------------------------\r\n");
|
printf("show Gray------------------------\r\n");
|
||||||
|
@ -155,7 +170,7 @@ int EPD_4in2_test(void)
|
||||||
Paint_NewImage(BlackImage, EPD_4IN2_WIDTH, EPD_4IN2_HEIGHT, 0, WHITE);
|
Paint_NewImage(BlackImage, EPD_4IN2_WIDTH, EPD_4IN2_HEIGHT, 0, WHITE);
|
||||||
Paint_SetScale(4);
|
Paint_SetScale(4);
|
||||||
Paint_Clear(WHITE);
|
Paint_Clear(WHITE);
|
||||||
#if 0
|
|
||||||
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
|
Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
|
||||||
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
|
Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT);
|
||||||
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
|
Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT);
|
||||||
|
@ -171,20 +186,19 @@ int EPD_4in2_test(void)
|
||||||
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
||||||
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
||||||
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
||||||
Paint_DrawString_CN(140, 0, "ÄãºÃabc", &Font12CN, GRAY1, GRAY4);
|
Paint_DrawString_CN(140, 0, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY1, GRAY4);
|
||||||
Paint_DrawString_CN(140, 40, "ÄãºÃabc", &Font12CN, GRAY2, GRAY3);
|
Paint_DrawString_CN(140, 40, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY2, GRAY3);
|
||||||
Paint_DrawString_CN(140, 80, "ÄãºÃabc", &Font12CN, GRAY3, GRAY2);
|
Paint_DrawString_CN(140, 80, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY3, GRAY2);
|
||||||
Paint_DrawString_CN(140, 120, "ÄãºÃabc", &Font12CN, GRAY4, GRAY1);
|
Paint_DrawString_CN(140, 120, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY4, GRAY1);
|
||||||
|
|
||||||
Paint_DrawString_CN(220, 0, "΢ѩµç×Ó", &Font24CN, GRAY1, GRAY4);
|
Paint_DrawString_CN(220, 0, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY1, GRAY4);
|
||||||
Paint_DrawString_CN(220, 40, "΢ѩµç×Ó", &Font24CN, GRAY2, GRAY3);
|
Paint_DrawString_CN(220, 40, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY2, GRAY3);
|
||||||
Paint_DrawString_CN(220, 80, "΢ѩµç×Ó", &Font24CN, GRAY3, GRAY2);
|
Paint_DrawString_CN(220, 80, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY3, GRAY2);
|
||||||
Paint_DrawString_CN(220, 120, "΢ѩµç×Ó", &Font24CN, GRAY4, GRAY1);
|
Paint_DrawString_CN(220, 120, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY4, GRAY1);
|
||||||
|
|
||||||
EPD_4IN2_4GrayDisplay(BlackImage);
|
EPD_4IN2_4GrayDisplay(BlackImage);
|
||||||
DEV_Delay_ms(2000);
|
DEV_Delay_ms(2000);
|
||||||
#endif
|
|
||||||
#if 1
|
|
||||||
Paint_Clear(WHITE);
|
Paint_Clear(WHITE);
|
||||||
EPD_4IN2_4GrayDisplay(gImage_4in2_4Gray1);
|
EPD_4IN2_4GrayDisplay(gImage_4in2_4Gray1);
|
||||||
DEV_Delay_ms(2000);
|
DEV_Delay_ms(2000);
|
||||||
|
@ -198,8 +212,7 @@ int EPD_4in2_test(void)
|
||||||
EPD_4IN2_4GrayDisplay(BlackImage);
|
EPD_4IN2_4GrayDisplay(BlackImage);
|
||||||
DEV_Delay_ms(2000);
|
DEV_Delay_ms(2000);
|
||||||
#endif
|
#endif
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Init_Fast();
|
||||||
EPD_4IN2_Init();
|
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Clear();
|
||||||
printf("Goto Sleep...\r\n");
|
printf("Goto Sleep...\r\n");
|
||||||
EPD_4IN2_Sleep();
|
EPD_4IN2_Sleep();
|
||||||
|
|
|
@ -44,7 +44,7 @@ int main(void)
|
||||||
|
|
||||||
// EPD_2in13_test();
|
// EPD_2in13_test();
|
||||||
// EPD_2in13_V2_test();
|
// EPD_2in13_V2_test();
|
||||||
EPD_2in13_V3_test();
|
// EPD_2in13_V3_test();
|
||||||
// EPD_2in13bc_test();
|
// EPD_2in13bc_test();
|
||||||
// EPD_2in13b_V3_test();
|
// EPD_2in13b_V3_test();
|
||||||
// EPD_2in13d_test();
|
// EPD_2in13d_test();
|
||||||
|
@ -53,7 +53,7 @@ int main(void)
|
||||||
|
|
||||||
// EPD_4in01f_test();
|
// EPD_4in01f_test();
|
||||||
|
|
||||||
// EPD_4in2_test();
|
EPD_4in2_test();
|
||||||
// EPD_4in2_V2_test();
|
// EPD_4in2_V2_test();
|
||||||
// EPD_4in2bc_test();
|
// EPD_4in2bc_test();
|
||||||
// EPD_4in2b_V2_test();
|
// EPD_4in2b_V2_test();
|
||||||
|
|
|
@ -113,173 +113,184 @@
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
static const unsigned char EPD_4IN2_lut_vcom0[] = {
|
static const unsigned char EPD_4IN2_lut_vcom0[] = {
|
||||||
0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_ww[] = {
|
static const unsigned char EPD_4IN2_lut_ww[] = {
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_bw[] = {
|
static const unsigned char EPD_4IN2_lut_bw[] = {
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_wb[] = {
|
static const unsigned char EPD_4IN2_lut_wb[] = {
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_bb[] = {
|
static const unsigned char EPD_4IN2_lut_bb[] = {
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x20, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x10, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
/******************************partial screen update LUT*********************************/
|
/******************************partial screen update LUT*********************************/
|
||||||
const unsigned char EPD_4IN2_Partial_lut_vcom1[] ={
|
const unsigned char EPD_4IN2_Partial_lut_vcom1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_ww1[] ={
|
const unsigned char EPD_4IN2_Partial_lut_ww1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_bw1[] ={
|
const unsigned char EPD_4IN2_Partial_lut_bw1[] ={
|
||||||
0x80 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x20, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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,
|
||||||
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_wb1[] ={
|
const unsigned char EPD_4IN2_Partial_lut_wb1[] ={
|
||||||
0x40 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x10, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00, };
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_bb1[] ={
|
const unsigned char EPD_4IN2_Partial_lut_bb1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01,0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00, };
|
0x00, 0x00,0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/******************************gray*********************************/
|
/******************************gray*********************************/
|
||||||
//0~3 gray
|
//0~3 gray
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_vcom[] =
|
const unsigned char EPD_4IN2_4Gray_lut_vcom[] =
|
||||||
{
|
{
|
||||||
0x00 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x00 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x60 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x60 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x13 ,0x0A ,0x01 ,0x00 ,0x01,
|
0x00 ,0x13 ,0x0A ,0x01 ,0x00 ,0x01,
|
||||||
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
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00
|
||||||
|
|
||||||
};
|
};
|
||||||
//R21
|
//R21
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_ww[] ={
|
const unsigned char EPD_4IN2_4Gray_lut_ww[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x10 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x10 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
0xA0 ,0x13 ,0x01 ,0x00 ,0x00 ,0x01,
|
0xA0 ,0x13 ,0x01 ,0x00 ,0x00 ,0x01,
|
||||||
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,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R22H r
|
//R22H r
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_bw[] ={
|
const unsigned char EPD_4IN2_4Gray_lut_bw[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
0x99 ,0x0C ,0x01 ,0x03 ,0x04 ,0x01,
|
0x99 ,0x0C ,0x01 ,0x03 ,0x04 ,0x01,
|
||||||
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,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R23H w
|
//R23H w
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_wb[] ={
|
const unsigned char EPD_4IN2_4Gray_lut_wb[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
0x99 ,0x0B ,0x04 ,0x04 ,0x01 ,0x01,
|
0x99 ,0x0B ,0x04 ,0x04 ,0x01 ,0x01,
|
||||||
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,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R24H b
|
//R24H b
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_bb[] ={
|
const unsigned char EPD_4IN2_4Gray_lut_bb[] ={
|
||||||
0x80 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x80 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x20 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x20 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
0x50 ,0x13 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x50 ,0x13 ,0x01 ,0x00 ,0x00 ,0x01,
|
||||||
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,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Software reset
|
function : Software reset
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static void EPD_4IN2_Reset(void)
|
static void EPD_4IN2_Reset(void)
|
||||||
{
|
{
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
|
||||||
DEV_Delay_ms(20);
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -338,35 +349,6 @@ static void EPD_4IN2_TurnOnDisplay(void)
|
||||||
function : set the look-up tables
|
function : set the look-up tables
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static void EPD_4IN2_SetLut(void)
|
|
||||||
{
|
|
||||||
UWORD count;
|
|
||||||
EPD_4IN2_SendCommand(0x20); //g vcom
|
|
||||||
for(count=0; count<44; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x21);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x22);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x23);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x24);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void EPD_4IN2_Partial_SetLut(void)
|
static void EPD_4IN2_Partial_SetLut(void)
|
||||||
{
|
{
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
|
@ -391,6 +373,30 @@ static void EPD_4IN2_Partial_SetLut(void)
|
||||||
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bb1[count]);}
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bb1[count]);}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void EPD_4IN2_SetLut(void)
|
||||||
|
{
|
||||||
|
unsigned int count;
|
||||||
|
EPD_4IN2_SendCommand(0x20);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x21);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x22);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x23);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x24);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);}
|
||||||
|
}
|
||||||
|
|
||||||
//LUT download
|
//LUT download
|
||||||
static void EPD_4IN2_4Gray_lut(void)
|
static void EPD_4IN2_4Gray_lut(void)
|
||||||
{
|
{
|
||||||
|
@ -425,7 +431,8 @@ static void EPD_4IN2_4Gray_lut(void)
|
||||||
function : Initialize the e-Paper register
|
function : Initialize the e-Paper register
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_4IN2_Init(void)
|
|
||||||
|
void EPD_4IN2_Init_Partial(void)
|
||||||
{
|
{
|
||||||
EPD_4IN2_Reset();
|
EPD_4IN2_Reset();
|
||||||
|
|
||||||
|
@ -445,7 +452,6 @@ void EPD_4IN2_Init(void)
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x00); // panel setting
|
EPD_4IN2_SendCommand(0x00); // panel setting
|
||||||
EPD_4IN2_SendData(0xbf); // KW-BF KWR-AF BWROTP 0f BWOTP 1f
|
EPD_4IN2_SendData(0xbf); // KW-BF KWR-AF BWROTP 0f BWOTP 1f
|
||||||
EPD_4IN2_SendData(0x0d);
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x30); // PLL setting
|
EPD_4IN2_SendCommand(0x30); // PLL setting
|
||||||
EPD_4IN2_SendData(0x3C); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
EPD_4IN2_SendData(0x3C); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
@ -457,12 +463,54 @@ void EPD_4IN2_Init(void)
|
||||||
EPD_4IN2_SendData(0x2c);
|
EPD_4IN2_SendData(0x2c);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
|
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
|
||||||
EPD_4IN2_SendData(0x28);
|
EPD_4IN2_SendData(0x12);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
EPD_4IN2_SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
||||||
EPD_4IN2_SendData(0x97); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
EPD_4IN2_SendData(0x07); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||||
|
|
||||||
|
EPD_4IN2_Partial_SetLut();
|
||||||
|
}
|
||||||
|
|
||||||
|
//UC8176C
|
||||||
|
void EPD_4IN2_Init_Fast(void)
|
||||||
|
{
|
||||||
|
EPD_4IN2_Reset();
|
||||||
|
EPD_4IN2_SendCommand(0x01); //POWER SETTING
|
||||||
|
EPD_4IN2_SendData (0x03);
|
||||||
|
EPD_4IN2_SendData (0x00);
|
||||||
|
EPD_4IN2_SendData (0x2b);
|
||||||
|
EPD_4IN2_SendData (0x2b);
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x06); //boost soft start
|
||||||
|
EPD_4IN2_SendData (0x17); //A
|
||||||
|
EPD_4IN2_SendData (0x17); //B
|
||||||
|
EPD_4IN2_SendData (0x17); //C
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x04);
|
||||||
|
EPD_4IN2_ReadBusy();
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x00); //panel setting
|
||||||
|
EPD_4IN2_SendData(0xbf); //KW-bf KWR-2F BWROTP 0f BWOTP 1f
|
||||||
|
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x30);
|
||||||
|
EPD_4IN2_SendData (0x3c); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x61); //resolution setting
|
||||||
|
EPD_4IN2_SendData (0x01);
|
||||||
|
EPD_4IN2_SendData (0x90); //400
|
||||||
|
EPD_4IN2_SendData (0x01); //300
|
||||||
|
EPD_4IN2_SendData (0x2c);
|
||||||
|
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x82); //vcom_DC setting
|
||||||
|
EPD_4IN2_SendData (0x12);
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0X50);
|
||||||
|
EPD_4IN2_SendData(0x97);
|
||||||
|
|
||||||
EPD_4IN2_SetLut();
|
EPD_4IN2_SetLut();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EPD_4IN2_Init_4Gray(void)
|
void EPD_4IN2_Init_4Gray(void)
|
||||||
|
@ -524,8 +572,9 @@ void EPD_4IN2_Clear(void)
|
||||||
EPD_4IN2_SendData(0xFF);
|
EPD_4IN2_SendData(0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
||||||
DEV_Delay_ms(10);
|
DEV_Delay_ms(1);
|
||||||
EPD_4IN2_TurnOnDisplay();
|
EPD_4IN2_TurnOnDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,6 +588,13 @@ void EPD_4IN2_Display(UBYTE *Image)
|
||||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||||
Height = EPD_4IN2_HEIGHT;
|
Height = EPD_4IN2_HEIGHT;
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x10);
|
||||||
|
for (UWORD j = 0; j < Height; j++) {
|
||||||
|
for (UWORD i = 0; i < Width; i++) {
|
||||||
|
EPD_4IN2_SendData(0x00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x13);
|
EPD_4IN2_SendCommand(0x13);
|
||||||
for (UWORD j = 0; j < Height; j++) {
|
for (UWORD j = 0; j < Height; j++) {
|
||||||
for (UWORD i = 0; i < Width; i++) {
|
for (UWORD i = 0; i < Width; i++) {
|
||||||
|
@ -546,27 +602,23 @@ void EPD_4IN2_Display(UBYTE *Image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
||||||
|
DEV_Delay_ms(10);
|
||||||
EPD_4IN2_TurnOnDisplay();
|
EPD_4IN2_TurnOnDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end, UBYTE *Image)
|
void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end, UBYTE *Image)
|
||||||
{
|
{
|
||||||
UWORD Width, Height;
|
UWORD Width, Height;
|
||||||
|
static UBYTE DATA[EPD_4IN2_WIDTH * EPD_4IN2_HEIGHT / 8] = {0x00};
|
||||||
|
|
||||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||||
Height = EPD_4IN2_HEIGHT;
|
Height = EPD_4IN2_HEIGHT;
|
||||||
|
|
||||||
X_start = (X_start % 8 == 0)? (X_start): (X_start/8*8+8);
|
X_start = (X_start % 8 == 0)? (X_start): (X_start/8*8+8);
|
||||||
X_end = (X_end % 8 == 0)? (X_end): (X_end/8*8+8);
|
X_end = (X_end % 8 == 0)? (X_end): (X_end/8*8+8);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0X50);
|
|
||||||
EPD_4IN2_SendData(0xf7);
|
|
||||||
DEV_Delay_ms(100);
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x82); //vcom_DC setting
|
|
||||||
EPD_4IN2_SendData (0x08);
|
|
||||||
EPD_4IN2_SendCommand(0X50);
|
|
||||||
EPD_4IN2_SendData(0x47);
|
|
||||||
EPD_4IN2_Partial_SetLut();
|
|
||||||
EPD_4IN2_SendCommand(0x91); //This command makes the display enter partial mode
|
EPD_4IN2_SendCommand(0x91); //This command makes the display enter partial mode
|
||||||
EPD_4IN2_SendCommand(0x90); //resolution setting
|
EPD_4IN2_SendCommand(0x90); //resolution setting
|
||||||
EPD_4IN2_SendData ((X_start)/256);
|
EPD_4IN2_SendData ((X_start)/256);
|
||||||
|
@ -585,13 +637,14 @@ void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end
|
||||||
EPD_4IN2_SendCommand(0x10); //writes Old data to SRAM for programming
|
EPD_4IN2_SendCommand(0x10); //writes Old data to SRAM for programming
|
||||||
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
||||||
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
||||||
EPD_4IN2_SendData(Image[(Y_start + j)*Width + X_start/8 + i]);
|
EPD_4IN2_SendData(DATA[(Y_start + j)*Width + X_start/8 + i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EPD_4IN2_SendCommand(0x13); //writes New data to SRAM.
|
EPD_4IN2_SendCommand(0x13); //writes New data to SRAM.
|
||||||
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
||||||
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
||||||
EPD_4IN2_SendData(~Image[(Y_start + j)*Width + X_start/8 + i]);
|
EPD_4IN2_SendData(~Image[(Y_start + j)*Width + X_start/8 + i]);
|
||||||
|
DATA[(Y_start + j)*Width + X_start/8 + i] = ~Image[(Y_start + j)*Width + X_start/8 + i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,8 +756,12 @@ parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_4IN2_Sleep(void)
|
void EPD_4IN2_Sleep(void)
|
||||||
{
|
{
|
||||||
// EPD_4IN2_SendCommand(0x02); // POWER_OFF
|
EPD_4IN2_SendCommand(0x50); // DEEP_SLEEP
|
||||||
// EPD_4IN2_ReadBusy();
|
EPD_4IN2_SendData(0XF7);
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x02); // POWER_OFF
|
||||||
|
EPD_4IN2_ReadBusy();
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x07); // DEEP_SLEEP
|
EPD_4IN2_SendCommand(0x07); // DEEP_SLEEP
|
||||||
EPD_4IN2_SendData(0XA5);
|
EPD_4IN2_SendData(0XA5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,8 @@
|
||||||
#define EPD_4IN2_WIDTH 400
|
#define EPD_4IN2_WIDTH 400
|
||||||
#define EPD_4IN2_HEIGHT 300
|
#define EPD_4IN2_HEIGHT 300
|
||||||
|
|
||||||
void EPD_4IN2_Init(void);
|
void EPD_4IN2_Init_Fast(void);
|
||||||
|
void EPD_4IN2_Init_Partial(void);
|
||||||
void EPD_4IN2_Clear(void);
|
void EPD_4IN2_Clear(void);
|
||||||
void EPD_4IN2_Display(UBYTE *Image);
|
void EPD_4IN2_Display(UBYTE *Image);
|
||||||
void EPD_4IN2_Sleep(void);
|
void EPD_4IN2_Sleep(void);
|
||||||
|
|
|
@ -78,18 +78,20 @@ try:
|
||||||
logging.info("Clear...")
|
logging.info("Clear...")
|
||||||
epd.Clear()
|
epd.Clear()
|
||||||
|
|
||||||
Himage3 = Image.new('1', (epd.width, epd.height), 0) # 255: clear the frame
|
if(0):
|
||||||
draw = ImageDraw.Draw(Himage3)
|
|
||||||
print("Support for partial refresh, but the refresh effect is not good, but it is not recommended")
|
print("Support for partial refresh, but the refresh effect is not good, but it is not recommended")
|
||||||
print("Local refresh is off by default and is not recommended.")
|
print("Local refresh is off by default and is not recommended.")
|
||||||
if(0):
|
Himage3 = Image.new('1', (epd.width, epd.height), 0) # 255: clear the frame
|
||||||
|
draw = ImageDraw.Draw(Himage3)
|
||||||
|
epd.init_Partial()
|
||||||
for j in range(0, int(20)):
|
for j in range(0, int(20)):
|
||||||
draw.rectangle((8, 80, 44, 155), fill = 0)
|
draw.rectangle((8, 80, 48, 155), fill = 255)
|
||||||
draw.text((8, 80), str(j) , font = font35, fill = 1)
|
draw.text((8, 80), str(j) , font = font35, fill = 0)
|
||||||
draw.text((8, 120), str(20-j) , font = font35, fill = 1)
|
draw.text((8, 120), str(20-j) , font = font35, fill = 0)
|
||||||
epd.EPD_4IN2_PartialDisplay(8, 80, 42, 155, epd.getbuffer(Himage3))
|
epd.EPD_4IN2_PartialDisplay(8, 80, 42, 155, epd.getbuffer(Himage3))
|
||||||
time.sleep(2);
|
time.sleep(2);
|
||||||
|
|
||||||
|
|
||||||
'''4Gray display'''
|
'''4Gray display'''
|
||||||
logging.info("5.4Gray display--------------------------------")
|
logging.info("5.4Gray display--------------------------------")
|
||||||
epd.Init_4Gray()
|
epd.Init_4Gray()
|
||||||
|
|
|
@ -56,98 +56,110 @@ class EPD:
|
||||||
self.GRAY2 = GRAY2
|
self.GRAY2 = GRAY2
|
||||||
self.GRAY3 = GRAY3 #gray
|
self.GRAY3 = GRAY3 #gray
|
||||||
self.GRAY4 = GRAY4 #Blackest
|
self.GRAY4 = GRAY4 #Blackest
|
||||||
|
self.DATA = [0x00] * 15000
|
||||||
|
|
||||||
lut_vcom0 = [
|
lut_vcom0 = [
|
||||||
0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00,
|
||||||
]
|
]
|
||||||
lut_ww = [
|
lut_ww = [
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
]
|
]
|
||||||
lut_bw = [
|
lut_bw = [
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
]
|
]
|
||||||
lut_wb = [
|
lut_wb = [
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
]
|
]
|
||||||
lut_bb = [
|
lut_bb = [
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x20, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x10, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
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,
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
]
|
]
|
||||||
#******************************partial screen update LUT*********************************/
|
#******************************partial screen update LUT*********************************/
|
||||||
EPD_4IN2_Partial_lut_vcom1 =[
|
EPD_4IN2_Partial_lut_vcom1 =[
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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, 0x00, 0x00,
|
||||||
|
]
|
||||||
|
|
||||||
EPD_4IN2_Partial_lut_ww1 =[
|
EPD_4IN2_Partial_lut_ww1 =[
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,]
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
]
|
||||||
|
|
||||||
EPD_4IN2_Partial_lut_bw1 =[
|
EPD_4IN2_Partial_lut_bw1 =[
|
||||||
0x80 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x20, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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,
|
||||||
|
]
|
||||||
|
|
||||||
EPD_4IN2_Partial_lut_wb1 =[
|
EPD_4IN2_Partial_lut_wb1 =[
|
||||||
0x40 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x10, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00, ]
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
]
|
||||||
|
|
||||||
EPD_4IN2_Partial_lut_bb1 =[
|
EPD_4IN2_Partial_lut_bb1 =[
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01,0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00, ]
|
0x00, 0x00,0x00, 0x00, 0x00, 0x00,
|
||||||
|
]
|
||||||
|
|
||||||
#******************************gray*********************************/
|
#******************************gray*********************************/
|
||||||
#0~3 gray
|
#0~3 gray
|
||||||
|
@ -204,19 +216,19 @@ class EPD:
|
||||||
# Hardware reset
|
# Hardware reset
|
||||||
def reset(self):
|
def reset(self):
|
||||||
epdconfig.digital_write(self.reset_pin, 1)
|
epdconfig.digital_write(self.reset_pin, 1)
|
||||||
epdconfig.delay_ms(20)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 0)
|
epdconfig.digital_write(self.reset_pin, 0)
|
||||||
epdconfig.delay_ms(5)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 1)
|
epdconfig.digital_write(self.reset_pin, 1)
|
||||||
epdconfig.delay_ms(20)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 0)
|
epdconfig.digital_write(self.reset_pin, 0)
|
||||||
epdconfig.delay_ms(5)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 1)
|
epdconfig.digital_write(self.reset_pin, 1)
|
||||||
epdconfig.delay_ms(20)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 0)
|
epdconfig.digital_write(self.reset_pin, 0)
|
||||||
epdconfig.delay_ms(5)
|
epdconfig.delay_ms(10)
|
||||||
epdconfig.digital_write(self.reset_pin, 1)
|
epdconfig.digital_write(self.reset_pin, 1)
|
||||||
epdconfig.delay_ms(20)
|
epdconfig.delay_ms(10)
|
||||||
|
|
||||||
def send_command(self, command):
|
def send_command(self, command):
|
||||||
epdconfig.digital_write(self.dc_pin, 0)
|
epdconfig.digital_write(self.dc_pin, 0)
|
||||||
|
@ -238,23 +250,23 @@ class EPD:
|
||||||
|
|
||||||
def set_lut(self):
|
def set_lut(self):
|
||||||
self.send_command(0x20) # vcom
|
self.send_command(0x20) # vcom
|
||||||
for count in range(0, 44):
|
for count in range(0, 36):
|
||||||
self.send_data(self.lut_vcom0[count])
|
self.send_data(self.lut_vcom0[count])
|
||||||
|
|
||||||
self.send_command(0x21) # ww --
|
self.send_command(0x21) # ww --
|
||||||
for count in range(0, 42):
|
for count in range(0, 36):
|
||||||
self.send_data(self.lut_ww[count])
|
self.send_data(self.lut_ww[count])
|
||||||
|
|
||||||
self.send_command(0x22) # bw r
|
self.send_command(0x22) # bw r
|
||||||
for count in range(0, 42):
|
for count in range(0, 36):
|
||||||
self.send_data(self.lut_bw[count])
|
self.send_data(self.lut_bw[count])
|
||||||
|
|
||||||
self.send_command(0x23) # wb w
|
self.send_command(0x23) # wb w
|
||||||
for count in range(0, 42):
|
for count in range(0, 36):
|
||||||
self.send_data(self.lut_bb[count])
|
self.send_data(self.lut_bb[count])
|
||||||
|
|
||||||
self.send_command(0x24) # bb b
|
self.send_command(0x24) # bb b
|
||||||
for count in range(0, 42):
|
for count in range(0, 36):
|
||||||
self.send_data(self.lut_wb[count])
|
self.send_data(self.lut_wb[count])
|
||||||
|
|
||||||
|
|
||||||
|
@ -329,7 +341,6 @@ class EPD:
|
||||||
|
|
||||||
self.send_command(0x00) # panel setting
|
self.send_command(0x00) # panel setting
|
||||||
self.send_data(0xbf) # KW-BF KWR-AF BWROTP 0f
|
self.send_data(0xbf) # KW-BF KWR-AF BWROTP 0f
|
||||||
self.send_data(0x0d)
|
|
||||||
|
|
||||||
self.send_command(0x30) # PLL setting
|
self.send_command(0x30) # PLL setting
|
||||||
self.send_data(0x3c) # 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
self.send_data(0x3c) # 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
@ -341,7 +352,7 @@ class EPD:
|
||||||
self.send_data(0x2c)
|
self.send_data(0x2c)
|
||||||
|
|
||||||
self.send_command(0x82) # vcom_DC setting
|
self.send_command(0x82) # vcom_DC setting
|
||||||
self.send_data(0x28)
|
self.send_data(0x12)
|
||||||
|
|
||||||
self.send_command(0X50) # VCOM AND DATA INTERVAL SETTING
|
self.send_command(0X50) # VCOM AND DATA INTERVAL SETTING
|
||||||
self.send_data(0x97) # 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
self.send_data(0x97) # 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||||
|
@ -350,6 +361,48 @@ class EPD:
|
||||||
# EPD hardware init end
|
# EPD hardware init end
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
def init_Partial(self):
|
||||||
|
if (epdconfig.module_init() != 0):
|
||||||
|
return -1
|
||||||
|
# EPD hardware init start
|
||||||
|
self.reset()
|
||||||
|
|
||||||
|
self.send_command(0x01) # POWER SETTING
|
||||||
|
self.send_data(0x03) # VDS_EN, VDG_EN
|
||||||
|
self.send_data(0x00) # VCOM_HV, VGHL_LV[1], VGHL_LV[0]
|
||||||
|
self.send_data(0x2b) # VDH
|
||||||
|
self.send_data(0x2b) # VDL
|
||||||
|
|
||||||
|
self.send_command(0x06) # boost soft start
|
||||||
|
self.send_data(0x17)
|
||||||
|
self.send_data(0x17)
|
||||||
|
self.send_data(0x17)
|
||||||
|
|
||||||
|
self.send_command(0x04) # POWER_ON
|
||||||
|
self.ReadBusy()
|
||||||
|
|
||||||
|
self.send_command(0x00) # panel setting
|
||||||
|
self.send_data(0xbf) # KW-BF KWR-AF BWROTP 0f
|
||||||
|
|
||||||
|
self.send_command(0x30) # PLL setting
|
||||||
|
self.send_data(0x3c) # 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
|
||||||
|
self.send_command(0x61) # resolution setting
|
||||||
|
self.send_data(0x01)
|
||||||
|
self.send_data(0x90) # 128
|
||||||
|
self.send_data(0x01)
|
||||||
|
self.send_data(0x2c)
|
||||||
|
|
||||||
|
self.send_command(0x82) # vcom_DC setting
|
||||||
|
self.send_data(0x12)
|
||||||
|
|
||||||
|
self.send_command(0X50) # VCOM AND DATA INTERVAL SETTING
|
||||||
|
self.send_data(0x07) # 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||||
|
|
||||||
|
self.Partial_SetLut();
|
||||||
|
# EPD hardware init end
|
||||||
|
return 0
|
||||||
|
|
||||||
def Init_4Gray(self):
|
def Init_4Gray(self):
|
||||||
if (epdconfig.module_init() != 0):
|
if (epdconfig.module_init() != 0):
|
||||||
return -1
|
return -1
|
||||||
|
@ -478,7 +531,7 @@ class EPD:
|
||||||
if(X_end % 8 != 0):
|
if(X_end % 8 != 0):
|
||||||
X_end = int(X_end/8)*8+8
|
X_end = int(X_end/8)*8+8
|
||||||
|
|
||||||
self.Partial_SetLut();
|
|
||||||
self.send_command(0x91); #This command makes the display enter partial mode
|
self.send_command(0x91); #This command makes the display enter partial mode
|
||||||
self.send_command(0x90); #resolution setting
|
self.send_command(0x90); #resolution setting
|
||||||
self.send_data (int(X_start/256));
|
self.send_data (int(X_start/256));
|
||||||
|
@ -498,12 +551,13 @@ class EPD:
|
||||||
self.send_command(0x10); #writes Old data to SRAM for programming
|
self.send_command(0x10); #writes Old data to SRAM for programming
|
||||||
for j in range(0, int(Y_end - Y_start)):
|
for j in range(0, int(Y_end - Y_start)):
|
||||||
for i in range(0, int(X_end/8) - int(X_start/8)):
|
for i in range(0, int(X_end/8) - int(X_start/8)):
|
||||||
self.send_data(Image[(Y_start + j)*Width + int(X_start/8) + i]);
|
self.send_data(self.DATA[(Y_start + j)*Width + int(X_start/8) + i]);
|
||||||
|
|
||||||
self.send_command(0x13); #writes New data to SRAM.
|
self.send_command(0x13); #writes New data to SRAM.
|
||||||
for j in range(0, int(Y_end - Y_start)):
|
for j in range(0, int(Y_end - Y_start)):
|
||||||
for i in range(0, int(X_end/8) - int(X_start/8)):
|
for i in range(0, int(X_end/8) - int(X_start/8)):
|
||||||
self.send_data(~Image[(Y_start + j)*Width + int(X_start/8) + i]);
|
self.send_data(~Image[(Y_start + j)*Width + int(X_start/8) + i]);
|
||||||
|
self.DATA[(Y_start + j)*Width + int(X_start/8) + i] = ~Image[(Y_start + j)*Width + int(X_start/8) + i]
|
||||||
|
|
||||||
self.send_command(0x12); #DISPLAY REFRESH
|
self.send_command(0x12); #DISPLAY REFRESH
|
||||||
epdconfig.delay_ms(200) #The delay here is necessary, 200uS at least!!!
|
epdconfig.delay_ms(200) #The delay here is necessary, 200uS at least!!!
|
||||||
|
|
1910
STM32/STM32-F103ZET6/MDK-ARM/epd-demo.uvguix.liuyujian
Normal file
1910
STM32/STM32-F103ZET6/MDK-ARM/epd-demo.uvguix.liuyujian
Normal file
File diff suppressed because one or more lines are too long
|
@ -145,7 +145,7 @@
|
||||||
<SetRegEntry>
|
<SetRegEntry>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||||
<Name>-U38FF6D064246373030270457 -O2254 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)</Name>
|
<Name>-U50FF6E066675545724371487 -O2254 -SF1800 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103ZE$Flash\STM32F10x_512.FLM)</Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint>
|
<Breakpoint>
|
||||||
|
@ -234,6 +234,7 @@
|
||||||
<pMultCmdsp></pMultCmdsp>
|
<pMultCmdsp></pMultCmdsp>
|
||||||
<DebugDescription>
|
<DebugDescription>
|
||||||
<Enable>1</Enable>
|
<Enable>1</Enable>
|
||||||
|
<EnableFlashSeq>0</EnableFlashSeq>
|
||||||
<EnableLog>0</EnableLog>
|
<EnableLog>0</EnableLog>
|
||||||
<Protocol>2</Protocol>
|
<Protocol>2</Protocol>
|
||||||
<DbgClock>10000000</DbgClock>
|
<DbgClock>10000000</DbgClock>
|
||||||
|
@ -819,7 +820,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>e-Paper</GroupName>
|
<GroupName>e-Paper</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
@ -1303,7 +1304,7 @@
|
||||||
|
|
||||||
<Group>
|
<Group>
|
||||||
<GroupName>GUI</GroupName>
|
<GroupName>GUI</GroupName>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<cbSel>0</cbSel>
|
<cbSel>0</cbSel>
|
||||||
<RteFlg>0</RteFlg>
|
<RteFlg>0</RteFlg>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F103ZE</Device>
|
<Device>STM32F103ZE</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
|
<PackID>Keil.STM32F1xx_DFP.2.1.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
<Cpu>IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -184,6 +184,7 @@
|
||||||
<hadXRAM>0</hadXRAM>
|
<hadXRAM>0</hadXRAM>
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
|
<RvdsMve>0</RvdsMve>
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
|
|
@ -3,58 +3,61 @@
|
||||||
<pre>
|
<pre>
|
||||||
<h1>µVision Build Log</h1>
|
<h1>µVision Build Log</h1>
|
||||||
<h2>Tool Versions:</h2>
|
<h2>Tool Versions:</h2>
|
||||||
IDE-Version: ¦ÌVision V5.25.2.0
|
IDE-Version: ¦ÌVision V5.26.2.0
|
||||||
Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved.
|
Copyright (C) 2018 ARM Ltd and ARM Germany GmbH. All rights reserved.
|
||||||
License Information: ass ass, ass, LIC=JL2UH-W872P-CJR6Z-JYZTW-ESB48-R6YF4
|
License Information: , , LIC=RC93N-YLJYL-JJH6S-LI3Z1-D1AV2-99PL8
|
||||||
|
|
||||||
Tool Versions:
|
Tool Versions:
|
||||||
Toolchain: MDK-ARM Plus Version: 5.25.2.0
|
Toolchain: MDK-ARM Plus Version: 5.26.2.0
|
||||||
Toolchain Path: D:\Program Files\keil5\ARM\ARMCC\Bin
|
Toolchain Path: D:\KEIL\azwz\ARM\ARMCC\Bin
|
||||||
C Compiler: Armcc.exe V5.06 update 6 (build 750)
|
C Compiler: Armcc.exe V5.06 update 6 (build 750)
|
||||||
Assembler: Armasm.exe V5.06 update 6 (build 750)
|
Assembler: Armasm.exe V5.06 update 6 (build 750)
|
||||||
Linker/Locator: ArmLink.exe V5.06 update 6 (build 750)
|
Linker/Locator: ArmLink.exe V5.06 update 6 (build 750)
|
||||||
Library Manager: ArmAr.exe V5.06 update 6 (build 750)
|
Library Manager: ArmAr.exe V5.06 update 6 (build 750)
|
||||||
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
|
Hex Converter: FromElf.exe V5.06 update 6 (build 750)
|
||||||
CPU DLL: SARMCM3.DLL V5.25.2.0
|
CPU DLL: SARMCM3.DLL V5.26.2.0
|
||||||
Dialog DLL: DCM.DLL V1.17.1.0
|
Dialog DLL: DCM.DLL V1.17.2.0
|
||||||
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.1.0
|
Target DLL: STLink\ST-LINKIII-KEIL_SWO.dll V3.0.5.0
|
||||||
Dialog DLL: TCM.DLL V1.35.1.0
|
Dialog DLL: TCM.DLL V1.36.1.0
|
||||||
|
|
||||||
<h2>Project:</h2>
|
<h2>Project:</h2>
|
||||||
E:\github\E-Paper_code\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
|
E:\ÏîÄ¿\e-Paper\Code\4.2\bK\E-Paper_code\STM32\STM32-F103ZET6\MDK-ARM\epd-demo.uvprojx
|
||||||
Project File Date: 11/01/2021
|
Project File Date: 01/19/2022
|
||||||
|
|
||||||
<h2>Output:</h2>
|
<h2>Output:</h2>
|
||||||
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Program Files\keil5\ARM\ARMCC\Bin'
|
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\KEIL\azwz\ARM\ARMCC\Bin'
|
||||||
Build target 'epd-demo'
|
Build target 'epd-demo'
|
||||||
compiling EPD_2in66_test.c...
|
compiling EPD_4in2_test.c...
|
||||||
compiling GUI_Paint.c...
|
compiling EPD_4in2.c...
|
||||||
|
..\User\e-Paper\EPD_4in2.c(612): warning: #550-D: variable "Height" was set but never used
|
||||||
|
UWORD Width, Height;
|
||||||
|
..\User\e-Paper\EPD_4in2.c: 1 warning, 0 errors
|
||||||
linking...
|
linking...
|
||||||
Program Size: Code=24312 RO-data=21000 RW-data=76 ZI-data=41140
|
Program Size: Code=25928 RO-data=56420 RW-data=68 ZI-data=56140
|
||||||
FromELF: creating hex file...
|
FromELF: creating hex file...
|
||||||
"epd-demo\epd-demo.axf" - 0 Error(s), 0 Warning(s).
|
"epd-demo\epd-demo.axf" - 0 Error(s), 1 Warning(s).
|
||||||
|
|
||||||
<h2>Software Packages used:</h2>
|
<h2>Software Packages used:</h2>
|
||||||
|
|
||||||
Package Vendor: ARM
|
Package Vendor: ARM
|
||||||
http://www.keil.com/pack/ARM.CMSIS.5.7.0.pack
|
http://www.keil.com/pack/ARM.CMSIS.5.4.0.pack
|
||||||
ARM.CMSIS.5.7.0
|
ARM.CMSIS.5.4.0
|
||||||
CMSIS (Cortex Microcontroller Software Interface Standard)
|
CMSIS (Cortex Microcontroller Software Interface Standard)
|
||||||
* Component: CORE Version: 5.4.0
|
* Component: CORE Version: 5.1.2
|
||||||
|
|
||||||
Package Vendor: Keil
|
Package Vendor: Keil
|
||||||
http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.3.0.pack
|
http://www.keil.com/pack/Keil.STM32F1xx_DFP.2.1.0.pack
|
||||||
Keil.STM32F1xx_DFP.2.3.0
|
Keil.STM32F1xx_DFP.2.1.0
|
||||||
STMicroelectronics STM32F1 Series Device Support, Drivers and Examples
|
STMicroelectronics STM32F1 Series Device Support, Drivers and Examples
|
||||||
|
|
||||||
<h2>Collection of Component include folders:</h2>
|
<h2>Collection of Component include folders:</h2>
|
||||||
.\RTE\_epd-demo
|
.\RTE\_epd-demo
|
||||||
D:\Program Files\keil5\ARM\PACK\ARM\CMSIS\5.7.0\CMSIS\Core\Include
|
D:\KEIL\azwz\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Core\Include
|
||||||
D:\Program Files\keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.3.0\Device\Include
|
D:\KEIL\azwz\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include
|
||||||
|
|
||||||
<h2>Collection of Component Files used:</h2>
|
<h2>Collection of Component Files used:</h2>
|
||||||
|
|
||||||
* Component: ARM::CMSIS:CORE:5.4.0
|
* Component: ARM::CMSIS:CORE:5.1.2
|
||||||
Build Time Elapsed: 00:00:03
|
Build Time Elapsed: 00:00:03
|
||||||
</pre>
|
</pre>
|
||||||
</body>
|
</body>
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -580,17 +580,17 @@ ARM Macro Assembler Page 9
|
||||||
00000000
|
00000000
|
||||||
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
|
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M3 --apcs=interw
|
||||||
ork --depend=epd-demo\startup_stm32f103xe.d -oepd-demo\startup_stm32f103xe.o -I
|
ork --depend=epd-demo\startup_stm32f103xe.d -oepd-demo\startup_stm32f103xe.o -I
|
||||||
.\RTE\_epd-demo -I"D:\Program Files\keil5\ARM\PACK\ARM\CMSIS\5.7.0\CMSIS\Core\I
|
.\RTE\_epd-demo -ID:\KEIL\azwz\ARM\PACK\ARM\CMSIS\5.4.0\CMSIS\Core\Include -ID:
|
||||||
nclude" -I"D:\Program Files\keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.3.0\Device\Incl
|
\KEIL\azwz\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include --predefine="__MICR
|
||||||
ude" --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 525" -
|
OLIB SETA 1" --predefine="__UVISION_VERSION SETA 526" --predefine="_RTE_ SETA 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ARM Macro Assembler Page 10
|
ARM Macro Assembler Page 10
|
||||||
|
|
||||||
|
|
||||||
-predefine="_RTE_ SETA 1" --predefine="STM32F10X_HD SETA 1" --list=startup_stm3
|
" --predefine="STM32F10X_HD SETA 1" --list=startup_stm32f103xe.lst startup_stm3
|
||||||
2f103xe.lst startup_stm32f103xe.s
|
2f103xe.s
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ int main(void)
|
||||||
|
|
||||||
// EPD_4in01f_test();
|
// EPD_4in01f_test();
|
||||||
|
|
||||||
// EPD_4in2_test();
|
EPD_4in2_test();
|
||||||
// EPD_4in2bc_test();
|
// EPD_4in2bc_test();
|
||||||
// EPD_4in2b_V2_test();
|
// EPD_4in2b_V2_test();
|
||||||
// EPD_5in65f_test();
|
// EPD_5in65f_test();
|
||||||
|
|
|
@ -39,7 +39,7 @@ int EPD_4in2_test(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("e-Paper Init and Clear...\r\n");
|
printf("e-Paper Init and Clear...\r\n");
|
||||||
EPD_4IN2_Init();
|
EPD_4IN2_Init_Fast();
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Clear();
|
||||||
DEV_Delay_ms(500);
|
DEV_Delay_ms(500);
|
||||||
|
|
||||||
|
@ -86,8 +86,8 @@ int EPD_4in2_test(void)
|
||||||
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
||||||
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
||||||
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
||||||
Paint_DrawString_CN(130, 0, " ÄãºÃabc", &Font12CN, BLACK, WHITE);
|
Paint_DrawString_CN(130, 0, " <EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, BLACK, WHITE);
|
||||||
Paint_DrawString_CN(130, 20, "΢ѩµç×Ó", &Font24CN, WHITE, BLACK);
|
Paint_DrawString_CN(130, 20, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, WHITE, BLACK);
|
||||||
|
|
||||||
printf("EPD_Display\r\n");
|
printf("EPD_Display\r\n");
|
||||||
EPD_4IN2_Display(BlackImage);
|
EPD_4IN2_Display(BlackImage);
|
||||||
|
@ -95,6 +95,7 @@ int EPD_4in2_test(void)
|
||||||
#endif
|
#endif
|
||||||
printf("Support for partial refresh, but the refresh effect is not good, but it is not recommended\r\n");
|
printf("Support for partial refresh, but the refresh effect is not good, but it is not recommended\r\n");
|
||||||
#if 0
|
#if 0
|
||||||
|
EPD_4IN2_Init_Partial();
|
||||||
printf("Partial refresh\r\n");
|
printf("Partial refresh\r\n");
|
||||||
PAINT_TIME sPaint_time;
|
PAINT_TIME sPaint_time;
|
||||||
sPaint_time.Hour = 12;
|
sPaint_time.Hour = 12;
|
||||||
|
@ -155,15 +156,15 @@ int EPD_4in2_test(void)
|
||||||
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK);
|
||||||
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE);
|
||||||
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK);
|
||||||
Paint_DrawString_CN(140, 0, "ÄãºÃabc", &Font12CN, GRAY1, GRAY4);
|
Paint_DrawString_CN(140, 0, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY1, GRAY4);
|
||||||
Paint_DrawString_CN(140, 40, "ÄãºÃabc", &Font12CN, GRAY2, GRAY3);
|
Paint_DrawString_CN(140, 40, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY2, GRAY3);
|
||||||
Paint_DrawString_CN(140, 80, "ÄãºÃabc", &Font12CN, GRAY3, GRAY2);
|
Paint_DrawString_CN(140, 80, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY3, GRAY2);
|
||||||
Paint_DrawString_CN(140, 120, "ÄãºÃabc", &Font12CN, GRAY4, GRAY1);
|
Paint_DrawString_CN(140, 120, "<EFBFBD><EFBFBD><EFBFBD>abc", &Font12CN, GRAY4, GRAY1);
|
||||||
|
|
||||||
Paint_DrawString_CN(220, 0, "΢ѩµç×Ó", &Font24CN, GRAY1, GRAY4);
|
Paint_DrawString_CN(220, 0, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY1, GRAY4);
|
||||||
Paint_DrawString_CN(220, 40, "΢ѩµç×Ó", &Font24CN, GRAY2, GRAY3);
|
Paint_DrawString_CN(220, 40, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY2, GRAY3);
|
||||||
Paint_DrawString_CN(220, 80, "΢ѩµç×Ó", &Font24CN, GRAY3, GRAY2);
|
Paint_DrawString_CN(220, 80, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY3, GRAY2);
|
||||||
Paint_DrawString_CN(220, 120, "΢ѩµç×Ó", &Font24CN, GRAY4, GRAY1);
|
Paint_DrawString_CN(220, 120, "ѩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", &Font24CN, GRAY4, GRAY1);
|
||||||
|
|
||||||
EPD_4IN2_4GrayDisplay(BlackImage);
|
EPD_4IN2_4GrayDisplay(BlackImage);
|
||||||
DEV_Delay_ms(500);
|
DEV_Delay_ms(500);
|
||||||
|
@ -175,6 +176,7 @@ int EPD_4in2_test(void)
|
||||||
|
|
||||||
EPD_4IN2_Clear();
|
EPD_4IN2_Clear();
|
||||||
|
|
||||||
|
EPD_4IN2_Init_Fast();
|
||||||
printf("Goto Sleep...\r\n");
|
printf("Goto Sleep...\r\n");
|
||||||
EPD_4IN2_Sleep();
|
EPD_4IN2_Sleep();
|
||||||
free(BlackImage);
|
free(BlackImage);
|
||||||
|
|
|
@ -113,106 +113,114 @@
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
|
||||||
static const unsigned char EPD_4IN2_lut_vcom0[] = {
|
static const unsigned char EPD_4IN2_lut_vcom0[] = {
|
||||||
0x00, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x00, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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, 0x00, 0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_ww[] = {
|
static const unsigned char EPD_4IN2_lut_ww[] = {
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_bw[] = {
|
static const unsigned char EPD_4IN2_lut_bw[] = {
|
||||||
0x40, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x40, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_wb[] = {
|
static const unsigned char EPD_4IN2_lut_wb[] = {
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0xA0, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x50, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
static const unsigned char EPD_4IN2_lut_bb[] = {
|
static const unsigned char EPD_4IN2_lut_bb[] = {
|
||||||
0x80, 0x17, 0x00, 0x00, 0x00, 0x02,
|
0x20, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x90, 0x17, 0x17, 0x00, 0x00, 0x02,
|
0x90, 0x0F, 0x0F, 0x00, 0x00, 0x01,
|
||||||
0x80, 0x0A, 0x01, 0x00, 0x00, 0x01,
|
0x10, 0x08, 0x08, 0x00, 0x00, 0x02,
|
||||||
0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02,
|
|
||||||
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,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
};
|
||||||
|
|
||||||
/******************************partial screen update LUT*********************************/
|
/******************************partial screen update LUT*********************************/
|
||||||
const unsigned char EPD_4IN2_Partial_lut_vcom1[] = {
|
const unsigned char EPD_4IN2_Partial_lut_vcom1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_ww1[] = {
|
const unsigned char EPD_4IN2_Partial_lut_ww1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_bw1[] = {
|
const unsigned char EPD_4IN2_Partial_lut_bw1[] ={
|
||||||
0x80 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x20, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
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,
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_wb1[] = {
|
const unsigned char EPD_4IN2_Partial_lut_wb1[] ={
|
||||||
0x40 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x10, 0x01, 0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned char EPD_4IN2_Partial_lut_bb1[] = {
|
const unsigned char EPD_4IN2_Partial_lut_bb1[] ={
|
||||||
0x00 ,0x19 ,0x01 ,0x00 ,0x00 ,0x01,
|
0x00, 0x01,0x20, 0x01, 0x00, 0x01,
|
||||||
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,
|
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,
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00, 0x00,0x00, 0x00, 0x00, 0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/******************************gray*********************************/
|
/******************************gray*********************************/
|
||||||
//0~3 gray
|
//0~3 gray
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_vcom[] = {
|
const unsigned char EPD_4IN2_4Gray_lut_vcom[] =
|
||||||
|
{
|
||||||
0x00 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x00 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x60 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x60 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
|
@ -223,7 +231,7 @@ const unsigned char EPD_4IN2_4Gray_lut_vcom[] = {
|
||||||
|
|
||||||
};
|
};
|
||||||
//R21
|
//R21
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_ww[] = {
|
const unsigned char EPD_4IN2_4Gray_lut_ww[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x10 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x10 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
|
@ -233,7 +241,7 @@ const unsigned char EPD_4IN2_4Gray_lut_ww[] = {
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R22H r
|
//R22H r
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_bw[] = {
|
const unsigned char EPD_4IN2_4Gray_lut_bw[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
|
@ -243,7 +251,7 @@ const unsigned char EPD_4IN2_4Gray_lut_bw[] = {
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R23H w
|
//R23H w
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_wb[] = {
|
const unsigned char EPD_4IN2_4Gray_lut_wb[] ={
|
||||||
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x40 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x00 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
|
@ -253,7 +261,7 @@ const unsigned char EPD_4IN2_4Gray_lut_wb[] = {
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
//R24H b
|
//R24H b
|
||||||
const unsigned char EPD_4IN2_4Gray_lut_bb[] = {
|
const unsigned char EPD_4IN2_4Gray_lut_bb[] ={
|
||||||
0x80 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
0x80 ,0x0A ,0x00 ,0x00 ,0x00 ,0x01,
|
||||||
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
0x90 ,0x14 ,0x14 ,0x00 ,0x00 ,0x01,
|
||||||
0x20 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
0x20 ,0x14 ,0x0A ,0x00 ,0x00 ,0x01,
|
||||||
|
@ -263,27 +271,26 @@ const unsigned char EPD_4IN2_4Gray_lut_bb[] = {
|
||||||
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Software reset
|
function : Software reset
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static void EPD_4IN2_Reset(void)
|
static void EPD_4IN2_Reset(void)
|
||||||
{
|
{
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
|
||||||
DEV_Delay_ms(20);
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
|
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 0);
|
DEV_Digital_Write(EPD_RST_PIN, 0);
|
||||||
DEV_Delay_ms(2);
|
DEV_Delay_ms(10);
|
||||||
DEV_Digital_Write(EPD_RST_PIN, 1);
|
DEV_Digital_Write(EPD_RST_PIN, 1);
|
||||||
DEV_Delay_ms(20);
|
DEV_Delay_ms(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -342,62 +349,52 @@ static void EPD_4IN2_TurnOnDisplay(void)
|
||||||
function : set the look-up tables
|
function : set the look-up tables
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
static void EPD_4IN2_SetLut(void)
|
|
||||||
{
|
|
||||||
UWORD count;
|
|
||||||
EPD_4IN2_SendCommand(0x20); //g vcom
|
|
||||||
for(count=0; count<44; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x21);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x22);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x23);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);
|
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x24);
|
|
||||||
for(count=0; count<42; count++) {
|
|
||||||
EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void EPD_4IN2_Partial_SetLut(void)
|
static void EPD_4IN2_Partial_SetLut(void)
|
||||||
{
|
{
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
EPD_4IN2_SendCommand(0x20);
|
EPD_4IN2_SendCommand(0x20);
|
||||||
for(count=0; count<44; count++) {
|
for(count=0;count<44;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_Partial_lut_vcom1[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_vcom1[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x21);
|
EPD_4IN2_SendCommand(0x21);
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_Partial_lut_ww1[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_ww1[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x22);
|
EPD_4IN2_SendCommand(0x22);
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bw1[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bw1[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x23);
|
EPD_4IN2_SendCommand(0x23);
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_Partial_lut_wb1[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_wb1[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x24);
|
EPD_4IN2_SendCommand(0x24);
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bb1[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_Partial_lut_bb1[count]);}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void EPD_4IN2_SetLut(void)
|
||||||
|
{
|
||||||
|
unsigned int count;
|
||||||
|
EPD_4IN2_SendCommand(0x20);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_vcom0[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x21);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_ww[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x22);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_bw[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x23);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_wb[count]);}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x24);
|
||||||
|
for(count=0;count<36;count++)
|
||||||
|
{EPD_4IN2_SendData(EPD_4IN2_lut_bb[count]);}
|
||||||
}
|
}
|
||||||
|
|
||||||
//LUT download
|
//LUT download
|
||||||
|
@ -406,41 +403,36 @@ static void EPD_4IN2_4Gray_lut(void)
|
||||||
unsigned int count;
|
unsigned int count;
|
||||||
{
|
{
|
||||||
EPD_4IN2_SendCommand(0x20); //vcom
|
EPD_4IN2_SendCommand(0x20); //vcom
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_vcom[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_vcom[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x21); //red not use
|
EPD_4IN2_SendCommand(0x21); //red not use
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_ww[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_ww[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x22); //bw r
|
EPD_4IN2_SendCommand(0x22); //bw r
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_bw[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_bw[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x23); //wb w
|
EPD_4IN2_SendCommand(0x23); //wb w
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_wb[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_wb[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x24); //bb b
|
EPD_4IN2_SendCommand(0x24); //bb b
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_bb[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_bb[count]);}
|
||||||
}
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x25); //vcom
|
EPD_4IN2_SendCommand(0x25); //vcom
|
||||||
for(count=0; count<42; count++) {
|
for(count=0;count<42;count++)
|
||||||
EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_ww[count]);
|
{EPD_4IN2_SendData(EPD_4IN2_4Gray_lut_ww[count]);}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
function : Initialize the e-Paper register
|
function : Initialize the e-Paper register
|
||||||
parameter:
|
parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_4IN2_Init(void)
|
|
||||||
|
void EPD_4IN2_Init_Partial(void)
|
||||||
{
|
{
|
||||||
EPD_4IN2_Reset();
|
EPD_4IN2_Reset();
|
||||||
|
|
||||||
|
@ -460,7 +452,6 @@ void EPD_4IN2_Init(void)
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x00); // panel setting
|
EPD_4IN2_SendCommand(0x00); // panel setting
|
||||||
EPD_4IN2_SendData(0xbf); // KW-BF KWR-AF BWROTP 0f BWOTP 1f
|
EPD_4IN2_SendData(0xbf); // KW-BF KWR-AF BWROTP 0f BWOTP 1f
|
||||||
EPD_4IN2_SendData(0x0d);
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x30); // PLL setting
|
EPD_4IN2_SendCommand(0x30); // PLL setting
|
||||||
EPD_4IN2_SendData(0x3C); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
EPD_4IN2_SendData(0x3C); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
@ -472,12 +463,54 @@ void EPD_4IN2_Init(void)
|
||||||
EPD_4IN2_SendData(0x2c);
|
EPD_4IN2_SendData(0x2c);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
|
EPD_4IN2_SendCommand(0x82); // vcom_DC setting
|
||||||
EPD_4IN2_SendData(0x28);
|
EPD_4IN2_SendData(0x12);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
EPD_4IN2_SendCommand(0X50); // VCOM AND DATA INTERVAL SETTING
|
||||||
EPD_4IN2_SendData(0x97); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
EPD_4IN2_SendData(0x07); // 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7
|
||||||
|
|
||||||
|
EPD_4IN2_Partial_SetLut();
|
||||||
|
}
|
||||||
|
|
||||||
|
//UC8176C
|
||||||
|
void EPD_4IN2_Init_Fast(void)
|
||||||
|
{
|
||||||
|
EPD_4IN2_Reset();
|
||||||
|
EPD_4IN2_SendCommand(0x01); //POWER SETTING
|
||||||
|
EPD_4IN2_SendData (0x03);
|
||||||
|
EPD_4IN2_SendData (0x00);
|
||||||
|
EPD_4IN2_SendData (0x2b);
|
||||||
|
EPD_4IN2_SendData (0x2b);
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x06); //boost soft start
|
||||||
|
EPD_4IN2_SendData (0x17); //A
|
||||||
|
EPD_4IN2_SendData (0x17); //B
|
||||||
|
EPD_4IN2_SendData (0x17); //C
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x04);
|
||||||
|
EPD_4IN2_ReadBusy();
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x00); //panel setting
|
||||||
|
EPD_4IN2_SendData(0xbf); //KW-bf KWR-2F BWROTP 0f BWOTP 1f
|
||||||
|
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x30);
|
||||||
|
EPD_4IN2_SendData (0x3c); // 3A 100HZ 29 150Hz 39 200HZ 31 171HZ
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x61); //resolution setting
|
||||||
|
EPD_4IN2_SendData (0x01);
|
||||||
|
EPD_4IN2_SendData (0x90); //400
|
||||||
|
EPD_4IN2_SendData (0x01); //300
|
||||||
|
EPD_4IN2_SendData (0x2c);
|
||||||
|
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x82); //vcom_DC setting
|
||||||
|
EPD_4IN2_SendData (0x12);
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0X50);
|
||||||
|
EPD_4IN2_SendData(0x97);
|
||||||
|
|
||||||
EPD_4IN2_SetLut();
|
EPD_4IN2_SetLut();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EPD_4IN2_Init_4Gray(void)
|
void EPD_4IN2_Init_4Gray(void)
|
||||||
|
@ -539,8 +572,9 @@ void EPD_4IN2_Clear(void)
|
||||||
EPD_4IN2_SendData(0xFF);
|
EPD_4IN2_SendData(0xFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
||||||
DEV_Delay_ms(10);
|
DEV_Delay_ms(1);
|
||||||
EPD_4IN2_TurnOnDisplay();
|
EPD_4IN2_TurnOnDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -554,6 +588,13 @@ void EPD_4IN2_Display(UBYTE *Image)
|
||||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||||
Height = EPD_4IN2_HEIGHT;
|
Height = EPD_4IN2_HEIGHT;
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x10);
|
||||||
|
for (UWORD j = 0; j < Height; j++) {
|
||||||
|
for (UWORD i = 0; i < Width; i++) {
|
||||||
|
EPD_4IN2_SendData(0x00);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x13);
|
EPD_4IN2_SendCommand(0x13);
|
||||||
for (UWORD j = 0; j < Height; j++) {
|
for (UWORD j = 0; j < Height; j++) {
|
||||||
for (UWORD i = 0; i < Width; i++) {
|
for (UWORD i = 0; i < Width; i++) {
|
||||||
|
@ -561,26 +602,23 @@ void EPD_4IN2_Display(UBYTE *Image)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EPD_4IN2_SendCommand(0x12); //DISPLAY REFRESH
|
||||||
|
DEV_Delay_ms(10);
|
||||||
EPD_4IN2_TurnOnDisplay();
|
EPD_4IN2_TurnOnDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end, UBYTE *Image)
|
void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end, UBYTE *Image)
|
||||||
{
|
{
|
||||||
UWORD Width;
|
UWORD Width, Height;
|
||||||
|
static UBYTE DATA[EPD_4IN2_WIDTH * EPD_4IN2_HEIGHT / 8] = {0x00};
|
||||||
|
|
||||||
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
Width = (EPD_4IN2_WIDTH % 8 == 0)? (EPD_4IN2_WIDTH / 8 ): (EPD_4IN2_WIDTH / 8 + 1);
|
||||||
|
Height = EPD_4IN2_HEIGHT;
|
||||||
|
|
||||||
X_start = (X_start % 8 == 0)? (X_start): (X_start/8*8+8);
|
X_start = (X_start % 8 == 0)? (X_start): (X_start/8*8+8);
|
||||||
X_end = (X_end % 8 == 0)? (X_end): (X_end/8*8+8);
|
X_end = (X_end % 8 == 0)? (X_end): (X_end/8*8+8);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0X50);
|
|
||||||
EPD_4IN2_SendData(0xf7);
|
|
||||||
DEV_Delay_ms(100);
|
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x82); //vcom_DC setting
|
|
||||||
EPD_4IN2_SendData (0x08);
|
|
||||||
EPD_4IN2_SendCommand(0X50);
|
|
||||||
EPD_4IN2_SendData(0x47);
|
|
||||||
EPD_4IN2_Partial_SetLut();
|
|
||||||
EPD_4IN2_SendCommand(0x91); //This command makes the display enter partial mode
|
EPD_4IN2_SendCommand(0x91); //This command makes the display enter partial mode
|
||||||
EPD_4IN2_SendCommand(0x90); //resolution setting
|
EPD_4IN2_SendCommand(0x90); //resolution setting
|
||||||
EPD_4IN2_SendData ((X_start)/256);
|
EPD_4IN2_SendData ((X_start)/256);
|
||||||
|
@ -599,13 +637,14 @@ void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end
|
||||||
EPD_4IN2_SendCommand(0x10); //writes Old data to SRAM for programming
|
EPD_4IN2_SendCommand(0x10); //writes Old data to SRAM for programming
|
||||||
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
||||||
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
||||||
EPD_4IN2_SendData(Image[(Y_start + j)*Width + X_start/8 + i]);
|
EPD_4IN2_SendData(DATA[(Y_start + j)*Width + X_start/8 + i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EPD_4IN2_SendCommand(0x13); //writes New data to SRAM.
|
EPD_4IN2_SendCommand(0x13); //writes New data to SRAM.
|
||||||
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
for (UWORD j = 0; j < Y_end - Y_start; j++) {
|
||||||
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
for (UWORD i = 0; i < (X_end - X_start)/8; i++) {
|
||||||
EPD_4IN2_SendData(~Image[(Y_start + j)*Width + X_start/8 + i]);
|
EPD_4IN2_SendData(~Image[(Y_start + j)*Width + X_start/8 + i]);
|
||||||
|
DATA[(Y_start + j)*Width + X_start/8 + i] = ~Image[(Y_start + j)*Width + X_start/8 + i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -616,20 +655,26 @@ void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end
|
||||||
|
|
||||||
void EPD_4IN2_4GrayDisplay(const UBYTE *Image)
|
void EPD_4IN2_4GrayDisplay(const UBYTE *Image)
|
||||||
{
|
{
|
||||||
UDOUBLE i,j,k;
|
UDOUBLE i,j,k,m;
|
||||||
UBYTE temp1,temp2,temp3;
|
UBYTE temp1,temp2,temp3;
|
||||||
/****Color display description****
|
/****Color display description****
|
||||||
white gray1 gray2 black
|
white gray1 gray2 black
|
||||||
0x10| 01 01 00 00
|
0x10| 01 01 00 00
|
||||||
0x13| 01 00 01 00
|
0x13| 01 00 01 00
|
||||||
*********************************/
|
*********************************/
|
||||||
EPD_4IN2_SendCommand(0x10);
|
EPD_4IN2_SendCommand(0x10);
|
||||||
|
// EPD_4IN2_HEIGHT
|
||||||
for(i=0; i<15000; i++) { //5808*4 46464
|
// EPD_4IN2_WIDTH
|
||||||
|
for(m = 0; m<EPD_4IN2_HEIGHT;m++)
|
||||||
|
for(i=0;i<EPD_4IN2_WIDTH/8;i++)
|
||||||
|
{
|
||||||
temp3=0;
|
temp3=0;
|
||||||
for(j=0; j<2; j++) {
|
for(j=0;j<2;j++)
|
||||||
temp1 = Image[i*2+j];
|
{
|
||||||
for(k=0; k<2; k++) {
|
|
||||||
|
temp1 = Image[(m*(EPD_4IN2_WIDTH/8)+i)*2+j];
|
||||||
|
for(k=0;k<2;k++)
|
||||||
|
{
|
||||||
temp2 = temp1&0xC0 ;
|
temp2 = temp1&0xC0 ;
|
||||||
if(temp2 == 0xC0)
|
if(temp2 == 0xC0)
|
||||||
temp3 |= 0x01;//white
|
temp3 |= 0x01;//white
|
||||||
|
@ -662,11 +707,15 @@ void EPD_4IN2_4GrayDisplay(const UBYTE *Image)
|
||||||
}
|
}
|
||||||
// new data
|
// new data
|
||||||
EPD_4IN2_SendCommand(0x13);
|
EPD_4IN2_SendCommand(0x13);
|
||||||
for(i=0; i<15000; i++) { //5808*4 46464
|
for(m = 0; m<EPD_4IN2_HEIGHT;m++)
|
||||||
|
for(i=0;i<EPD_4IN2_WIDTH/8;i++)
|
||||||
|
{
|
||||||
temp3=0;
|
temp3=0;
|
||||||
for(j=0; j<2; j++) {
|
for(j=0;j<2;j++)
|
||||||
temp1 = Image[i*2+j];
|
{
|
||||||
for(k=0; k<2; k++) {
|
temp1 = Image[(m*(EPD_4IN2_WIDTH/8)+i)*2+j];
|
||||||
|
for(k=0;k<2;k++)
|
||||||
|
{
|
||||||
temp2 = temp1&0xC0 ;
|
temp2 = temp1&0xC0 ;
|
||||||
if(temp2 == 0xC0)
|
if(temp2 == 0xC0)
|
||||||
temp3 |= 0x01;//white
|
temp3 |= 0x01;//white
|
||||||
|
@ -707,8 +756,12 @@ parameter:
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void EPD_4IN2_Sleep(void)
|
void EPD_4IN2_Sleep(void)
|
||||||
{
|
{
|
||||||
|
EPD_4IN2_SendCommand(0x50); // DEEP_SLEEP
|
||||||
|
EPD_4IN2_SendData(0XF7);
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x02); // POWER_OFF
|
EPD_4IN2_SendCommand(0x02); // POWER_OFF
|
||||||
EPD_4IN2_ReadBusy();
|
EPD_4IN2_ReadBusy();
|
||||||
|
|
||||||
EPD_4IN2_SendCommand(0x07); // DEEP_SLEEP
|
EPD_4IN2_SendCommand(0x07); // DEEP_SLEEP
|
||||||
EPD_4IN2_SendData(0XA5);
|
EPD_4IN2_SendData(0XA5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,7 +118,8 @@
|
||||||
#define EPD_4IN2_WIDTH 400
|
#define EPD_4IN2_WIDTH 400
|
||||||
#define EPD_4IN2_HEIGHT 300
|
#define EPD_4IN2_HEIGHT 300
|
||||||
|
|
||||||
void EPD_4IN2_Init(void);
|
void EPD_4IN2_Init_Fast(void);
|
||||||
|
void EPD_4IN2_Init_Partial(void);
|
||||||
void EPD_4IN2_Clear(void);
|
void EPD_4IN2_Clear(void);
|
||||||
void EPD_4IN2_Display(UBYTE *Image);
|
void EPD_4IN2_Display(UBYTE *Image);
|
||||||
void EPD_4IN2_Sleep(void);
|
void EPD_4IN2_Sleep(void);
|
||||||
|
@ -126,4 +127,6 @@ void EPD_4IN2_PartialDisplay(UWORD X_start,UWORD Y_start,UWORD X_end,UWORD Y_end
|
||||||
|
|
||||||
void EPD_4IN2_Init_4Gray(void);
|
void EPD_4IN2_Init_4Gray(void);
|
||||||
void EPD_4IN2_4GrayDisplay(const UBYTE *Image);
|
void EPD_4IN2_4GrayDisplay(const UBYTE *Image);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue