first commit
This commit is contained in:
		
						commit
						7eccac107c
					
				
					 297 changed files with 473382 additions and 0 deletions
				
			
		
							
								
								
									
										11
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| file(GLOB_RECURSE MY_LIB_SOURCES | ||||
|      "ESP32epdx/src/*.cpp" | ||||
|      "ESP32epdx/src/GUI/*.cpp" | ||||
|      "pubsubclient/src/*.cpp") | ||||
| 
 | ||||
| idf_component_register( | ||||
|     #SRCS "main.cpp" "EPD.cpp" "wifi_helper.cpp" "mqtt.cpp" ${MY_LIB_SOURCES} | ||||
|     #INCLUDE_DIRS "" "ESP32epdx/src" "ESP32epdx/src/GUI" "pubsubclient/src" | ||||
|     SRCS "main.cpp" "EPD.cpp" "wifi_helper.c" "mqtt_helper.c" ${MY_LIB_SOURCES} | ||||
|     INCLUDE_DIRS "" "ESP32epdx/src" "ESP32epdx/src/GUI" | ||||
| ) | ||||
							
								
								
									
										600
									
								
								EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,600 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Fast update 2 initialization
 | ||||
| void EPD_HW_Init_Fast2(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x5A);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| //Fast 2 display
 | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(*datas); | ||||
|       datas++; | ||||
|    }   | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    }    | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   152  | ||||
| #define EPD_HEIGHT  296 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										2
									
								
								ESP32epdx/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								ESP32epdx/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| 
 | ||||
| library.properties | ||||
							
								
								
									
										0
									
								
								ESP32epdx/LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								ESP32epdx/LICENSE
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										26
									
								
								ESP32epdx/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								ESP32epdx/README.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| v1.0.8 | ||||
| Added 3.97-inch monochrome and 4-color options, updated 2.9/5.79/7.5/11.6-inch 4-color options, and added fast refresh function. | ||||
| 增加3.97寸单色、四色,更新2.9/5.79/7.5/11.6寸四色,增加快刷功能。 | ||||
| 
 | ||||
| v1.0.7 | ||||
| Add BT and WiFi control e-paper display examples | ||||
| 增加BT和WiFi控制电子纸显示示例 | ||||
| 
 | ||||
| v1.0.6 | ||||
| Add a 4-color e-paper driver for sizes and improve GUI functionality | ||||
| 增加4色电子纸驱动程序,完善GUI功能 | ||||
| 
 | ||||
| v1.0.5 | ||||
| Add a 3-color e-paper driver for sizes and improve GUI functionality | ||||
| 增加3色电子纸驱动程序,完善GUI功能 | ||||
| 
 | ||||
| v1.0.4 | ||||
| Add a 2-color e-paper driver for sizes under 7.5 inches and improve GUI functionality | ||||
| 增加2色电子纸驱动程序,7.5寸以上,完善GUI功能 | ||||
| 
 | ||||
| v1.0.1 | ||||
| Add a 2-color e-paper driver for sizes under 7.5 inches and improve GUI functionality | ||||
| 增加2色电子纸驱动程序,7.5寸以下,完善GUI功能 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										546
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,546 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x64);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update  function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();   | ||||
| }  | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	  | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function   
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);   | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+112-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+112-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+112-1)%256);    	 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+112-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+112-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+112-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| 
 | ||||
| #define EPD_WIDTH   88  | ||||
| #define EPD_HEIGHT  184 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8    | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );												  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| //GUI display					 
 | ||||
| void EPD_HW_Init_GUI(void);  | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,158 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //2s 
 | ||||
| 		 /************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 
 | ||||
|      /************4 Gray update mode(2s)*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			/************Onder versions do not support this feature*******************/ | ||||
| 			EPD_HW_Init_4G(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Partial update demostration.
 | ||||
| 	//Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //Electronic paper initialization.	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
| 			for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(32,56+24*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         32,56+24*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         32,56+24*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         32,56+24*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         32,56+24*4,Num[1],24,32); //x-E,y-E,DATA-E,Resolution 24*32
 | ||||
|      | ||||
| 			EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif	 | ||||
| 	 | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //E-paper initialization	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
| 			EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
| 			EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
| 			EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
| 			EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
| 			EPD_Dis_PartAll(gImage_p5); //Image 5	
 | ||||
| 			EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
| 			/************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif				 | ||||
| 	 | ||||
| #endif | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(5, 10, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(5, 25, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
| 		Paint_DrawNum(5, 45, 123456789, &Font16, BLACK, WHITE); //11*16.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										1428
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1428
									
								
								ESP32epdx/examples/2-Colors (BW)/0.97/GDEM0097T61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										392
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										392
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,392 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char oldData[2024]; | ||||
| unsigned char oldDataP[256]; | ||||
| unsigned char oldDataA[256]; | ||||
| unsigned char oldDataB[256]; | ||||
| unsigned char oldDataC[256]; | ||||
| unsigned char oldDataD[256]; | ||||
| unsigned char oldDataE[256]; | ||||
| unsigned char partFlag=1; | ||||
| 
 | ||||
| void lcd_chkstatus(void) | ||||
| { | ||||
|   while(isEPD_W21_BUSY==0); | ||||
|                     | ||||
| } | ||||
| //UC8175
 | ||||
| void EPD_Init(void) | ||||
| {  | ||||
|     EPD_W21_RST_0;    // Module reset
 | ||||
|     delay(10);//At least 10ms delay 
 | ||||
|     EPD_W21_RST_1; | ||||
|     delay(10);//At least 10ms delay 
 | ||||
|     lcd_chkstatus(); | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x00);      //panel setting
 | ||||
|     EPD_W21_WriteDATA(0x5f);     //LUT from OTP  
 | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x2A); //IC hidden instructions    
 | ||||
|     EPD_W21_WriteDATA(0x00);  | ||||
|     EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|     lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
|    | ||||
|     EPD_W21_WriteCMD(0X50);     //VCOM AND DATA INTERVAL SETTING      
 | ||||
|     EPD_W21_WriteDATA(0x97);    //WBmode:VBDF 17|D7 VBDW 97 VBDB 57   WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| const unsigned char lut_w[] = | ||||
| { | ||||
| 0x60  ,0x01 ,0x01 ,0x00 ,0x00 ,0x01 , | ||||
| 0x80  ,0x0f ,0x00 ,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 , | ||||
| 
 | ||||
| };   | ||||
| const unsigned char lut_b[] = | ||||
| { | ||||
| 0x90  ,0x01 ,0x01 ,0x00 ,0x00 ,0x01 , | ||||
| 0x40  ,0x0f ,0x00 ,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 , | ||||
| 
 | ||||
| }; | ||||
| void Part_lut_bw(void) | ||||
| { | ||||
|   unsigned int count; | ||||
|   EPD_W21_WriteCMD(0x23); | ||||
|   for(count=0;count<42;count++)       | ||||
|   {EPD_W21_WriteDATA(lut_w[count]);}     | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x24); | ||||
|   for(count=0;count<42;count++)       | ||||
|   {EPD_W21_WriteDATA(lut_b[count]);}           | ||||
| } | ||||
| 
 | ||||
| void EPD_Init_Part(void) | ||||
| { | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   lcd_chkstatus(); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xD2);      | ||||
|   EPD_W21_WriteDATA(0x3F); | ||||
|           | ||||
|   EPD_W21_WriteCMD(0x00);        | ||||
|   EPD_W21_WriteDATA (0x6F);  //from outside
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x01);     //power setting
 | ||||
|   EPD_W21_WriteDATA (0x03);      | ||||
|   EPD_W21_WriteDATA (0x00); | ||||
|   EPD_W21_WriteDATA (0x26);    | ||||
|   EPD_W21_WriteDATA (0x26);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x06);        | ||||
|   EPD_W21_WriteDATA(0x3F); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x2A);      | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x30); | ||||
|   EPD_W21_WriteDATA(0x13); //50Hz
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x50);      | ||||
|   EPD_W21_WriteDATA(0xF2); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x60);      | ||||
|   EPD_W21_WriteDATA(0x22); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x82);      | ||||
|   EPD_W21_WriteDATA(0x12);//-0.1v
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xe3);      | ||||
|   EPD_W21_WriteDATA(0x33); | ||||
| 
 | ||||
|   Part_lut_bw();   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x04);         //power on
 | ||||
|   lcd_chkstatus(); | ||||
|    | ||||
| } | ||||
|    | ||||
| void EPD_DeepSleep(void) | ||||
| { | ||||
|     EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING     
 | ||||
|     EPD_W21_WriteDATA(0xf7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57    WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7  
 | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0X02);   //power off
 | ||||
|     lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|     delay(100); | ||||
|     EPD_W21_WriteCMD(0X07);   //deep sleep
 | ||||
|     EPD_W21_WriteDATA(0xA5); | ||||
| } | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   //update
 | ||||
|   EPD_W21_WriteCMD(0x12);   //DISPLAY update   
 | ||||
|   delay(1);              //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|       EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|     } | ||||
|     EPD_Update();      | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|       EPD_W21_WriteDATA(0xFF);  | ||||
|     } | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|       oldData[i]=0xFF;  | ||||
|     } | ||||
|     EPD_Update();      | ||||
| } | ||||
| 
 | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xFF); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|       oldData[i]=datas[i];  | ||||
|    }    | ||||
|     EPD_Update();      | ||||
| } | ||||
| 
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|     unsigned int i,x_end,y_end; | ||||
|     x_start=x_start-x_start%8; | ||||
|     x_end=x_start+PART_LINE-1;  | ||||
|     y_end=y_start+PART_COLUMN-1; | ||||
|    | ||||
|     EPD_Init_Part();   | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
|     EPD_W21_WriteDATA (y_start);   //y-start      
 | ||||
|     EPD_W21_WriteDATA (y_end);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x00);  | ||||
|    | ||||
|     EPD_W21_WriteCMD(0x10);    //writes Old data to SRAM
 | ||||
|     if(partFlag==1)  | ||||
|     { | ||||
|       partFlag=0; | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|          EPD_W21_WriteDATA(0xFF);  | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldData[i]);    | ||||
|     } | ||||
|      EPD_W21_WriteCMD(0x13);   //writes New data to SRAM.
 | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)     | ||||
|     {    | ||||
|        EPD_W21_WriteDATA(datas[i]);  | ||||
|        oldData[i]=datas[i];      | ||||
|     }  | ||||
|     EPD_Update();    | ||||
| } | ||||
| 
 | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     EPD_Init_Part(); | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|        EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
|     }   | ||||
|        | ||||
|     EPD_Update();       | ||||
| 
 | ||||
| } | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|     unsigned int i,x_end,y_end; | ||||
|     x_start=x_start-x_start%8; | ||||
|     x_end=x_start+PART_LINE-1;  | ||||
|     y_end=y_start+PART_COLUMN*num-1; | ||||
|    | ||||
|     EPD_Init_Part();   | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
|     EPD_W21_WriteDATA (y_start);   //y-start      
 | ||||
|     EPD_W21_WriteDATA (y_end);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x00);  | ||||
|    | ||||
|     EPD_W21_WriteCMD(0x10);    //writes Old data to SRAM
 | ||||
|     if(partFlag==1)  | ||||
|     { | ||||
|       partFlag=0; | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE*num/8;i++)        | ||||
|          EPD_W21_WriteDATA(0xFF);  | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataA[i]);               | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataB[i]);   | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataC[i]);               | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataD[i]); | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataE[i]);                     | ||||
|     }  | ||||
|      | ||||
|     EPD_W21_WriteCMD(0x13);     //writes New data to SRAM.  
 | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|     {      | ||||
|       EPD_W21_WriteDATA(datas_A[i]);   | ||||
|       oldDataA[i]=datas_A[i]; | ||||
|     }          | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|     {      | ||||
|       EPD_W21_WriteDATA(datas_B[i]);   | ||||
|       oldDataB[i]=datas_B[i]; | ||||
|     }  | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|     {      | ||||
|       EPD_W21_WriteDATA(datas_C[i]);   | ||||
|       oldDataC[i]=datas_C[i]; | ||||
|     }  | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|     {      | ||||
|       EPD_W21_WriteDATA(datas_D[i]);   | ||||
|       oldDataD[i]=datas_D[i]; | ||||
|     }  | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|     {      | ||||
|       EPD_W21_WriteDATA(datas_E[i]);   | ||||
|       oldDataE[i]=datas_E[i];  | ||||
|     }  | ||||
|     EPD_Update(); | ||||
|      | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
| 
 | ||||
| }    | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| {  | ||||
|     EPD_W21_RST_0;    // Module reset
 | ||||
|     delay(10);//At least 10ms delay 
 | ||||
|     EPD_W21_RST_1; | ||||
|     delay(10);//At least 10ms delay 
 | ||||
|     lcd_chkstatus(); | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x00);      //panel setting
 | ||||
|     EPD_W21_WriteDATA(0x53);     //180 mirror
 | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x2A); //IC hidden instructions    
 | ||||
|     EPD_W21_WriteDATA(0x00);  | ||||
|     EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|     lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
|    | ||||
|     EPD_W21_WriteCMD(0X50);     //VCOM AND DATA INTERVAL SETTING      
 | ||||
|     EPD_W21_WriteDATA(0x97);    //WBmode:VBDF 17|D7 VBDW 97 VBDB 57   WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| 
 | ||||
| } | ||||
| //GUI
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|       EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(Image[i]);  //Transfer the actual displayed data
 | ||||
|     } | ||||
|     EPD_Update();      | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										31
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   80 | ||||
| #define EPD_HEIGHT  128 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);   | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										143
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/GDEW0102T4.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/GDEW0102T4.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,143 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|              | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Electronic paper initialization.  
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update. 
 | ||||
|       for(i=0;i<6;i++) | ||||
|       { | ||||
|         EPD_Dis_Part_Time(24,4,Num[i],Num[0],gImage_numdot,Num[0],Num[1],5,24,32); //x,y,DATA-A~E,number,Resolution 32*32            
 | ||||
|       }        | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|          | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1    //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.   
 | ||||
|       EPD_Dis_PartAll(gImage_p1);  | ||||
|       EPD_Dis_PartAll(gImage_p2); | ||||
|       EPD_Dis_PartAll(gImage_p3); | ||||
|       EPD_Dis_PartAll(gImage_p4); | ||||
|       EPD_Dis_PartAll(gImage_p5); | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|        | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif | ||||
|    | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif         | ||||
|    | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 25, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 45, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										752
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										752
									
								
								ESP32epdx/examples/2-Colors (BW)/1.02/GDEW0102T4/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,752 @@ | |||
| 
 | ||||
| //24*32
 | ||||
| const unsigned char Num[10][96] = { | ||||
| //0
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X0F,0XFF,0XFF,0XC0,0X01,0XFF, | ||||
| 0XFF,0X80,0X00,0XFF,0XFF,0X00,0X00,0X7F,0XFE,0X0F,0XF8,0X3F,0XFE,0X3F,0XFE,0X3F, | ||||
| 0XFC,0XFF,0XFF,0X1F,0XFC,0XFF,0XFF,0X9F,0XFD,0XFF,0XFF,0XDF,0XFD,0XFF,0XFF,0XDF, | ||||
| 0XFD,0XFF,0XFF,0XDF,0XFD,0XFF,0XFF,0XDF,0XFC,0XFF,0XFF,0X9F,0XFC,0X7F,0XFF,0X1F, | ||||
| 0XFE,0X3F,0XFE,0X3F,0XFE,0X0F,0XF8,0X3F,0XFF,0X00,0X00,0X7F,0XFF,0X80,0X00,0XFF, | ||||
| 0XFF,0XC0,0X01,0XFF,0XFF,0XF8,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //1
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XDF, | ||||
| 0XFF,0XFF,0XFF,0X9F,0XFC,0X00,0X00,0X1F,0XFC,0X00,0X00,0X1F,0XFE,0X00,0X00,0X1F, | ||||
| 0XFE,0X00,0X00,0X1F,0XFF,0X7F,0XFF,0X9F,0XFF,0X7F,0XFF,0XDF,0XFF,0X7F,0XFF,0XDF, | ||||
| 0XFF,0X7F,0XFF,0XDF,0XFF,0X7F,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //2
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X87,0XF8,0XFF, | ||||
| 0XFF,0X01,0XF8,0X1F,0XFE,0X00,0XFC,0X1F,0XFE,0X00,0XFF,0X1F,0XFC,0X78,0X7F,0X9F, | ||||
| 0XFC,0XFE,0X3F,0X9F,0XFC,0XFF,0X3F,0X9F,0XFD,0XFF,0X9F,0X9F,0XFD,0XFF,0X9F,0X9F, | ||||
| 0XFD,0XFF,0XCF,0X9F,0XFD,0XFF,0XE7,0X9F,0XFD,0XFF,0XE7,0X9F,0XFC,0XFF,0XF3,0X9F, | ||||
| 0XFE,0XE7,0XF9,0X9F,0XFE,0X07,0XF8,0X9F,0XFE,0X07,0XFC,0X9F,0XFF,0X07,0XFE,0X1F, | ||||
| 0XFF,0X8F,0XFF,0X1F,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //3
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0XFF,0X8F,0XC0,0XFF, | ||||
| 0XFF,0X07,0X80,0X7F,0XFE,0X03,0X80,0X3F,0XFE,0X01,0X1E,0X3F,0XFC,0X79,0X3F,0XBF, | ||||
| 0XFC,0XFC,0X7F,0X9F,0XFD,0XFC,0X7F,0XDF,0XFD,0XFE,0XFF,0XDF,0XFD,0XFE,0XFF,0XDF, | ||||
| 0XFD,0XFE,0XFF,0XDF,0XFD,0XFE,0XFF,0XDF,0XFD,0XFE,0XFF,0XDF,0XFC,0XCF,0XFF,0X9F, | ||||
| 0XFE,0X0F,0XF8,0X9F,0XFE,0X0F,0XF8,0X3F,0XFF,0X0F,0XF8,0X3F,0XFF,0X9F,0XF8,0X7F, | ||||
| 0XFF,0XFF,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //4
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XEF,0XFF,0XFF,0XF7,0XEF,0XFF,0XFF,0XF7,0XEF, | ||||
| 0XFF,0XFF,0XF7,0XEF,0XFF,0XFF,0XF7,0XCF,0XFC,0X00,0X00,0X0F,0XFC,0X00,0X00,0X0F, | ||||
| 0XFC,0X00,0X00,0X0F,0XFE,0X00,0X00,0X0F,0XFF,0X1F,0XF7,0XCF,0XFF,0X8F,0XF7,0XEF, | ||||
| 0XFF,0XC7,0XF7,0XEF,0XFF,0XE3,0XF7,0XEF,0XFF,0XF1,0XF7,0XEF,0XFF,0XF8,0XF7,0XFF, | ||||
| 0XFF,0XFC,0X77,0XFF,0XFF,0XFE,0X37,0XFF,0XFF,0XFF,0X17,0XFF,0XFF,0XFF,0X87,0XFF, | ||||
| 0XFF,0XFF,0XC7,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //5
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X83,0XFF,0XFC,0XFF,0X00,0XFF, | ||||
| 0XFC,0XFE,0X00,0X7F,0XFC,0XFC,0X00,0X3F,0XFC,0XFC,0X7E,0X3F,0XFC,0XF8,0XFF,0X1F, | ||||
| 0XFC,0XF9,0XFF,0X9F,0XFC,0XFB,0XFF,0XDF,0XFC,0XFB,0XFF,0XDF,0XFC,0XFB,0XFF,0XDF, | ||||
| 0XFC,0XFB,0XFF,0XDF,0XFC,0XFB,0XFF,0XDF,0XFC,0XF9,0XFF,0XDF,0XFC,0XF9,0XFF,0X9F, | ||||
| 0XFC,0XFC,0XF9,0XBF,0XFC,0X1C,0X78,0X3F,0XFC,0X00,0X78,0X3F,0XFF,0XE0,0X78,0X7F, | ||||
| 0XFF,0XFF,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //6
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XFF,0XFF,0XFF,0X00,0XFF, | ||||
| 0XFF,0X3E,0X00,0X7F,0XFE,0X3E,0X00,0X3F,0XFC,0X3E,0X3E,0X3F,0XFC,0X3C,0XFF,0X9F, | ||||
| 0XFC,0X3C,0XFF,0X9F,0XFD,0XFD,0XFF,0XDF,0XFD,0XFD,0XFF,0XDF,0XFD,0XFD,0XFF,0XDF, | ||||
| 0XFD,0XFD,0XFF,0XDF,0XFC,0XFD,0XFF,0XDF,0XFC,0XFC,0XFF,0X9F,0XFE,0X7E,0XFF,0X1F, | ||||
| 0XFE,0X3E,0X7F,0X3F,0XFF,0X0F,0X3C,0X3F,0XFF,0X80,0X00,0X7F,0XFF,0XC0,0X00,0XFF, | ||||
| 0XFF,0XE0,0X01,0XFF,0XFF,0XF8,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //7
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFC,0XFF,0XFF,0XFF, | ||||
| 0XFC,0X7F,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFC,0X8F,0XFF,0XFF,0XFC,0XC7,0XFF,0XFF, | ||||
| 0XFC,0XE1,0XFF,0XFF,0XFC,0XF0,0XFF,0XFF,0XFC,0XFC,0X3F,0XFF,0XFC,0XFE,0X00,0X1F, | ||||
| 0XFC,0XFF,0X00,0X1F,0XFC,0XFF,0XC0,0X1F,0XFC,0XFF,0XF0,0X1F,0XFC,0XFF,0XFC,0X3F, | ||||
| 0XFC,0XFF,0XFF,0XFF,0XFC,0X7F,0XFF,0XFF,0XFC,0X1F,0XFF,0XFF,0XFC,0X0F,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //8
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X87,0XF1,0XFF,0XFF,0X03,0XC0,0X7F, | ||||
| 0XFE,0X03,0XC0,0X7F,0XFE,0X01,0X80,0X3F,0XFE,0X79,0X0F,0X3F,0XFC,0XFC,0X1F,0X9F, | ||||
| 0XFC,0XFE,0X1F,0X9F,0XFD,0XFE,0X3F,0XDF,0XFD,0XFE,0X3F,0XDF,0XFD,0XFE,0X7F,0XDF, | ||||
| 0XFD,0XFC,0X7F,0XDF,0XFD,0XFC,0X7F,0XDF,0XFC,0XF8,0X7F,0XDF,0XFC,0XF8,0X7F,0X9F, | ||||
| 0XFE,0X70,0X3F,0X9F,0XFE,0X01,0X8F,0X3F,0XFE,0X01,0X80,0X3F,0XFF,0X03,0XC0,0X7F, | ||||
| 0XFF,0X87,0XC0,0X7F,0XFF,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}, | ||||
| //9
 | ||||
| { | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X1F,0XFF,0XFF,0XC0,0X03,0XFF, | ||||
| 0XFF,0X00,0X01,0XFF,0XFF,0X00,0X00,0XFF,0XFE,0X3E,0X60,0X7F,0XFE,0X7F,0X3C,0X3F, | ||||
| 0XFC,0XFF,0XBF,0X3F,0XFD,0XFF,0X9F,0X9F,0XFD,0XFF,0XDF,0X9F,0XFD,0XFF,0XDF,0XDF, | ||||
| 0XFD,0XFF,0XDF,0XDF,0XFD,0XFF,0XDF,0XDF,0XFD,0XFF,0XDF,0XDF,0XFC,0XFF,0X9E,0X1F, | ||||
| 0XFC,0X7F,0X9E,0X1F,0XFE,0X3E,0X1E,0X1F,0XFE,0X00,0X3E,0X3F,0XFF,0X00,0X3E,0X3F, | ||||
| 0XFF,0X80,0X7F,0XFF,0XFF,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,} | ||||
| }; | ||||
| const unsigned char gImage_numdot[96] = { /* 0X01,0X01,0X20,0X00,0X40,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XF3,0XFF,0XFF,0X87,0XE1,0XFF, | ||||
| 0XFF,0X87,0XE1,0XFF,0XFF,0X87,0XE1,0XFF,0XFF,0XCF,0XF3,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| }; | ||||
| 
 | ||||
| const unsigned char gImage_basemap[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XDF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFB,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| const unsigned char gImage_1[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | ||||
| 0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X00,0X33,0X00,0X00,0X3F,0XFF, | ||||
| 0X00,0X00,0X70,0X00,0X00,0X4C,0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X00,0X48, | ||||
| 0X00,0X00,0X7F,0XFF,0X00,0X00,0X70,0X00,0X00,0X48,0X00,0X00,0X7F,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X7F,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, | ||||
| 0XFF,0XFF,0X00,0X00,0X3C,0X20,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X7E,0X20, | ||||
| 0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X43,0X20,0X00,0X49,0X00,0X00,0XFF,0XFF, | ||||
| 0X00,0X00,0X41,0XA0,0X00,0X49,0X00,0X01,0XFF,0XFF,0X00,0X00,0X40,0XE0,0X00,0X49, | ||||
| 0X00,0X01,0XFF,0XFF,0X00,0X00,0X60,0X60,0X00,0X49,0X00,0X01,0XFF,0XFF,0X00,0X00, | ||||
| 0X20,0X20,0X00,0X7F,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X3F,0XC0,0X00,0X00,0X00,0X07,0XFF,0XFF, | ||||
| 0X00,0X00,0X7F,0XE0,0X00,0X30,0X00,0X07,0XFF,0XFF,0X00,0X00,0X40,0X20,0X00,0X48, | ||||
| 0X00,0X07,0XFF,0XFF,0X00,0X00,0X40,0X20,0X00,0X48,0X00,0X0F,0XFF,0XFF,0X00,0X00, | ||||
| 0X40,0X20,0X00,0X48,0X00,0X0F,0XFF,0XFF,0X00,0X00,0X7F,0XE0,0X00,0X7F,0X00,0X0F, | ||||
| 0XFF,0XFF,0X00,0X00,0X3F,0XC0,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X1F,0XFF,0XFF, | ||||
| 0X00,0X00,0X00,0X00,0X00,0X0E,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0X20,0X00,0X34, | ||||
| 0X00,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X20,0X00,0X44,0X00,0X3F,0XFF,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X34,0X00,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X0E,0X00,0X3F, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X7F,0XFF,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X7F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF, | ||||
| 0X00,0X00,0X7F,0XE0,0X00,0X30,0X00,0XFF,0XFF,0XFF,0X00,0X00,0X7F,0XE0,0X00,0X48, | ||||
| 0X00,0XFF,0XFF,0XFF,0X00,0X00,0X30,0X00,0X00,0X48,0X00,0XFF,0XFF,0XFF,0X00,0X00, | ||||
| 0X10,0X00,0X00,0X48,0X01,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0X01,0XFF, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X00,0X01,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X04,0X03,0XFF,0XFF,0XFF, | ||||
| 0X00,0X00,0X00,0X00,0X00,0X04,0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X04, | ||||
| 0X03,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X49,0X07,0XFF, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X49,0X07,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00, | ||||
| 0X00,0X49,0X0F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X49,0X0F,0XFF,0XFF,0XFF, | ||||
| 0X00,0X00,0X00,0X00,0X00,0X7F,0X0F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, | ||||
| 0X1F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0X00,0X30,0X00,0X1F,0X06,0X07,0XC3,0XF9,0XCF,0XFF,0X00,0X30,0X00,0X1F,0X06,0X07, | ||||
| 0XC3,0XF9,0XCF,0XFF,0X00,0X33,0XFF,0X9F,0XE0,0X60,0XC0,0X1E,0X0F,0XFF,0X00,0X33, | ||||
| 0XFF,0X9F,0XE0,0X60,0XC0,0X1E,0X0F,0XFF,0X00,0X33,0XFF,0X9F,0XE0,0X60,0XC0,0X1E, | ||||
| 0X0F,0XFF,0X00,0X33,0X81,0X9C,0XE7,0XE7,0XC7,0XE7,0XFF,0XFF,0X00,0X33,0X81,0X9C, | ||||
| 0XE7,0XE7,0XC7,0XE7,0XFF,0XFF,0X00,0X33,0X81,0X9F,0XFE,0X18,0X04,0XF8,0X3F,0XFF, | ||||
| 0X00,0X33,0X81,0X9F,0XFE,0X18,0X04,0XF8,0X3F,0XFF,0X00,0X33,0X81,0X9F,0XFF,0XFF, | ||||
| 0X00,0X00,0X3F,0XFF,0X00,0X33,0X81,0X9F,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0X00,0X33, | ||||
| 0X81,0X9F,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0X00,0X33,0XFF,0X9F,0XE6,0X67,0X3F,0X19, | ||||
| 0XCF,0XFF,0X00,0X33,0XFF,0X9F,0XE6,0X67,0X3F,0X19,0XCF,0XFF,0X00,0X30,0X00,0X1C, | ||||
| 0X00,0X18,0X3B,0X1F,0XFF,0XFF,0X00,0X3F,0XFF,0XFC,0XE7,0X80,0X3F,0X1F,0XCF,0XFF, | ||||
| 0X00,0X3F,0XFF,0XFC,0XE7,0X80,0X3F,0X1F,0XCF,0XFF,0X00,0X3F,0XFF,0XFC,0XE7,0X80, | ||||
| 0X3F,0X1F,0XCF,0XFF,0X00,0X3F,0XFE,0X00,0XE0,0X18,0X00,0X06,0X0F,0XFF,0X00,0X3F, | ||||
| 0XFE,0X00,0XE0,0X18,0X00,0X06,0X0F,0XFF,0X00,0X30,0X60,0X60,0XF9,0XFF,0X03,0XF8, | ||||
| 0X0F,0XFF,0X00,0X30,0X60,0X60,0XF9,0XFF,0X03,0XF8,0X0F,0XFF,0X00,0X30,0X60,0X60, | ||||
| 0XF9,0XFF,0X03,0XF8,0X0F,0XFF,0X00,0X33,0XE7,0X83,0X07,0XFF,0XF8,0XE0,0X0F,0XFF, | ||||
| 0X00,0X33,0XE7,0X83,0X07,0XFF,0XF8,0XE0,0X0F,0XFF,0X00,0X30,0X7F,0XE0,0X18,0X78, | ||||
| 0X04,0X1E,0X0F,0XFF,0X00,0X30,0X7F,0XE0,0X18,0X78,0X04,0X1E,0X0F,0XFF,0X00,0X3F, | ||||
| 0XF8,0X00,0XF8,0X18,0X07,0X00,0X0F,0XFF,0X00,0X3F,0XF8,0X00,0XF8,0X18,0X07,0X00, | ||||
| 0X0F,0XFF,0X00,0X3F,0X9E,0X7C,0XF8,0X7F,0X3F,0XFF,0XCF,0XFF,0X00,0X3F,0X9E,0X7C, | ||||
| 0XF8,0X7F,0X3F,0XFF,0XCF,0XFF,0X00,0X33,0XFE,0X1F,0XE0,0X00,0X3F,0XE0,0X3F,0XFF, | ||||
| 0X00,0X33,0XFE,0X1F,0XE0,0X00,0X3F,0XE0,0X3F,0XFF,0X00,0X3C,0X61,0XFF,0X19,0XFF, | ||||
| 0X03,0XE1,0XCF,0XFF,0X00,0X3C,0X61,0XFF,0X19,0XFF,0X03,0XE1,0XCF,0XFF,0X00,0X3C, | ||||
| 0X61,0XFF,0X19,0XFF,0X03,0XE1,0XCF,0XFF,0X00,0X3F,0X9F,0X80,0XE6,0X60,0XC0,0X18, | ||||
| 0X0F,0XFF,0X00,0X3F,0X9F,0X80,0XE6,0X60,0XC0,0X18,0X0F,0XFF,0X00,0X3F,0XFF,0XFC, | ||||
| 0XF9,0X9F,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFC,0XF9,0X9F,0XFF,0XFF,0XFF,0XFF, | ||||
| 0X00,0X3F,0XFF,0XFC,0XF9,0X9F,0XFF,0XFF,0XFF,0XFF,0X00,0X30,0X00,0X1C,0XE6,0X67, | ||||
| 0X38,0X00,0X0F,0XFF,0X00,0X30,0X00,0X1C,0XE6,0X67,0X38,0X00,0X0F,0XFF,0X00,0X33, | ||||
| 0XFF,0X9C,0X06,0X7F,0XFB,0XFF,0XCF,0XFF,0X00,0X33,0XFF,0X9C,0X06,0X7F,0XFB,0XFF, | ||||
| 0XCF,0XFF,0X00,0X33,0X81,0X9C,0XE6,0X60,0X3B,0X01,0XCF,0XFF,0X00,0X33,0X81,0X9C, | ||||
| 0XE6,0X60,0X3B,0X01,0XCF,0XFF,0X00,0X33,0X81,0X9F,0X1E,0X78,0X3B,0X01,0XCF,0XFF, | ||||
| 0X00,0X33,0X81,0X9F,0X1E,0X78,0X3B,0X01,0XCF,0XFF,0X00,0X33,0X81,0X9C,0XFF,0X87, | ||||
| 0XFB,0X01,0XCF,0XFF,0X00,0X33,0X81,0X9C,0XFF,0X87,0XFB,0X01,0XCF,0XFF,0X00,0X33, | ||||
| 0XFF,0X9C,0XE6,0X78,0XFB,0XFF,0XCF,0XFF,0X00,0X33,0XFF,0X9C,0XE6,0X78,0XFB,0XFF, | ||||
| 0XCF,0XFF,0X00,0X33,0XFF,0X9C,0XE6,0X78,0XFB,0XFF,0XCF,0XFF,0X00,0X30,0X00,0X1C, | ||||
| 0X00,0X67,0X38,0X00,0X0F,0XFF,0X00,0X30,0X00,0X1C,0X00,0X67,0X38,0X00,0X0F,0XFF, | ||||
| 0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00, | ||||
| 0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| }; | ||||
| const unsigned char gImage_2[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X0F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X80,0X17,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF, | ||||
| 0XFE,0X40,0X27,0XFF,0XFF,0XFF,0XFF,0XA0,0X38,0XFF,0XFE,0X10,0X87,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XA0,0X3A,0XFF,0XFE,0X09,0X07,0XFF,0XFF,0XFF,0XFF,0XA0,0X3A,0XFF,0XFE,0X26, | ||||
| 0X47,0XFF,0XFF,0XFF,0XFF,0XA0,0X3A,0XFF,0XFE,0X40,0X27,0XFF,0XFF,0XFF,0XFF,0XA0, | ||||
| 0X38,0XFF,0XFE,0X80,0X17,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X0F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XFF,0X01,0XFF,0XFF,0XF1,0XFC, | ||||
| 0X07,0XFF,0XFF,0XF1,0XFE,0X00,0XFF,0XFF,0XE1,0XF8,0X03,0XFF,0XFF,0XC1,0XFC,0X00, | ||||
| 0X7F,0XFF,0XC1,0XF0,0X01,0XFF,0XFF,0X81,0XFC,0X38,0X7F,0XFF,0XC1,0XF0,0XE1,0XFF, | ||||
| 0XFE,0X01,0XF8,0X7C,0X3F,0XFF,0X81,0XE1,0XF0,0XFF,0XFE,0X01,0XF8,0XFE,0X38,0XFF, | ||||
| 0X01,0XE3,0XF8,0XFF,0XFE,0X11,0XF8,0XFE,0X38,0XFF,0X01,0XE3,0XF8,0XFF,0XFF,0XF1, | ||||
| 0XF8,0XFE,0X38,0XFE,0X11,0XE3,0XF8,0XFF,0XFF,0XF1,0XF8,0XFE,0X3F,0XFC,0X31,0XE3, | ||||
| 0XF8,0XFF,0XFF,0XF1,0XF8,0XFE,0X3F,0XFC,0X31,0XE3,0XF8,0XFF,0XFF,0XF1,0XF8,0XFE, | ||||
| 0X3F,0XF8,0X71,0XE3,0XF8,0XFF,0XFF,0XF1,0XF8,0XFE,0X3F,0XF0,0XF1,0XE3,0XF8,0XFF, | ||||
| 0XFF,0XF1,0XF8,0XFE,0X3F,0XF0,0X00,0X63,0XF8,0XFF,0XFF,0XF1,0XF8,0XFE,0X3F,0XF0, | ||||
| 0X00,0X63,0XF8,0XFF,0XFF,0XF1,0XF8,0X7C,0X3F,0XF0,0X00,0X61,0XF0,0XFF,0XFF,0XF1, | ||||
| 0XFC,0X38,0X7F,0XFF,0XF1,0XF0,0XE1,0XFF,0XFF,0XF1,0XFC,0X00,0X78,0XFF,0XF1,0XF0, | ||||
| 0X01,0XFF,0XFF,0XF1,0XFE,0X00,0XF8,0XFF,0XF1,0XF8,0X03,0XFF,0XFF,0XF1,0XFF,0X01, | ||||
| 0XF8,0XFF,0XF1,0XFC,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X39,0XCF,0X9F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X79,0X8F,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE, | ||||
| 0X73,0X0E,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XF3,0XCF,0X9F,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFC,0XF3,0XCF,0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XE7,0XCF, | ||||
| 0X9F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF9,0XE7,0XCF,0X9F,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XBD,0XFF,0XBF,0XFF,0XFF,0XBF,0XFF,0XFF, | ||||
| 0XFF,0XF7,0X5D,0XFF,0XBF,0XFF,0XFF,0XBF,0XFF,0XFF,0XFF,0XFB,0X5B,0X1C,0XA1,0XC7, | ||||
| 0X1C,0XB1,0XBB,0XFF,0XFF,0XFB,0X5A,0XEB,0X2E,0XBA,0XEB,0X2E,0XBB,0XFF,0XFF,0XFA, | ||||
| 0XEA,0X0B,0XAE,0X83,0X3B,0XB0,0XD7,0XFF,0XFF,0XFA,0XEA,0XFB,0XAE,0XBF,0XDB,0XAE, | ||||
| 0XD7,0XFF,0XFF,0XFD,0XF6,0XEB,0X2E,0XBA,0XEB,0X2C,0XEF,0XFF,0XFF,0XFD,0XF7,0X1C, | ||||
| 0XAE,0XC7,0X1C,0XB2,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE, | ||||
| 0X7F,0X3F,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X63,0X7F,0XF9,0X9F,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XC1,0XFF,0XF9,0XF9,0X30,0XE1,0X99,0XFF,0XFF,0XFC,0X80,0X9F, | ||||
| 0XFC,0X39,0X32,0X64,0XDB,0XFF,0XFF,0XFF,0X80,0XFF,0XFF,0X99,0X32,0X64,0XD3,0XFF, | ||||
| 0XFF,0XFF,0XC1,0XFF,0XF9,0X99,0X32,0X64,0XC7,0XFF,0XFF,0XFF,0XE3,0XFF,0XFC,0X3C, | ||||
| 0X32,0X64,0XE7,0XFF,0XFF,0XFF,0X7F,0X7F,0XFF,0XFF,0XFF,0XFF,0XEF,0XFF,0XFF,0XFE, | ||||
| 0X77,0X3F,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| }; | ||||
| const unsigned char gImage_p1[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XA7,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFD,0XF8,0X3F,0XCF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFD,0XF0,0X1F,0XCF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XFD,0XE7,0XCF,0XCF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XEF, | ||||
| 0XEF,0XCF,0X83,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XEF,0XEF,0XCF,0X7F,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFD,0XE7,0XEF,0XCF,0X7F,0XFF,0XF8,0XFF,0XFF,0XFF,0XFC,0X03,0XEF,0XCF, | ||||
| 0X7F,0XFF,0XFB,0XFF,0XFF,0XFF,0XFC,0X03,0X0F,0XCF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XEF,0XCD,0X03,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0XFE,0XEF,0XCF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XF8,0X00,0X0F,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XF8,0X00,0X0F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0X83,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFE,0X3E,0XEF,0XCF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFF,0XC6,0XFF,0XCF,0XBF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF0, | ||||
| 0XFF,0XCC,0X03,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF9,0XFF,0XCF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFC,0X3F,0XCE,0XF7,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0X18,0X1F,0XCC,0XF3,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFE,0X03,0XCF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFC,0XE7, | ||||
| 0XEF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFD,0XF7,0XEF,0XCD,0XFB,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFD,0XF7,0XEF,0XCE,0XF7,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF, | ||||
| 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0X1F,0X8F,0XCF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFE,0X07,0X8F,0XCF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFC,0XE3,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XF9,0XEF,0XCF,0X83,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFD,0XFC,0XEF,0XCF,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFE,0X6F,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X2F,0XCF,0X7F,0XFF,0XFE,0X07,0XFF,0XFF,0XFC,0X1F, | ||||
| 0X8F,0XCF,0X03,0XFF,0XFC,0X03,0XFF,0XFF,0XFE,0X1F,0XCF,0XCF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCD,0X03,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X97,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X5B,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCC,0X03,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XB7,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X7B,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X7B,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0X87,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X83,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XE0, | ||||
| 0X3F,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0X5B,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0XA7,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0X1F,0XC7,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0X3F,0XE7,0XCC,0X03,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0X1F, | ||||
| 0XC7,0XCE,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0X3F,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0XC7,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XE0,0X3F,0XCF, | ||||
| 0XFB,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC7,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCE,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, | ||||
| 0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XE3,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF1,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| }; | ||||
| 
 | ||||
| const unsigned char gImage_p2[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XA7,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFE,0XEF,0XCF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XF8,0X00,0X0F,0XCF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XF8,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0X83,0XFF,0XFF,0X01,0XFF,0XFF,0XFE,0X3E,0XEF,0XCF,0X7F,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFF,0X8E,0XEF,0XCF,0X7F,0XFF,0XF8,0XFF,0XFF,0XFF,0XFF,0XC6,0XFF,0XCF, | ||||
| 0X7F,0XFF,0XFB,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XCF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XF9,0XFF,0XCF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XEF,0XCD,0X03,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0XFE,0XEF,0XCF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XF8,0X00,0X0F,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XF8,0X00,0X0F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0X83,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFE,0X3E,0XEF,0XCF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFF,0XC6,0XFF,0XCF,0XBF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF0, | ||||
| 0XFF,0XCC,0X03,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF9,0XFF,0XCF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFC,0X3F,0XCE,0XF7,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0X18,0X1F,0XCC,0XF3,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFE,0X03,0XCF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFC,0XE7, | ||||
| 0XEF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFD,0XF7,0XEF,0XCD,0XFB,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFD,0XF7,0XEF,0XCE,0XF7,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF, | ||||
| 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0X1F,0X8F,0XCF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFE,0X07,0X8F,0XCF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFC,0XE3,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XF9,0XEF,0XCF,0X83,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFD,0XFC,0XEF,0XCF,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFE,0X6F,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X2F,0XCF,0X7F,0XFF,0XFE,0X07,0XFF,0XFF,0XFC,0X1F, | ||||
| 0X8F,0XCF,0X03,0XFF,0XFC,0X03,0XFF,0XFF,0XFE,0X1F,0XCF,0XCF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCD,0X03,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X97,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X5B,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCC,0X03,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XB7,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X7B,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X7B,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0X87,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X83,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XE0, | ||||
| 0X3F,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0X5B,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0XA7,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0X1F,0XC7,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0X3F,0XE7,0XCC,0X03,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0X1F, | ||||
| 0XC7,0XCE,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0X3F,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0XC7,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XE0,0X3F,0XCF, | ||||
| 0XFB,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC7,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCE,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, | ||||
| 0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XE3,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF1,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| }; | ||||
| const unsigned char gImage_p3[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XCF,0XA7,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFE,0X03,0XCF,0XCF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7, | ||||
| 0XEF,0XCF,0X83,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF,0XF8,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF, | ||||
| 0X7F,0XFF,0XFB,0XFF,0XFF,0XFF,0XFE,0X3F,0X1F,0XCF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XEF,0XCD,0X03,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0XFE,0XEF,0XCF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XF8,0X00,0X0F,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XF8,0X00,0X0F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0X83,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFE,0X3E,0XEF,0XCF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFF,0XC6,0XFF,0XCF,0XBF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF0, | ||||
| 0XFF,0XCC,0X03,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XF9,0XFF,0XCF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFC,0X3F,0XCE,0XF7,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0X18,0X1F,0XCC,0XF3,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFE,0X03,0XCF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFC,0XE7, | ||||
| 0XEF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFD,0XF7,0XEF,0XCD,0XFB,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFD,0XF7,0XEF,0XCE,0XF7,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF, | ||||
| 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0X1F,0X8F,0XCF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFE,0X07,0X8F,0XCF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFC,0XE3,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XF9,0XEF,0XCF,0X83,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFD,0XFC,0XEF,0XCF,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFE,0X6F,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X2F,0XCF,0X7F,0XFF,0XFE,0X07,0XFF,0XFF,0XFC,0X1F, | ||||
| 0X8F,0XCF,0X03,0XFF,0XFC,0X03,0XFF,0XFF,0XFE,0X1F,0XCF,0XCF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCD,0X03,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X97,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X5B,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCC,0X03,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XB7,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X7B,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X7B,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0X87,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X83,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XE0, | ||||
| 0X3F,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0X5B,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0XA7,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0X1F,0XC7,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0X3F,0XE7,0XCC,0X03,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0X1F, | ||||
| 0XC7,0XCE,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0X3F,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0XC7,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XE0,0X3F,0XCF, | ||||
| 0XFB,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC7,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCE,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, | ||||
| 0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XE3,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF1,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| }; | ||||
| const unsigned char gImage_p4[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XCF,0XA7,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFE,0X03,0XCF,0XCF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7, | ||||
| 0XEF,0XCF,0X83,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF,0XF8,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF, | ||||
| 0X7F,0XFF,0XFB,0XFF,0XFF,0XFF,0XFE,0X3F,0X1F,0XCF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFC, | ||||
| 0X3F,0XCD,0X03,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XFE,0X03,0XCF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X83,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XBF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFE,0X3F, | ||||
| 0X1F,0XCC,0X03,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFC,0X3F,0XCE,0XF7,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0X18,0X1F,0XCC,0XF3,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFE,0X03,0XCF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFC,0XE7, | ||||
| 0XEF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFD,0XF7,0XEF,0XCD,0XFB,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFD,0XF7,0XEF,0XCE,0XF7,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF, | ||||
| 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0X1F,0X8F,0XCF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFE,0X07,0X8F,0XCF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFC,0XE3,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XF9,0XEF,0XCF,0X83,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFD,0XFC,0XEF,0XCF,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFE,0X6F,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X2F,0XCF,0X7F,0XFF,0XFE,0X07,0XFF,0XFF,0XFC,0X1F, | ||||
| 0X8F,0XCF,0X03,0XFF,0XFC,0X03,0XFF,0XFF,0XFE,0X1F,0XCF,0XCF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCD,0X03,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X97,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X5B,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCC,0X03,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XB7,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X7B,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X7B,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0X87,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X83,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XE0, | ||||
| 0X3F,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0X5B,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0XA7,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0X1F,0XC7,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0X3F,0XE7,0XCC,0X03,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0X1F, | ||||
| 0XC7,0XCE,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0X3F,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0XC7,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XE0,0X3F,0XCF, | ||||
| 0XFB,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC7,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCE,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, | ||||
| 0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XE3,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF1,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| }; | ||||
| const unsigned char gImage_p5[1280] = { /* 0X81,0X01,0X80,0X00,0X50,0X00, */ | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0X5B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XCF,0XA7,0XFF,0XFB,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XF8,0XFF,0XFF,0XFF,0XFE,0X03,0XCF,0XCF,0XFF,0XFF, | ||||
| 0XFC,0X3F,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7, | ||||
| 0XEF,0XCF,0X83,0XFF,0XFF,0X01,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XFC,0X3F, | ||||
| 0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF,0XF8,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF, | ||||
| 0X7F,0XFF,0XFB,0XFF,0XFF,0XFF,0XFE,0X3F,0X1F,0XCF,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFF,0XFC, | ||||
| 0X3F,0XCD,0X03,0XFF,0XF8,0XEF,0XFF,0XFF,0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XF8,0XEF, | ||||
| 0XFF,0XFF,0XFE,0X03,0XCF,0XCF,0XFF,0XFF,0XFC,0X07,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0X81,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X83,0XFF,0XFF,0XF9,0XFF,0XFF, | ||||
| 0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFD,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XBF,0XFF,0XFF,0XFD,0XFF,0XFF,0XFE,0X3F, | ||||
| 0X1F,0XCC,0X03,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFC,0X3F,0XCE,0XF7,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0X18,0X1F,0XCC,0XF3,0XFF, | ||||
| 0XF8,0X1F,0XFF,0XFF,0XFE,0X03,0XCF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFC,0XE7, | ||||
| 0XEF,0XCD,0XFB,0XFF,0XFB,0XDF,0XFF,0XFF,0XFD,0XF7,0XEF,0XCD,0XFB,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFD,0XF7,0XEF,0XCE,0XF7,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF, | ||||
| 0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0X0F,0XCF,0XFF,0XFF,0XFC,0XE3,0XFF,0XFF, | ||||
| 0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF8,0XC1,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XF9,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0X9D,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFB,0XB9,0XFF,0XFF,0XFF,0XFC,0X3F,0XCF,0XFF,0XFF,0XF8,0X31, | ||||
| 0XFF,0XFF,0XFF,0X18,0X1F,0XCF,0XFF,0XFF,0XFC,0X73,0XFF,0XFF,0XFE,0X03,0XCF,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XE7,0XEF,0XCF,0X83,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFD,0XF7,0XEF,0XCF,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFD,0XF7,0XEF,0XCF,0X7F,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0XEF,0XCF,0X7F,0XFF,0XFE,0X07,0XFF,0XFF,0XFC,0X3F, | ||||
| 0X0F,0XCF,0X03,0XFF,0XFC,0X03,0XFF,0XFF,0XFE,0X3F,0X1F,0XCF,0XFF,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCD,0X03,0XFF,0XF8,0X01,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, | ||||
| 0X0F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X0F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFE,0XFF,0XEF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFF,0XEF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X97,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X5B,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X5B,0XFF,0XF8,0X01, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCC,0X03,0XFF, | ||||
| 0XFB,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XB7,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XCF,0X7B,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X7B,0XFF,0XFC,0X03, | ||||
| 0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0X87,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X83,0XFF, | ||||
| 0XF9,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0X57,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XE0, | ||||
| 0X3F,0XCF,0X5B,0XFF,0XFB,0XFD,0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0X5B,0XFF,0XF9,0XF9, | ||||
| 0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0XA7,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0X1F,0XC7,0XCF, | ||||
| 0XFF,0XFF,0XFE,0X07,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0X3F,0XE7,0XCF,0XFF,0XFF,0XFE,0XC3,0XFF,0XFF,0XFF,0X3F,0XE7,0XCF,0XFF,0XFF, | ||||
| 0XF8,0XC1,0XFF,0XFF,0XFF,0X3F,0XE7,0XCC,0X03,0XFF,0XF9,0XD9,0XFF,0XFF,0XFF,0X1F, | ||||
| 0XC7,0XCE,0XFF,0XFF,0XFB,0XDD,0XFF,0XFF,0XFF,0X8F,0X8F,0XCF,0X3F,0XFF,0XFB,0XFD, | ||||
| 0XFF,0XFF,0XFF,0XC0,0X1F,0XCF,0XC7,0XFF,0XF9,0XF9,0XFF,0XFF,0XFF,0XE0,0X3F,0XCF, | ||||
| 0XFB,0XFF,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XC7,0XFF,0XFE,0X07,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCE,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00, | ||||
| 0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8F,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0X1F,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XE3,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XCF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F, | ||||
| 0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XF1,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF, | ||||
| 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, | ||||
| 0XFF,0XFF,0XFF,0XCF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XFF,0XFF, | ||||
| }; | ||||
							
								
								
									
										379
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										379
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,379 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen refresh initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen refresh update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //Partial refresh update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xFF);    | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen refresh display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial refresh of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial refresh display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial refresh display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function   
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial refresh write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);   | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)%256);    	 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+24-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| 
 | ||||
| #define EPD_WIDTH   192  | ||||
| #define EPD_HEIGHT  176 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8  | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );												  | ||||
| 
 | ||||
| //GUI display					 
 | ||||
| void EPD_HW_Init_GUI(void);  | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,149 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //2s 
 | ||||
| 		 /************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	 | ||||
| 	#if 1 //Partial update demostration.
 | ||||
| 	//Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //Electronic paper initialization.	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
| 			for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_Time(64,40+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
| 												64,40+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
| 												64,40+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
| 												64,40+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
| 												64,40+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
|      | ||||
| 			EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif	 | ||||
| 	 | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //E-paper initialization	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
| 			EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
| 			EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
| 			EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
| 			EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
| 			EPD_Dis_PartAll(gImage_p5); //Image 5	
 | ||||
| 			EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
| 			/************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif				 | ||||
| 	 | ||||
| #endif | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 100, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 110, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 125, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 145, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										2452
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2452
									
								
								ESP32epdx/examples/2-Colors (BW)/1.22/GDEM0122T61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										378
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										378
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,378 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xFF);    | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();	  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function   
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);   | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										35
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| 
 | ||||
| #define EPD_WIDTH   200   | ||||
| #define EPD_HEIGHT  200 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );												  | ||||
| //GUI display					 
 | ||||
| void EPD_HW_Init_GUI(void);  | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,153 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
| 		/*	EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //2s */
 | ||||
| 		 /************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_2); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	 | ||||
| 	#if 1 //Partial update demostration.
 | ||||
| 	//Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //Electronic paper initialization.	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
| 			for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_Time(64,56+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
| 												64,56+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
| 												64,56+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
| 												64,56+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
| 												64,56+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
|      | ||||
| 			EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif	 | ||||
| 	 | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //E-paper initialization	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
| 			EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
| 			EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
| 			EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
| 			EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
| 			EPD_Dis_PartAll(gImage_p5); //Image 5	
 | ||||
| 			EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
| 			/************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif				 | ||||
| 	 | ||||
| #endif | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 100, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 110, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 125, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 145, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3457
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3457
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEM0154I61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										537
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										537
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,537 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x64);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xFF);    | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }   | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function   
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);   | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| 
 | ||||
| #define EPD_WIDTH   200   | ||||
| #define EPD_HEIGHT  200 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );												  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| //GUI display					 
 | ||||
| void EPD_HW_Init_GUI(void);  | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,163 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
| 		/*	EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //2s */
 | ||||
| 		 /************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 
 | ||||
|      /************4 Gray update mode(2s)*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			/************Onder versions do not support this feature*******************/ | ||||
| 			EPD_HW_Init_4G(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Partial update demostration.
 | ||||
| 	//Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //Electronic paper initialization.	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
| 			for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_Time(64,56+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
| 												64,56+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
| 												64,56+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
| 												64,56+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
| 												64,56+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
|      | ||||
| 			EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif	 | ||||
| 	 | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
| 	//After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
| 	//////////////////////Partial update time demo/////////////////////////////////////
 | ||||
| 			EPD_HW_Init(); //E-paper initialization	
 | ||||
| 			EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
| 			EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
| 			EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
| 			EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
| 			EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
| 			EPD_Dis_PartAll(gImage_p5); //Image 5	
 | ||||
| 			EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 			EPD_HW_Init(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif | ||||
| 	 | ||||
| 	#if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
| 			/************Full display(2s)*******************/ | ||||
| 			EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //2s 
 | ||||
| 	#endif				 | ||||
| 	 | ||||
| #endif | ||||
| 	 | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 100, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 110, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 125, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 145, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3457
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3457
									
								
								ESP32epdx/examples/2-Colors (BW)/1.54/GDEY0154D67/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										396
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										396
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,396 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										34
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   128  | ||||
| #define EPD_HEIGHT  250 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| 
 | ||||
| //GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,141 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_2); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.     
 | ||||
| 
 | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(24,72+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         24,72+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         24,72+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         24,72+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         24,72+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEM0213I61/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,600 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update 1 initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update 1 update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Fast update 2 initialization
 | ||||
| void EPD_HW_Init_Fast2(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x5A);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| //Fast 2 display
 | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(*datas); | ||||
|       datas++; | ||||
|    }   | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    }    | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   128  | ||||
| #define EPD_HEIGHT  250 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,150 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 0		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(24,72+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         24,72+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         24,72+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         24,72+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         24,72+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213B74/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										250
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,250 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| ///////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| 
 | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										23
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,23 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   128  | ||||
| #define EPD_HEIGHT  250 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| 
 | ||||
| //GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,109 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_2); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.     
 | ||||
| 
 | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2798
									
								
								ESP32epdx/examples/2-Colors (BW)/2.13/GDEY0213D32LT/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										438
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										438
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,438 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char oldData[2888]; | ||||
| unsigned char oldDataP[256]; | ||||
| unsigned char oldDataA[256]; | ||||
| unsigned char oldDataB[256]; | ||||
| unsigned char oldDataC[256]; | ||||
| unsigned char oldDataD[256]; | ||||
| unsigned char oldDataE[256]; | ||||
| unsigned char partFlag=1; | ||||
| 
 | ||||
| void lcd_chkstatus(void) | ||||
| { | ||||
|   while(isEPD_W21_BUSY==0); | ||||
|                     | ||||
| } | ||||
| //UC8151D
 | ||||
| void EPD_Init(void) | ||||
| {	 | ||||
| 	 unsigned char i; | ||||
| 	 for(i=0;i<3;i++) | ||||
| 	 { | ||||
| 		EPD_W21_RST_0;		// Module reset
 | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 		EPD_W21_RST_1; | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 	  }	 | ||||
|     lcd_chkstatus();  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x00);			//panel setting
 | ||||
| 		EPD_W21_WriteDATA(0x1f);		//LUT from OTP£¬KW-BF   KWR-AF	BWROTP 0f	BWOTP 1f
 | ||||
|     EPD_W21_WriteDATA(0x0D);	 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x61);			//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH);     	  | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT/256); | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT%256);  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x04);   | ||||
| 		lcd_chkstatus();//waiting for the electronic paper IC to release the idle signal
 | ||||
| 	 | ||||
| 		EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0x97);		//WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| } | ||||
| 
 | ||||
| const unsigned char lut_vcom1[] ={ | ||||
| 0x00	,0x19	,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 | ||||
| 	,0x00	,0x00,					}; | ||||
| const unsigned char lut_ww1[] ={ | ||||
| 0x00	,0x19	,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,}; | ||||
| const unsigned char lut_bw1[] ={ | ||||
| 0x80	,0x19	,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,	}; | ||||
| const unsigned char lut_wb1[] ={ | ||||
| 0x40	,0x19	,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,	}; | ||||
| const unsigned char lut_bb1[] ={ | ||||
| 0x00	,0x19	,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,	}; | ||||
| 
 | ||||
| void lut1(void) | ||||
| { | ||||
| 	unsigned int count; | ||||
| 	EPD_W21_WriteCMD(0x20); | ||||
| 	for(count=0;count<44;count++)	      | ||||
| 		{EPD_W21_WriteDATA(lut_vcom1[count]);} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21); | ||||
| 	for(count=0;count<42;count++)	      | ||||
| 		{EPD_W21_WriteDATA(lut_ww1[count]);}    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x22); | ||||
| 	for(count=0;count<42;count++)	      | ||||
| 		{EPD_W21_WriteDATA(lut_bw1[count]);}  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x23); | ||||
| 	for(count=0;count<42;count++)	      | ||||
| 		{EPD_W21_WriteDATA(lut_wb1[count]);}  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for(count=0;count<42;count++)	      | ||||
| 		{EPD_W21_WriteDATA(lut_bb1[count]);}    | ||||
| } | ||||
| void EPD_Init_Part(void) | ||||
| { | ||||
|  unsigned char i; | ||||
|  for(i=0;i<3;i++) | ||||
|  { | ||||
| 	EPD_W21_RST_0;		// Module reset
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	}	 | ||||
| 	lcd_chkstatus(); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x01);			//POWER SETTING 
 | ||||
| 	EPD_W21_WriteDATA (0x03);	           | ||||
| 	EPD_W21_WriteDATA (0x00); | ||||
| 	EPD_W21_WriteDATA (0x2b); | ||||
| 	EPD_W21_WriteDATA (0x2b); | ||||
| 	EPD_W21_WriteDATA (0x03); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x06);         //boost soft start
 | ||||
| 	EPD_W21_WriteDATA (0x17);		//A
 | ||||
| 	EPD_W21_WriteDATA (0x17);		//B
 | ||||
| 	EPD_W21_WriteDATA (0x17);		//C       
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x00);			//panel setting
 | ||||
| 	EPD_W21_WriteDATA(0xbf);		//LUT from OTP£¬128x296
 | ||||
|   EPD_W21_WriteDATA(0x0D);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x30);			 | ||||
| 	EPD_W21_WriteDATA (0x3C);  // 3A 100HZ   29 150Hz 39 200HZ	31 171HZ
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x61);			//resolution setting
 | ||||
| 	EPD_W21_WriteDATA (EPD_WIDTH);     	  | ||||
| 	EPD_W21_WriteDATA (EPD_HEIGHT/256); | ||||
| 	EPD_W21_WriteDATA (EPD_HEIGHT%256);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x82);		 //vcom_DC setting  	
 | ||||
| 	EPD_W21_WriteDATA (0x12);	 | ||||
| 	lut1();	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04);   | ||||
| 	lcd_chkstatus(); | ||||
| 		 | ||||
| } | ||||
| 	 | ||||
| void EPD_DeepSleep(void) | ||||
| { | ||||
| 		EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0xf7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7	
 | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0X02);  	//power off
 | ||||
| 	  lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|     delay_xms(100);    //!!!The delay here is necessary,100mS at least!!!     
 | ||||
| 	  EPD_W21_WriteCMD(0X07);  	//deep sleep
 | ||||
| 		EPD_W21_WriteDATA(0xA5); | ||||
| } | ||||
| //Full screen update update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
| 	//update
 | ||||
| 	EPD_W21_WriteCMD(0x12);		//DISPLAY update 	
 | ||||
| 	delay_xms(1);	             //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
| 	lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|     unsigned int i; | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	   | ||||
|     {	 | ||||
| 	    EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|     }	 | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	  { | ||||
| 	    EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
| 	  } | ||||
|     EPD_Update();	     | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|     unsigned int i; | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	   | ||||
|     {	 | ||||
| 	    EPD_W21_WriteDATA(0xFF);  | ||||
|     } | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	  { | ||||
| 	    EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
| 			oldData[i]=0xFF;  | ||||
| 	  } | ||||
|     EPD_Update();	     | ||||
| } | ||||
| 
 | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xFF); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
| 		  oldData[i]=datas[i];  | ||||
|    }	  | ||||
|     EPD_Update();	     | ||||
| } | ||||
| 
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 		unsigned int i,x_end,y_end; | ||||
| 		x_start=x_start-x_start%8; | ||||
| 		x_end=x_start+PART_LINE-1;  | ||||
| 		y_end=y_start+PART_COLUMN-1; | ||||
| 	 | ||||
| 	  EPD_Init_Part();	 | ||||
| 		EPD_W21_WriteCMD(0x91);		//This command makes the display enter partial mode
 | ||||
| 		EPD_W21_WriteCMD(0x90);		//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
| 		EPD_W21_WriteDATA (x_end);	 //x-end	
 | ||||
| 		EPD_W21_WriteDATA (y_start/256); | ||||
| 		EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 		EPD_W21_WriteDATA (y_end/256);		 | ||||
| 		EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
| 		EPD_W21_WriteDATA (0x28); | ||||
| 	 | ||||
| 	  EPD_W21_WriteCMD(0x10);		 //writes Old data to SRAM
 | ||||
| 		if(partFlag==1)  | ||||
| 		{ | ||||
| 			partFlag=0; | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				 EPD_W21_WriteDATA(0xFF);  | ||||
| 		} | ||||
|     else | ||||
| 		{ | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
|  			  EPD_W21_WriteDATA(oldData[i]); 	  | ||||
| 		} | ||||
| 		 EPD_W21_WriteCMD(0x13);	 //writes New data to SRAM.
 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	   | ||||
|     {		 | ||||
|  			 EPD_W21_WriteDATA(datas[i]);  | ||||
|        oldData[i]=datas[i];			 | ||||
| 		}	 | ||||
|     EPD_Update();		 | ||||
| } | ||||
| 
 | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|     unsigned int i; | ||||
| 	  EPD_Init_Part(); | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	   | ||||
|     {	 | ||||
| 			 EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }	 | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	  { | ||||
| 	    EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
| 	  }   | ||||
| 			 | ||||
|     EPD_Update();	      | ||||
| 
 | ||||
| } | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
| 	                      const unsigned char * datas_A,const unsigned char * datas_B, | ||||
| 												const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 		unsigned int i,x_end,y_end; | ||||
| 		x_start=x_start-x_start%8; | ||||
| 		x_end=x_start+PART_LINE-1;  | ||||
| 		y_end=y_start+PART_COLUMN*num-1; | ||||
| 	 | ||||
| 	  EPD_Init_Part();	 | ||||
| 		EPD_W21_WriteCMD(0x91);		//This command makes the display enter partial mode
 | ||||
| 		EPD_W21_WriteCMD(0x90);		//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
| 		EPD_W21_WriteDATA (x_end);	 //x-end	
 | ||||
| 		EPD_W21_WriteDATA (y_start/256); | ||||
| 		EPD_W21_WriteDATA (y_start%256);  //y-start    
 | ||||
| 		EPD_W21_WriteDATA (y_end/256);		 | ||||
| 		EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
| 		EPD_W21_WriteDATA (0x28);	 | ||||
| 	 | ||||
| 	  EPD_W21_WriteCMD(0x10);		 //writes Old data to SRAM
 | ||||
| 		if(partFlag==1)  | ||||
| 		{ | ||||
| 			partFlag=0; | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE*num/8;i++)	      | ||||
| 				 EPD_W21_WriteDATA(0xFF);  | ||||
| 		} | ||||
|     else | ||||
| 		{ | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				EPD_W21_WriteDATA(oldDataA[i]);  						  | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				EPD_W21_WriteDATA(oldDataB[i]);   | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				EPD_W21_WriteDATA(oldDataC[i]);  						  | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				EPD_W21_WriteDATA(oldDataD[i]); | ||||
| 			for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 				EPD_W21_WriteDATA(oldDataE[i]);  						 			  | ||||
| 		}  | ||||
| 		 | ||||
|     EPD_W21_WriteCMD(0x13);		  //writes New data to SRAM.	
 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	 | ||||
| 		{			 | ||||
| 			EPD_W21_WriteDATA(datas_A[i]);   | ||||
| 			oldDataA[i]=datas_A[i]; | ||||
| 		}					 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	 | ||||
| 		{			 | ||||
| 			EPD_W21_WriteDATA(datas_B[i]);   | ||||
| 			oldDataB[i]=datas_B[i]; | ||||
| 		}	 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	 | ||||
| 		{			 | ||||
| 			EPD_W21_WriteDATA(datas_C[i]);   | ||||
| 			oldDataC[i]=datas_C[i]; | ||||
| 		}	 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	 | ||||
| 		{			 | ||||
| 			EPD_W21_WriteDATA(datas_D[i]);   | ||||
| 			oldDataD[i]=datas_D[i]; | ||||
| 		}	 | ||||
| 		for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	 | ||||
| 		{			 | ||||
| 			EPD_W21_WriteDATA(datas_E[i]);   | ||||
| 			oldDataE[i]=datas_E[i];  | ||||
| 		}	 | ||||
| 		EPD_Update(); | ||||
| 	   | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
| 	                      const unsigned char * datas_A,const unsigned char * datas_B, | ||||
| 												const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
| 
 | ||||
| }		 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| {	 | ||||
| 	 unsigned char i; | ||||
| 	 for(i=0;i<3;i++) | ||||
| 	 { | ||||
| 		EPD_W21_RST_0;		// Module reset
 | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 		EPD_W21_RST_1; | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 	  }	 | ||||
|     lcd_chkstatus(); | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x00);			//panel setting
 | ||||
| 		EPD_W21_WriteDATA(0x13);		//LUT from OTP£¬KW-BF   KWR-AF	BWROTP 0f	BWOTP 1f
 | ||||
|     EPD_W21_WriteDATA(0x0D);	 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x61);			//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH);     	  | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT/256); | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT%256);  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x04);   | ||||
| 		lcd_chkstatus();//waiting for the electronic paper IC to release the idle signal
 | ||||
| 	 | ||||
| 		EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0x97);		//WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|     unsigned int Width, Height,i,j; | ||||
|     Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
|     Height = EPD_HEIGHT; | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x10); | ||||
|     for (j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
|             EPD_W21_WriteDATA(0xff); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x13); | ||||
|     for ( j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
|            EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
|         } | ||||
|     } | ||||
|     EPD_Update();	      | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										30
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   112 | ||||
| #define EPD_HEIGHT  208 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
| 	                      const unsigned char * datas_A,const unsigned char * datas_B, | ||||
| 												const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);										  | ||||
| //GUI display				
 | ||||
| void EPD_Init_GUI(void);												 | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,143 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|              | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Electronic paper initialization.  
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update. 
 | ||||
|       for(i=0;i<6;i++) | ||||
| 			{ | ||||
|         EPD_Dis_Part_Time(48,46,Num[i],Num[0],gImage_numdot,Num[0],Num[1],5,24,32); //x,y,DATA-A~E,number,Resolution 24*32    				
 | ||||
| 			}			       | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|          | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1    //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.   
 | ||||
|       EPD_Dis_PartAll(gImage_p1);  | ||||
|       EPD_Dis_PartAll(gImage_p2); | ||||
|       EPD_Dis_PartAll(gImage_p3); | ||||
|       EPD_Dis_PartAll(gImage_p4); | ||||
|       EPD_Dis_PartAll(gImage_p5); | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|        | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif | ||||
|    | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif         | ||||
|    | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 25, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 45, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										1607
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1607
									
								
								ESP32epdx/examples/2-Colors (BW)/2.15/GDEW0215T11/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,600 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Fast update 2 initialization
 | ||||
| void EPD_HW_Init_Fast2(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x5A);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| //Fast 2 display
 | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(*datas); | ||||
|       datas++; | ||||
|    }   | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    }    | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   152  | ||||
| #define EPD_HEIGHT  296 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,152 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(48,92+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         48,92+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         48,92+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         48,92+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         48,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 95, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 115, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3820
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3820
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										568
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										568
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,568 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x6E);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF4);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //4 Gray update function
 | ||||
| void EPD_Update_4G(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xCF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Basemap update function
 | ||||
| void EPD_Update_Basemap(void) | ||||
| {  | ||||
| 	 EPD_W21_WriteCMD(0x22);              //start update image
 | ||||
| 	 EPD_W21_WriteDATA(0xF4);             // MCU send LUT
 | ||||
| 	 EPD_W21_WriteCMD(0x20);              // Run
 | ||||
| 	 Epaper_READBUSY();		 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x3C);        | ||||
|  	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0x3C);  //1C 
 | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
| 	 EPD_W21_WriteCMD(0x26);    | ||||
| 	 for(i=0;i<EPD_ARRAY;i++) | ||||
| 	 { | ||||
| 			EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_W21_WriteCMD(0x26);    | ||||
| 	 for(i=0;i<EPD_ARRAY;i++) | ||||
| 	 { | ||||
| 			EPD_W21_WriteDATA(0x00); | ||||
| 		}	  | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    } | ||||
|   EPD_Update_Basemap();  | ||||
| 	  | ||||
| 	EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);  | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| /*
 | ||||
| 	EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
| 	EPD_W21_WriteDATA(0x00);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| */ | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_4G();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										39
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   184  | ||||
| #define EPD_HEIGHT  360 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8    | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,150 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_Time(64,132+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
| 												64,132+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
| 												64,132+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
| 												64,132+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
| 												64,132+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
|     | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 95, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 115, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										4420
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4420
									
								
								ESP32epdx/examples/2-Colors (BW)/2.66/GDEY0266T90H/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										532
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										532
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,532 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
| 
 | ||||
|   Epaper_READBUSY();   | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();   | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|   | ||||
| 	EPD_W21_WriteCMD(0x3C);      | ||||
| 	EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
| 	//4 Gray
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		   | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11);  // Data entry mode
 | ||||
| 	EPD_W21_WriteDATA(0x01);    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										40
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   176  | ||||
| #define EPD_HEIGHT  264 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);   | ||||
| 
 | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| //GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										150
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/GDEM027Q72.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/GDEM027Q72.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,150 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(1s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updatees, implement a full screen update to clear the ghosting caused by partial updatees.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(64,56+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         64,56+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         64,56+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         64,56+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         64,56+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updatees, implement a full screen update to clear the ghosting caused by partial updatees.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3991
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3991
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEM027Q72/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										516
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										516
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,516 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
| } | ||||
| //Fast update 1 initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+32-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   176  | ||||
| #define EPD_HEIGHT  264 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										150
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/GDEY027T91.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/GDEY027T91.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,150 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_Time(48,48+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
| 												48,48+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
| 												48,48+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
| 												48,48+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
| 												48,48+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
| #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3640
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3640
									
								
								ESP32epdx/examples/2-Colors (BW)/2.7/GDEY027T91/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										559
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										559
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,559 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen refresh initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| //Fast refresh 1 initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x6E);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen refresh update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF4);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast refresh 1 update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //4 Gray update function
 | ||||
| void EPD_Update_4G(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xCF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial refresh update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0xC0);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xDF);   | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen refresh display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
| 	 EPD_W21_WriteCMD(0x26);    | ||||
| 	 for(i=0;i<EPD_ARRAY;i++) | ||||
| 	 { | ||||
| 			EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast refresh display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_W21_WriteCMD(0x26);    | ||||
| 	 for(i=0;i<EPD_ARRAY;i++) | ||||
| 	 { | ||||
| 			EPD_W21_WriteDATA(0x00); | ||||
| 		}	  | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial refresh of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
| } | ||||
| //Partial refresh display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial refresh display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial refresh write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);  | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
| 	EPD_W21_WriteDATA(0x00);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01);//Show mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT+46-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);    | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_4G();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										42
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   168  | ||||
| #define EPD_HEIGHT  384 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 										 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| void EPD_Update_4G(void);		 | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										147
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/GDEY029T71H.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/GDEY029T71H.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,147 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
|      /************4 Gray update mode(2s)*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			/************Onder versions do not support this feature*******************/ | ||||
| 			EPD_HW_Init_4G(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 				delay(2000); //Delay for 2s. 
 | ||||
| 	#endif | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(32,92+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         32,92+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         32,92+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         32,92+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         32,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 90, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 105, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										4281
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4281
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T71H/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,600 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x64);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|     | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start/8; //x address start
 | ||||
|   x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
|    | ||||
|   y_start=y_start-1; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay  
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
|   EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
|   EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Fast update 2 initialization
 | ||||
| void EPD_HW_Init_Fast2(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|        | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0xB1);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
|   EPD_W21_WriteDATA(0x5A);     | ||||
|   EPD_W21_WriteDATA(0x00);   | ||||
|              | ||||
|   EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
|   EPD_W21_WriteDATA(0x91);     | ||||
|   EPD_W21_WriteCMD(0x20);  | ||||
|   Epaper_READBUSY();    | ||||
| } | ||||
| //Fast 2 display
 | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(*datas); | ||||
|       datas++; | ||||
|    }   | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    }    | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
|   EPD_W21_WriteDATA(0x00);     | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|  	 | ||||
|   EPD_W21_WriteCMD(0x18); //Read built-in temperature sensor
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0xB1);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		 | ||||
|   EPD_W21_WriteDATA(0x00);	 | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| } | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_Fast();	  | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   128  | ||||
| #define EPD_HEIGHT  296 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| void EPD_HW_Init_Fast2(void); | ||||
| void EPD_WhiteScreen_ALL_Fast2(const unsigned char *datas); | ||||
| //4 Gray														 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas); | ||||
| 							//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										151
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/GDEY029T94.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/GDEY029T94.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,151 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 0 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(32,92+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         32,92+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         32,92+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         32,92+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         32,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_Dis_PartAll(gImage_p5); //Image 5
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 80, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 90, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 105, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3276
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3276
									
								
								ESP32epdx/examples/2-Colors (BW)/2.9/GDEY029T94/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										438
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										438
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,438 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char oldData[12480]; | ||||
| unsigned char oldDataP[256]; | ||||
| unsigned char oldDataA[256]; | ||||
| unsigned char oldDataB[256]; | ||||
| unsigned char oldDataC[256]; | ||||
| unsigned char oldDataD[256]; | ||||
| unsigned char oldDataE[256]; | ||||
| unsigned char partFlag=1; | ||||
| 
 | ||||
| void lcd_chkstatus(void) | ||||
| { | ||||
|   while(!isEPD_W21_BUSY); //0:BUSY, 1:FREE
 | ||||
|                       | ||||
| } | ||||
| 
 | ||||
| //UC8253
 | ||||
| void EPD_Init(void) | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00);     // panel setting   PSR
 | ||||
|   EPD_W21_WriteDATA(0x1F);      // RES1 RES0 REG KW/R     UD    SHL   SHD_N  RST_N   0xFF=LUT from register,0xDF=LUT from OTP. (Default)
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| void EPD_Init_Fast(void) //1.0s
 | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x00);     // panel setting   PSR
 | ||||
|   EPD_W21_WriteDATA(0x1F);      // RES1 RES0 REG KW/R     UD    SHL   SHD_N  RST_N   0xFF=LUT from register,0xDF=LUT from OTP. (Default)
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x5A);   | ||||
| 
 | ||||
| }  | ||||
| void EPD_init_Fast2(void) //1.5s
 | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x00);     // panel setting   PSR
 | ||||
|   EPD_W21_WriteDATA(0x1F);      // RES1 RES0 REG KW/R     UD    SHL   SHD_N  RST_N   0xFF=LUT from register,0xDF=LUT from OTP. (Default)
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x6E);   | ||||
| }  | ||||
| void EPD_Init_Part(void) | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x00);     // panel setting   PSR
 | ||||
|   EPD_W21_WriteDATA(0x1F);      // RES1 RES0 REG KW/R     UD    SHL   SHD_N  RST_N   0xFF=LUT from register,0xDF=LUT from OTP. (Default)
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x79); | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x50);  | ||||
|   EPD_W21_WriteDATA(0xD7);  | ||||
|    | ||||
| }  | ||||
| void EPD_DeepSleep(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0X02);   //power off
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|   delay(100);//At least 100ms delay 
 | ||||
|   EPD_W21_WriteCMD(0X07);   //deep sleep
 | ||||
|   EPD_W21_WriteDATA(0xA5);  | ||||
|    | ||||
| } | ||||
| void Power_off(void) | ||||
| {  | ||||
|   EPD_W21_WriteCMD(0x02); //POWER ON
 | ||||
|   lcd_chkstatus(); | ||||
| } | ||||
| //Full screen refresh update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   //Refresh
 | ||||
|   EPD_W21_WriteCMD(0x12);   //DISPLAY REFRESH   
 | ||||
|   delay(1);              //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|        EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
|     }    | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(oldData[i]);   | ||||
|     } | ||||
|     EPD_W21_WriteCMD(0x13);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(0xff);   | ||||
|       oldData[i]=0xff;  | ||||
|     } | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(oldData[i]);   | ||||
|     } | ||||
|     EPD_W21_WriteCMD(0x13);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(0x00);   | ||||
|       oldData[i]=0x00;  | ||||
|     } | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| //Partial refresh of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(oldData[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|       oldData[i]=datas[i];  | ||||
|    }    | ||||
|     EPD_Update();     | ||||
|     Power_off();    | ||||
|     | ||||
| } | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| unsigned int i; | ||||
| unsigned int x_end,y_end;  | ||||
|   x_start=x_start-x_start%8; | ||||
|   x_end=x_start+PART_LINE-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|     EPD_Init_Part();   | ||||
|    | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
| 
 | ||||
|     EPD_W21_WriteDATA (y_start/256); | ||||
|     EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
|      | ||||
|     EPD_W21_WriteDATA (y_end/256);     | ||||
|     EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x01);  | ||||
|   | ||||
|     if(partFlag==1)  | ||||
|      { | ||||
|         partFlag=0; | ||||
|         | ||||
|         EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|         for(i=0;i<PART_COLUMN*PART_LINE/8;i++)       | ||||
|            EPD_W21_WriteDATA(0xFF);  | ||||
|      } | ||||
|     else | ||||
|      { | ||||
|         EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|         for(i=0;i<PART_COLUMN*PART_LINE/8;i++)       | ||||
|            EPD_W21_WriteDATA(oldDataP[i]);   | ||||
|       }  | ||||
|   | ||||
|     EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|    { | ||||
|     EPD_W21_WriteDATA(datas[i]); | ||||
|     oldDataP[i]=datas[i]; | ||||
|    }  | ||||
|     EPD_Update();     | ||||
|     Power_off();   | ||||
|      | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Full screen partial refresh display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     EPD_Init_Part(); | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|        EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
|     }   | ||||
|        | ||||
|     EPD_Update();     | ||||
|     Power_off();     | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //Partial refresh write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i,j,x_end,y_end; | ||||
|   x_start=x_start-x_start%8; | ||||
|   x_end=x_start+PART_LINE*num-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|     EPD_Init_Part();   | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
| 
 | ||||
|     EPD_W21_WriteDATA (y_start/256); | ||||
|     EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
|      | ||||
|     EPD_W21_WriteDATA (y_end/256);     | ||||
|     EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x01);  | ||||
| 
 | ||||
| 
 | ||||
|   if(partFlag==1)  | ||||
|    { | ||||
|       partFlag=0; | ||||
|       | ||||
|       EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE*num/8;i++)       | ||||
|          EPD_W21_WriteDATA(0xFF);  | ||||
|    } | ||||
|   else | ||||
|    { | ||||
|       EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|       for(i=0;i<PART_COLUMN;i++)        | ||||
|        { | ||||
|           for(j=0;j<PART_LINE/8;j++)        | ||||
|             EPD_W21_WriteDATA(oldDataA[i*PART_LINE/8+j]);    | ||||
|           for(j=0;j<PART_LINE/8;j++)        | ||||
|             EPD_W21_WriteDATA(oldDataB[i*PART_LINE/8+j]);   | ||||
|           for(j=0;j<PART_LINE/8;j++)        | ||||
|             EPD_W21_WriteDATA(oldDataC[i*PART_LINE/8+j]);    | ||||
|           for(j=0;j<PART_LINE/8;j++)        | ||||
|             EPD_W21_WriteDATA(oldDataD[i*PART_LINE/8+j]);    | ||||
|           for(j=0;j<PART_LINE/8;j++)        | ||||
|             EPD_W21_WriteDATA(oldDataE[i*PART_LINE/8+j]);         | ||||
|        }             | ||||
|         | ||||
|     }  | ||||
|   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|   for(i=0;i<PART_COLUMN;i++)        | ||||
|    { | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|       { | ||||
|         EPD_W21_WriteDATA(datas_A[i*PART_LINE/8+j]);  | ||||
|         oldDataA[i*PART_LINE/8+j]=datas_A[i*PART_LINE/8+j]; | ||||
|       }          | ||||
| 
 | ||||
|       for(j=0;j<PART_LINE/8;j++)     | ||||
|       {        | ||||
|         EPD_W21_WriteDATA(datas_B[i*PART_LINE/8+j]);   | ||||
|         oldDataB[i*PART_LINE/8+j]=datas_B[i*PART_LINE/8+j]; | ||||
|       } | ||||
|       for(j=0;j<PART_LINE/8;j++)     | ||||
|       {        | ||||
|         EPD_W21_WriteDATA(datas_C[i*PART_LINE/8+j]);     | ||||
|         oldDataC[i*PART_LINE/8+j]=datas_C[i*PART_LINE/8+j]; | ||||
|       } | ||||
|       for(j=0;j<PART_LINE/8;j++)   | ||||
|       {        | ||||
|         EPD_W21_WriteDATA(datas_D[i*PART_LINE/8+j]);   | ||||
|         oldDataD[i*PART_LINE/8+j]=datas_D[i*PART_LINE/8+j]; | ||||
|       } | ||||
|       for(j=0;j<PART_LINE/8;j++)    | ||||
|       { | ||||
|         EPD_W21_WriteDATA(datas_E[i*PART_LINE/8+j]);     | ||||
|         oldDataE[i*PART_LINE/8+j]=datas_E[i*PART_LINE/8+j];  | ||||
|       } | ||||
|    }   | ||||
|      | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
|   EPD_Update(); | ||||
|   Power_off();   | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x13); //180 mirror
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING     
 | ||||
|   EPD_W21_WriteDATA(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57    WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7  
 | ||||
|    | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| //GUI
 | ||||
| void EPD_Init_GUI(void) | ||||
| {	 | ||||
| 	EPD_W21_RST_0;		// Module reset
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x00); | ||||
| 	EPD_W21_WriteDATA(0x13); | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING			
 | ||||
| 	EPD_W21_WriteDATA(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7	
 | ||||
| 	 | ||||
| } | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|     unsigned int Width, Height,i,j; | ||||
|     Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
|     Height = EPD_HEIGHT; | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x10); | ||||
|     for (j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
| 					EPD_W21_WriteDATA(oldData[j*Width+i]); | ||||
|            | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x13); | ||||
|     for ( j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
|            	    EPD_W21_WriteDATA(Image[j*Width+i]);  //Transfer the actual displayed data
 | ||||
|                 oldData[i]=Image[i];  | ||||
|         } | ||||
|     } | ||||
| 		 | ||||
|     EPD_Update();	 | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										35
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   240  | ||||
| #define EPD_HEIGHT  320 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);                     | ||||
| //Fast update display
 | ||||
| void EPD_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| 
 | ||||
|  //GUI
 | ||||
|  void EPD_Init_GUI(void); | ||||
|  void EPD_Display(unsigned char *Image);                         | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										149
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/GDEQ031T10.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/GDEQ031T10.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,149 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|              | ||||
|       /************Fast update mode(1.5s)*******************/ | ||||
|       EPD_Init_Fast(); //Fast update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_2); //To display one image using fast update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Electronic paper initialization.  
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update. 
 | ||||
|       for(i=0;i<6;i++) | ||||
|       { | ||||
|         EPD_Dis_Part_Time(40,150,Num[1],Num[0],gImage_numdot,Num[0],Num[i],5,64,32); //x,y,DATA-A~E,number,Resolution 32*64         
 | ||||
|       }        | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|          | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1    //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.   
 | ||||
|       EPD_Dis_PartAll(gImage_p1); | ||||
|       EPD_Dis_PartAll(gImage_p2); | ||||
|       EPD_Dis_PartAll(gImage_p3); | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|        | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif | ||||
|    | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif         | ||||
|    | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 90, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(150, 90, 30, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(200, 90, 30, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_Init_GUI(); //Full screen updateinitialization.
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawString_EN(0, 70, "Good Display", &Font24, BLACK, WHITE); //Font24 
 | ||||
|     Paint_DrawNum(0, 100, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 110, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 125, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 145, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 170, 123456789, &Font24, BLACK, WHITE); //Font24
 | ||||
|     EPD_Init_GUI(); //Full screen updateinitialization.
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|     EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|     delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3585
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3585
									
								
								ESP32epdx/examples/2-Colors (BW)/3.1/GDEQ031T10/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										518
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										518
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,518 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char oldData[12480]; | ||||
| unsigned char oldDataP[256]; | ||||
| unsigned char oldDataA[256]; | ||||
| unsigned char oldDataB[256]; | ||||
| unsigned char oldDataC[256]; | ||||
| unsigned char oldDataD[256]; | ||||
| unsigned char oldDataE[256]; | ||||
| unsigned char partFlag=1; | ||||
| 
 | ||||
| void lcd_chkstatus(void) | ||||
| { | ||||
|   while(!isEPD_W21_BUSY); //0:BUSY, 1:FREE
 | ||||
|                       | ||||
| } | ||||
| 
 | ||||
| //UC8253
 | ||||
| void EPD_Init(void) | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING     
 | ||||
|   EPD_W21_WriteDATA(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57    WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7  
 | ||||
|    | ||||
| } | ||||
| void EPD_Init_Fast(void) //1.5s
 | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x5F);  //0x5F--1.5s
 | ||||
| 
 | ||||
| }  | ||||
| 
 | ||||
| void EPD_Init_Part(void) | ||||
| {  | ||||
|   EPD_W21_RST_0;    // Module reset
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
|   lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x6E); | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x50);  | ||||
|   EPD_W21_WriteDATA(0xD7);  | ||||
|    | ||||
| }  | ||||
| void EPD_DeepSleep(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0X02);   //power off
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|   EPD_W21_WriteCMD(0X07);   //deep sleep
 | ||||
|   EPD_W21_WriteDATA(0xA5);  | ||||
|    | ||||
| } | ||||
| void Power_off(void) | ||||
| {  | ||||
|   EPD_W21_WriteCMD(0x02); //POWER ON
 | ||||
|   lcd_chkstatus(); | ||||
| } | ||||
| //Full screen update update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   //update
 | ||||
|   EPD_W21_WriteCMD(0x12);   //DISPLAY update   
 | ||||
|   delay(1);              //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|        EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
|     }    | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(oldData[i]);   | ||||
|     } | ||||
|     EPD_W21_WriteCMD(0x13);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(0xff);   | ||||
|       oldData[i]=0xff;  | ||||
|     } | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|     unsigned int i; | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(oldData[i]);   | ||||
|     } | ||||
|     EPD_W21_WriteCMD(0x13);       | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(0x00);   | ||||
|       oldData[i]=0x00;  | ||||
|     } | ||||
|     EPD_Update();     | ||||
|     Power_off(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(oldData[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|       oldData[i]=datas[i];  | ||||
|    }    | ||||
|     EPD_Update();     | ||||
|     Power_off();    | ||||
|     | ||||
| } | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| unsigned int i; | ||||
| unsigned int x_end,y_end;  | ||||
|   x_start=x_start-x_start%8; | ||||
|   x_end=x_start+PART_LINE-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|     EPD_Init_Part();   | ||||
|    | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
| 
 | ||||
|     EPD_W21_WriteDATA (y_start/256); | ||||
|     EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
|      | ||||
|     EPD_W21_WriteDATA (y_end/256);     | ||||
|     EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x01);  | ||||
|   | ||||
|     if(partFlag==1)  | ||||
|      { | ||||
|         partFlag=0; | ||||
|         | ||||
|         EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|         for(i=0;i<PART_COLUMN*PART_LINE/8;i++)       | ||||
|            EPD_W21_WriteDATA(0xFF);  | ||||
|      } | ||||
|     else | ||||
|      { | ||||
|         EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|         for(i=0;i<PART_COLUMN*PART_LINE/8;i++)       | ||||
|            EPD_W21_WriteDATA(oldDataP[i]);   | ||||
|       }  | ||||
|   | ||||
|     EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|     for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|    { | ||||
|     EPD_W21_WriteDATA(datas[i]); | ||||
|     oldDataP[i]=datas[i]; | ||||
|    }  | ||||
|     EPD_Update();     | ||||
|     Power_off();   | ||||
|      | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|     unsigned int i; | ||||
|     EPD_Init_Part(); | ||||
|     //Write Data
 | ||||
|     EPD_W21_WriteCMD(0x10);        //Transfer old data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)     | ||||
|     {  | ||||
|        EPD_W21_WriteDATA(oldData[i]);  //Transfer the actual displayed data
 | ||||
|     }  | ||||
|     EPD_W21_WriteCMD(0x13);        //Transfer new data
 | ||||
|     for(i=0;i<EPD_ARRAY;i++)        | ||||
|     { | ||||
|       EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
|        oldData[i]=datas[i];  | ||||
|     }   | ||||
|        | ||||
|     EPD_Update();     | ||||
|     Power_off();     | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i,x_end,y_end; | ||||
|   x_start=x_start-x_start%8; | ||||
|   x_end=x_start+PART_LINE-1;  | ||||
|   y_end=y_start+PART_COLUMN*num-1; | ||||
| 
 | ||||
|     EPD_Init_Part();   | ||||
|     EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|     EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|     EPD_W21_WriteDATA (x_start);   //x-start     
 | ||||
|     EPD_W21_WriteDATA (x_end);   //x-end  
 | ||||
| 
 | ||||
|     EPD_W21_WriteDATA (y_start/256); | ||||
|     EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
|      | ||||
|     EPD_W21_WriteDATA (y_end/256);     | ||||
|     EPD_W21_WriteDATA (y_end%256);  //y-end
 | ||||
|     EPD_W21_WriteDATA (0x01);  | ||||
| 
 | ||||
| 
 | ||||
|   if(partFlag==1)  | ||||
|    { | ||||
|       partFlag=0; | ||||
|       | ||||
|       EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE*num/8;i++)       | ||||
|          EPD_W21_WriteDATA(0xFF);  | ||||
|    } | ||||
|   else | ||||
|    { | ||||
|       EPD_W21_WriteCMD(0x10);        //writes Old data to SRAM for programming
 | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataA[i]);               | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataB[i]);   | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataC[i]);               | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataD[i]); | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|         EPD_W21_WriteDATA(oldDataE[i]);               | ||||
|     | ||||
|         | ||||
|     }  | ||||
|   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|     { | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|       {      | ||||
|         EPD_W21_WriteDATA(datas_A[i]);   | ||||
|         oldDataA[i]=datas_A[i]; | ||||
|       }          | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|       {      | ||||
|         EPD_W21_WriteDATA(datas_B[i]);   | ||||
|         oldDataB[i]=datas_B[i]; | ||||
|       }  | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|       {      | ||||
|         EPD_W21_WriteDATA(datas_C[i]);   | ||||
|         oldDataC[i]=datas_C[i]; | ||||
|       }  | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|       {      | ||||
|         EPD_W21_WriteDATA(datas_D[i]);   | ||||
|         oldDataD[i]=datas_D[i]; | ||||
|       }  | ||||
|       for(i=0;i<PART_COLUMN*PART_LINE/8;i++)   | ||||
|       {      | ||||
|         EPD_W21_WriteDATA(datas_E[i]);   | ||||
|         oldDataE[i]=datas_E[i];  | ||||
|       }  | ||||
|     } | ||||
|      | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
|   EPD_Update(); | ||||
|   Power_off();   | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x1B); //180 mirror
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING     
 | ||||
|   EPD_W21_WriteDATA(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57    WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7  
 | ||||
|    | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //4 grayscale demo function
 | ||||
| void EPD_Init_4G(void) //
 | ||||
| {	 | ||||
| 	EPD_W21_RST_0;		// Module reset
 | ||||
| 	delay(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay(10);//At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x00); | ||||
| 	EPD_W21_WriteDATA(0x1F); | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0xE0); | ||||
| 	EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0xE5); | ||||
| 	EPD_W21_WriteDATA(0x5A);  //0x5A--4 Gray
 | ||||
| 	 | ||||
| }	 | ||||
| /********Color display description
 | ||||
|       white  gray1  gray2  black | ||||
| 0x10|  01     01     00     00 | ||||
| 0x13|  01     00     01     00 | ||||
|                                    ****************/ | ||||
| void EPD_WhiteScreen_ALL_4G (const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i,j,k; | ||||
| 	unsigned char temp1,temp2,temp3; | ||||
| 
 | ||||
| 	  //old  data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	        | ||||
| 
 | ||||
| 		for(i=0;i<12480;i++)	               //12480*2  416*240
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if(temp2 == 0x80) | ||||
| 						temp3 |= 0x01;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x00; //gray2
 | ||||
| 				if(j==0)	 | ||||
| 				{ | ||||
| 					temp1 <<= 2;				 | ||||
| 					temp3 <<= 1;	 | ||||
| 				}	 | ||||
|         if(j==1&&k!=3) | ||||
| 				{ | ||||
| 					temp1 <<= 2;				 | ||||
| 					temp3 <<= 1;	 | ||||
| 				} | ||||
| 			 } | ||||
| 		 }	 | ||||
|      EPD_W21_WriteDATA(temp3);			 | ||||
| 		} | ||||
| 
 | ||||
|     //new  data
 | ||||
| 		EPD_W21_WriteCMD(0x13);	        | ||||
| 		for(i=0;i<12480;i++)	               //12480*2  416*240
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if(temp2 == 0x80) | ||||
| 						temp3 |= 0x00;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x01; //gray2
 | ||||
|         | ||||
| 				if(j==0)	 | ||||
| 				{ | ||||
| 					temp1 <<= 2;				 | ||||
| 					temp3 <<= 1;	 | ||||
| 				}	 | ||||
|         if(j==1&&k!=3) | ||||
| 				{ | ||||
| 					temp1 <<= 2;				 | ||||
| 					temp3 <<= 1;	 | ||||
| 				} | ||||
| 			 } | ||||
| 		 } | ||||
| 			EPD_W21_WriteDATA(temp3);			 | ||||
| 	 } | ||||
| 
 | ||||
| 		//update
 | ||||
|      EPD_Update(); | ||||
|      Power_off();	    | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| //GUI
 | ||||
| void EPD_Init_GUI(void) | ||||
| {	 | ||||
| 	EPD_W21_RST_0;		// Module reset
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x00); | ||||
| 	EPD_W21_WriteDATA(0x13); | ||||
| 	 | ||||
|   EPD_W21_WriteCMD(0x04);  //Power on
 | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING			
 | ||||
| 	EPD_W21_WriteDATA(0x97); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7	
 | ||||
| 	 | ||||
| } | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|     unsigned int Width, Height,i,j; | ||||
|     Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
|     Height = EPD_HEIGHT; | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x10); | ||||
|     for (j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
| 					EPD_W21_WriteDATA(oldData[j*Width+i]); | ||||
|            | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0x13); | ||||
|     for ( j = 0; j < Height; j++) { | ||||
|         for ( i = 0; i < Width; i++) { | ||||
|            	    EPD_W21_WriteDATA(Image[j*Width+i]);  //Transfer the actual displayed data
 | ||||
|                 oldData[i]=Image[i];  | ||||
|         } | ||||
|     } | ||||
| 		 | ||||
|     EPD_Update();	 | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										37
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   240  | ||||
| #define EPD_HEIGHT  416 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);                     | ||||
| //Fast update display
 | ||||
| void EPD_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray
 | ||||
| void EPD_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G (const unsigned char *datas);		 | ||||
|  //GUI
 | ||||
|  void EPD_Init_GUI(void); | ||||
|  void EPD_Display(unsigned char *Image);                         | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										155
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/GDEY037T03.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/GDEY037T03.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,155 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|              | ||||
|       /************Fast update mode(1.5s)*******************/ | ||||
|       EPD_Init_Fast(); //Fast update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_2); //To display one image using fast update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
| 			/************4 Gray update mode*******************/ | ||||
| 			EPD_Init_4G(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Electronic paper initialization.  
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update. 
 | ||||
|       for(i=0;i<6;i++) | ||||
|       { | ||||
|         EPD_Dis_Part_Time(100,120,Num[1],Num[0],gImage_numdot,Num[0],Num[i],5,32,64); //x,y,DATA-A~E,number,Resolution 32*64         
 | ||||
|       }        | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|          | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1    //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.   
 | ||||
|       EPD_Dis_PartAll(gImage_p1); | ||||
|       EPD_Dis_PartAll(gImage_p2); | ||||
|       EPD_Dis_PartAll(gImage_p3); | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|        | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif | ||||
|    | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif         | ||||
|    | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 90, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(150, 90, 30, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(200, 90, 30, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_Init_GUI(); //Full screen updateinitialization.
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawString_EN(0, 70, "Good Display", &Font24, BLACK, WHITE); //Font24 
 | ||||
|     Paint_DrawNum(0, 100, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(0, 110, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(0, 125, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(0, 145, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(0, 170, 123456789, &Font24, BLACK, WHITE); //Font24
 | ||||
|     EPD_Init_GUI(); //Full screen updateinitialization.
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|     EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|     delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										8103
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8103
									
								
								ESP32epdx/examples/2-Colors (BW)/3.7/GDEY037T03/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										682
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										682
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,682 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x03); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x03); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	//Fast(1.5s)
 | ||||
| 	EPD_W21_WriteCMD(0x1A);  | ||||
| 	EPD_W21_WriteDATA(0x6A); | ||||
| 
 | ||||
| } | ||||
| //4 Gray update initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x03); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	//4 Gray
 | ||||
| 	EPD_W21_WriteCMD(0x1A);  | ||||
| 	EPD_W21_WriteDATA(0x5A); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xD7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //4 Gray update function
 | ||||
| void EPD_Update_4G(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xD7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xFF);    | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }	 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	}	  | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }   | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	}	  | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start-x_start%8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| //Reset
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);  | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| //	
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
| 	EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
| 	EPD_W21_WriteDATA(x_end%256);  //x address end2 
 | ||||
| 	EPD_W21_WriteDATA(x_end/256); //x address end1   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
| 	EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| //Reset
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);  | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| //	
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start-x_start%8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| //Reset
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);  | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| //	
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
| 	EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
| 	EPD_W21_WriteDATA(x_end%256);  //x address end2 
 | ||||
| 	EPD_W21_WriteDATA(x_end/256); //x address end1   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
| 	EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x00); //180
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); //mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	 EPD_Update(); | ||||
| 				 | ||||
| } | ||||
| 
 | ||||
| /*********************4 Gray****************************/ | ||||
| //4 Gray display
 | ||||
| unsigned char In2bytes_Out1byte_RAM1(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 	 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|         if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData1=TempData1<<2; | ||||
|      } | ||||
| 
 | ||||
|     for(i=0;i<4;i++) | ||||
|      {  | ||||
|         outdata=outdata<<1; | ||||
|          if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
|            outdata=outdata|0x01; | ||||
|         else  | ||||
|           outdata=outdata|0x00; | ||||
| 
 | ||||
|         TempData2=TempData2<<2; | ||||
| 
 | ||||
|        // delay_us(5) ; 
 | ||||
|      } | ||||
| 		 return outdata; | ||||
| } | ||||
| unsigned char In2bytes_Out1byte_RAM2(unsigned char data1,unsigned char data2) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=data1; | ||||
| 	TempData2=data2; | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData1=TempData1<<2; | ||||
| 	} | ||||
| 
 | ||||
| 	for(i=0;i<4;i++) | ||||
| 	{  | ||||
| 		outdata=outdata<<1; | ||||
| 		 if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 			 outdata=outdata|0x01; | ||||
| 		else  | ||||
| 			outdata=outdata|0x00; | ||||
| 
 | ||||
| 		TempData2=TempData2<<2; | ||||
| 	} | ||||
| 	return outdata; | ||||
| } | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	unsigned char tempOriginal;    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{                | ||||
| 		tempOriginal= In2bytes_Out1byte_RAM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(~tempOriginal);  | ||||
| 	} | ||||
| 	EPD_Update_4G();	  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										38
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   480  | ||||
| #define EPD_HEIGHT  800 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         );                            | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas);		 | ||||
| //GUI
 | ||||
| void EPD_HW_Init_GUI(void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,154 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(152,92+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         152,92+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         152,92+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         152,92+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         152,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution  32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 0, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     //Point   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); | ||||
|     //Line
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(170, 15, 170, 55, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(150, 35, 190, 35, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     //Rectangle
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     //Circle
 | ||||
|     Paint_DrawCircle(150, 200, 100, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawCircle(250, 200, 100, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_WhiteScreen_ALL(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawString_EN(0, 70, "Good Display", &Font24, BLACK, WHITE); //Font24 
 | ||||
|     Paint_DrawNum(220, 200, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(220, 210, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(220, 225, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(220, 245, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(220, 270, 123456789, &Font24, BLACK, WHITE); //Font24
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_WhiteScreen_ALL(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										24515
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24515
									
								
								ESP32epdx/examples/2-Colors (BW)/3.97/GDEM0397T81P/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										145
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,145 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| 
 | ||||
| void lcd_chkstatus(void) | ||||
| { | ||||
|   while(isEPD_W21_BUSY==0);                       | ||||
| } | ||||
| //UC8276
 | ||||
| void EPD_Init(void) | ||||
| {		 | ||||
| 		EPD_W21_RST_0;		// Module reset
 | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 		EPD_W21_RST_1; | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 
 | ||||
|     lcd_chkstatus();  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x04);   | ||||
| 		lcd_chkstatus();//waiting for the electronic paper IC to release the idle signal		
 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x00);			//panel setting
 | ||||
| 		EPD_W21_WriteDATA(0x1f);		//LUT from OTP£¬KW-BF   KWR-AF	BWROTP 0f	BWOTP 1f
 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x61);			//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH/256); | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH%256);    	  | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT/256); | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT%256);  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0x97);		//WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void EPD_DeepSleep(void) | ||||
| { | ||||
| 		EPD_W21_WriteCMD(0X02);  	//power off
 | ||||
| 	  lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|     delay_xms(100);    //!!!The delay here is necessary,100mS at least!!!     
 | ||||
| 	  EPD_W21_WriteCMD(0X07);  	//deep sleep
 | ||||
| 		EPD_W21_WriteDATA(0xA5); | ||||
| } | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
| 	//update
 | ||||
| 	EPD_W21_WriteCMD(0x12);		//DISPLAY update 	
 | ||||
| 	delay_xms(1);	             //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
| 	lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|     unsigned int i; | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	   | ||||
|     {	 | ||||
| 	    EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|     }	 | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	  { | ||||
| 	    EPD_W21_WriteDATA(datas[i]);  //Transfer the actual displayed data
 | ||||
| 	  } | ||||
|     EPD_Update();	  | ||||
| 
 | ||||
| } | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|     unsigned int i; | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<15000;i++)	   | ||||
|     {	 | ||||
| 	  EPD_W21_WriteDATA(0xFF);  | ||||
|     } | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<15000;i++)	      | ||||
| 	  { | ||||
| 	  EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
| 	  } | ||||
| 	 //update
 | ||||
|     EPD_Update(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| {	 | ||||
| 		EPD_W21_RST_0;		// Module reset
 | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 		EPD_W21_RST_1; | ||||
| 		delay_xms(10);//At least 10ms delay 
 | ||||
| 	   | ||||
|     lcd_chkstatus();  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0x04);   | ||||
| 		lcd_chkstatus();//waiting for the electronic paper IC to release the idle signal		
 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x00);			//panel setting
 | ||||
| 		EPD_W21_WriteDATA(0x13);		//LUT from OTP£¬KW-BF   KWR-AF	BWROTP 0f	BWOTP 1f
 | ||||
| 		 | ||||
| 		EPD_W21_WriteCMD(0x61);			//resolution setting
 | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH/256); | ||||
| 		EPD_W21_WriteDATA (EPD_WIDTH%256);    	  | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT/256); | ||||
| 		EPD_W21_WriteDATA (EPD_HEIGHT%256);  | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0x97);		//WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|    unsigned int i; | ||||
| 	  //Write Data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	       //Transfer old data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	   | ||||
|     {	 | ||||
| 	    EPD_W21_WriteDATA(0xFF);  //Transfer the actual displayed data
 | ||||
|     }	 | ||||
| 		EPD_W21_WriteCMD(0x13);		     //Transfer new data
 | ||||
| 	  for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	  { | ||||
| 	    EPD_W21_WriteDATA(Image[i]);  //Transfer the actual displayed data
 | ||||
| 	  } | ||||
|     EPD_Update();	   | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										22
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   400  | ||||
| #define EPD_HEIGHT  300 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void); | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_DeepSleep(void); | ||||
| void EPD_Update(void); | ||||
| void lcd_chkstatus(void); | ||||
| void EPD_WhiteScreen_White(void);		 | ||||
| void EPD_Init_180(void);								 							 | ||||
| //GUI			 
 | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,115 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_2); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.   
 | ||||
| 
 | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 0, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     //Point   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); | ||||
|     //Line
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(170, 15, 170, 55, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(150, 35, 190, 35, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     //Rectangle
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     //Circle
 | ||||
|     Paint_DrawCircle(150, 200, 100, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawCircle(250, 200, 100, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawString_EN(0, 70, "Good Display", &Font24, BLACK, WHITE); //Font24 
 | ||||
|     Paint_DrawNum(220, 200, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(220, 210, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(220, 225, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(220, 245, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(220, 270, 123456789, &Font24, BLACK, WHITE); //Font24
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										3881
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3881
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEM042T31WT/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										515
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										515
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,515 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);    | ||||
|   EPD_W21_WriteDATA(0x80);  | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x0C); | ||||
|   EPD_W21_WriteDATA(0xAE); | ||||
|   EPD_W21_WriteDATA(0xC7); | ||||
|   EPD_W21_WriteDATA(0xC3); | ||||
|   EPD_W21_WriteDATA(0xC0); | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
|   EPD_W21_WriteDATA(0x02);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x01);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x03); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);    | ||||
|   EPD_W21_WriteDATA(0x80);  | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x0C); | ||||
|   EPD_W21_WriteDATA(0xAE); | ||||
|   EPD_W21_WriteDATA(0xC7); | ||||
|   EPD_W21_WriteDATA(0xC3); | ||||
|   EPD_W21_WriteDATA(0xC0); | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);    | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x01);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x03); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 
 | ||||
|   //TEMP (1.5s)
 | ||||
|   EPD_W21_WriteCMD(0x1A);  | ||||
|   EPD_W21_WriteDATA(0x5A); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x22);  | ||||
|   EPD_W21_WriteDATA(0x91); | ||||
|   EPD_W21_WriteCMD(0x20); | ||||
| 
 | ||||
|   Epaper_READBUSY();   | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen  update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xFF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();       | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }    | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }      | ||||
|    EPD_Update_Fast();   | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0xff); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
|     EPD_W21_WriteDATA(0x00); | ||||
|   } | ||||
|   EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start-x_start%8; //x address start
 | ||||
|   x_end=x_start+PART_LINE-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
| //Reset
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);  | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| //  
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
|   EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
|   EPD_W21_WriteDATA(x_end%256);  //x address end2 
 | ||||
|   EPD_W21_WriteDATA(x_end/256); //x address end1   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
|   EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|    | ||||
|    | ||||
|    EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int PART_COLUMN, PART_LINE; | ||||
|   PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| //Reset
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);  | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| //  
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|    EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
|    | ||||
|   x_start=x_start-x_start%8; //x address start
 | ||||
|   x_end=x_start+PART_LINE-1; //x address end
 | ||||
|   y_start=y_start; //Y address start
 | ||||
|   y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
|    | ||||
| //Reset
 | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);  | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom  
 | ||||
|   EPD_W21_WriteDATA(0x80);   | ||||
| //  
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
|   EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
|   EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
|   EPD_W21_WriteDATA(x_end%256);  //x address end2 
 | ||||
|   EPD_W21_WriteDATA(x_end/256); //x address end1   
 | ||||
|   EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
|   EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
|   EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
|   EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
|   EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(x_start%256);  //x address start2 
 | ||||
|   EPD_W21_WriteDATA(x_start/256); //x address start1 
 | ||||
|   EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
|   EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
|   EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
|      | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         ) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
|   EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
|   EPD_Part_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   Epaper_READBUSY();    | ||||
|   EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x18);    | ||||
|   EPD_W21_WriteDATA(0x80);  | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x0C); | ||||
|   EPD_W21_WriteDATA(0xAE); | ||||
|   EPD_W21_WriteDATA(0xC7); | ||||
|   EPD_W21_WriteDATA(0xC3); | ||||
|   EPD_W21_WriteDATA(0xC0); | ||||
|   EPD_W21_WriteDATA(0x80); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
|   EPD_W21_WriteDATA(0x01);   | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
|   EPD_W21_WriteDATA(0x00); //180
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
|   EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x18);    | ||||
| 	EPD_W21_WriteDATA(0x80);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x0C); | ||||
| 	EPD_W21_WriteDATA(0xAE); | ||||
| 	EPD_W21_WriteDATA(0xC7); | ||||
| 	EPD_W21_WriteDATA(0xC3); | ||||
| 	EPD_W21_WriteDATA(0xC0); | ||||
| 	EPD_W21_WriteDATA(0x80); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x01);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); //mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
|   EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_WIDTH-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	 EPD_Update();   | ||||
| 				 | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										38
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| 
 | ||||
| #define EPD_WIDTH   480  | ||||
| #define EPD_HEIGHT  800 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
|                          unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
|                          unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
|                          unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
|                          unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
|                          unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
|                         );                            | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);   											  | ||||
| 
 | ||||
| //GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										142
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/GDEQ0426T82.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/GDEQ0426T82.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,142 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 0 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
|      /************Fast update mode(1.5s)*******************/ | ||||
|       EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
|       EPD_WhiteScreen_ALL_Fast(gImage_2); //To display one image using fast update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(320,124+48*0, Num[1],         //x-A,y-A,DATA-A
 | ||||
|                         320,124+48*1, Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         320,124+48*2, gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         320,124+48*3, Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         320,124+48*4,Num[i],48,104); //x-E,y-E,DATA-E,Resolution  32*64
 | ||||
| 		 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif         | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif     | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_HEIGHT, EPD_WIDTH, 90, WHITE); //(is  differrent!!!)Set screen size and display orientation 
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(150, 200, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(250,200, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //5*8.
 | ||||
| 		Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //7*12.
 | ||||
| 		Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //11*16.
 | ||||
| 		Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //14*20.
 | ||||
| 		Paint_DrawString_EN(0, 80, "Good Display", &Font24, BLACK, WHITE); //17*24.
 | ||||
|     Paint_DrawNum(200, 200, 123456789, &Font8, BLACK, WHITE);  //5*8.
 | ||||
| 		Paint_DrawNum(200, 210, 123456789, &Font12, BLACK, WHITE); //7*12.
 | ||||
| 		Paint_DrawNum(200, 225, 123456789, &Font16, BLACK, WHITE); //11*16.
 | ||||
| 		Paint_DrawNum(200, 245, 123456789, &Font20, BLACK, WHITE); //14*20.
 | ||||
| 		Paint_DrawNum(200, 270, 123456789, &Font24, BLACK, WHITE); //17*24.
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										18513
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18513
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEQ0426T82/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										659
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										659
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,659 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| //Busy function
 | ||||
| void Epaper_READBUSY(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=1 BUSY
 | ||||
|      if(isEPD_W21_BUSY==0) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_HW_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
| 	EPD_W21_WriteDATA(0x40);		 | ||||
|   EPD_W21_WriteDATA(0x00);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_HW_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
|   | ||||
| 	EPD_W21_WriteCMD(0x21);	  | ||||
| 	EPD_W21_WriteDATA(0x40); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C);      | ||||
| 	EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
| 	//1.5s
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x6E);		   | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11);  // Data entry mode
 | ||||
| 	EPD_W21_WriteDATA(0x01);    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY();   | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xF7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Fast update function
 | ||||
| void EPD_Update_Fast(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xC7);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //4 Gray update function
 | ||||
| void EPD_Update_4G(void) | ||||
| {    | ||||
|   EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
|   EPD_W21_WriteDATA(0xCF);    | ||||
|   EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
|   Epaper_READBUSY();    | ||||
| 
 | ||||
| } | ||||
| //Partial update function
 | ||||
| void EPD_Part_Update(void) | ||||
| { | ||||
| 	EPD_W21_WriteCMD(0x22); //Display Update Control
 | ||||
| 	EPD_W21_WriteDATA(0xFF);    | ||||
| 	EPD_W21_WriteCMD(0x20); //Activate Display Update Sequence
 | ||||
| 	Epaper_READBUSY(); 			 | ||||
| } | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }	  | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|    for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 	  | ||||
|    EPD_Update_Fast();	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0xff); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|  unsigned int i; | ||||
|  EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
|  EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
|  for(i=0;i<EPD_ARRAY;i++) | ||||
|  { | ||||
| 		EPD_W21_WriteDATA(0x00); | ||||
| 	} | ||||
| 	EPD_Update(); | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   	 | ||||
|   EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x26);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    } | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	y_start=y_start; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21);  | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);    // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);        // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);      // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);//y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256);//y address start1
 | ||||
| 	 | ||||
| 	 | ||||
| 	 EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|    for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int PART_COLUMN, PART_LINE; | ||||
| 	PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21);  | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
| 	 for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
| 	 {                          | ||||
| 		 EPD_W21_WriteDATA(datas[i]); | ||||
| 	 }  | ||||
| 	 EPD_Part_Update(); | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
|   EPD_W21_WriteCMD(0x10); //Enter deep sleep
 | ||||
|   EPD_W21_WriteDATA(0x01);  | ||||
|   delay_xms(100); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 	 | ||||
| 	x_start=x_start/8; //x address start
 | ||||
| 	x_end=x_start+PART_LINE/8-1; //x address end
 | ||||
| 	 | ||||
| 	y_start=y_start-1; //Y address start
 | ||||
| 	y_end=y_start+PART_COLUMN-1; //Y address end
 | ||||
| 	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 	
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x21);  | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom,
 | ||||
| 	EPD_W21_WriteDATA(0x80);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44);       // set RAM x address start/end
 | ||||
| 	EPD_W21_WriteDATA(x_start);  //x address start
 | ||||
| 	EPD_W21_WriteDATA(x_end);   //y address end   
 | ||||
| 	EPD_W21_WriteCMD(0x45);     // set RAM y address start/end
 | ||||
| 	EPD_W21_WriteDATA(y_start%256);  //y address start2 
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1 
 | ||||
| 	EPD_W21_WriteDATA(y_end%256);  //y address end2 
 | ||||
| 	EPD_W21_WriteDATA(y_end/256); //y address end1   
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(x_start);   //x start address
 | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X127;    
 | ||||
| 	EPD_W21_WriteDATA(y_start%256); //y address start2
 | ||||
| 	EPD_W21_WriteDATA(y_start/256); //y address start1
 | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x24);   //Write Black and White image to RAM
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++) | ||||
|    {                          | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }  | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_startA,y_startA,datasA,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startB,y_startB,datasB,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startC,y_startC,datasC,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startD,y_startD,datasD,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Dis_Part_RAM(x_startE,y_startE,datasE,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Part_Update(); | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_HW_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
| 	EPD_W21_WriteDATA(0x40);		 | ||||
|   EPD_W21_WriteDATA(0x00);		 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteDATA(0x00);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
|   EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);   | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
|   Epaper_READBUSY(); | ||||
| } | ||||
| // GUI initialization
 | ||||
| void EPD_HW_Init_GUI(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 		 | ||||
| 	EPD_W21_WriteCMD(0x01); //Driver output control      
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x01); //mirror
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x21); //  Display update control
 | ||||
| 	EPD_W21_WriteDATA(0x40);		 | ||||
|   EPD_W21_WriteDATA(0x00);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x3C); //BorderWavefrom
 | ||||
| 	EPD_W21_WriteDATA(0x05);	 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11); //data entry mode       
 | ||||
| 	EPD_W21_WriteDATA(0x01); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);    | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);    | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY(); | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
| 	unsigned int Width, Height,i,j; | ||||
| 	Width = (EPD_WIDTH % 8 == 0)? (EPD_WIDTH / 8 ): (EPD_WIDTH / 8 + 1); | ||||
| 	Height = EPD_HEIGHT; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x24); | ||||
| 	for ( j = 0; j < Height; j++) { | ||||
| 			for ( i = 0; i < Width; i++) { | ||||
| 				 EPD_W21_WriteDATA(Image[i + j * Width]); | ||||
| 			} | ||||
| 	} | ||||
| 	EPD_Update();		  | ||||
| } | ||||
| //4 Gray update  initialization
 | ||||
| void EPD_HW_Init_4G(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x12);  //SWRESET
 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x3C);      | ||||
| 	EPD_W21_WriteDATA(0x05);   | ||||
| 
 | ||||
| 	//4 Gray
 | ||||
| 	EPD_W21_WriteCMD(0x1A); // Write to temperature register
 | ||||
| 	EPD_W21_WriteDATA(0x5A);		   | ||||
| 				  	 | ||||
| 	EPD_W21_WriteCMD(0x22); // Load temperature value
 | ||||
| 	EPD_W21_WriteDATA(0x91);		 | ||||
|   EPD_W21_WriteCMD(0x20);	 | ||||
| 	Epaper_READBUSY();    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x11);  // Data entry mode
 | ||||
| 	EPD_W21_WriteDATA(0x01);    | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x44); //set Ram-X address start/end position   
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(EPD_WIDTH/8-1);     | ||||
| 	EPD_W21_WriteCMD(0x45); //set Ram-Y address start/end position          
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteDATA(0x00);  | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x4E);   // set RAM x address count to 0;
 | ||||
| 	EPD_W21_WriteDATA(0x00); | ||||
| 	EPD_W21_WriteCMD(0x4F);   // set RAM y address count to 0X199;    
 | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);     | ||||
| 	EPD_W21_WriteDATA((EPD_HEIGHT-1)/256); | ||||
|   Epaper_READBUSY();      | ||||
| } | ||||
| unsigned char R24_DTM1(unsigned char Image_data1,unsigned char Image_data2) | ||||
| { | ||||
| 	unsigned int i,all;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 
 | ||||
| 		TempData1=Image_data1; | ||||
| 		TempData2=Image_data2; | ||||
| 		 | ||||
| 		for(i=0;i<4;i++) | ||||
| 		{  | ||||
| 			outdata=outdata<<1; | ||||
| 			if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x40)) | ||||
| 				outdata=outdata|0x01; | ||||
| 			else  | ||||
| 				outdata=outdata|0x00; | ||||
| 
 | ||||
| 			TempData1=TempData1<<2; | ||||
|   | ||||
| 		} | ||||
| 
 | ||||
| 		for(all=0;all<4;all++) | ||||
| 		{  | ||||
| 			outdata=outdata<<1; | ||||
| 			if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x40) | ||||
| 				outdata=outdata|0x01; | ||||
| 			else  | ||||
| 				outdata=outdata|0x00; | ||||
| 
 | ||||
| 			TempData2=TempData2<<2; | ||||
| 
 | ||||
| 		} | ||||
| 		return outdata; | ||||
| } | ||||
| unsigned char R26_DTM2(unsigned char Image_data1,unsigned char Image_data2) | ||||
| { | ||||
| 	unsigned int i,all;  | ||||
| 	unsigned char TempData1,TempData2; | ||||
| 	unsigned char outdata=0x00; | ||||
| 	TempData1=Image_data1; | ||||
| 	TempData2=Image_data2; | ||||
| 		 | ||||
| 		for(i=0;i<4;i++) | ||||
| 		{  | ||||
| 			outdata=outdata<<1; | ||||
| 			if( ((TempData1&0xC0)==0xC0) || ((TempData1&0xC0)==0x80)) | ||||
| 				outdata=outdata|0x01; | ||||
| 			else  | ||||
| 				outdata=outdata|0x00; | ||||
| 
 | ||||
| 			TempData1=TempData1<<2; | ||||
| 		} | ||||
| 
 | ||||
| 		for(all=0;all<4;all++) | ||||
| 		{  | ||||
| 			outdata=outdata<<1; | ||||
| 			if((TempData2&0xC0)==0xC0||(TempData2&0xC0)==0x80) | ||||
| 				outdata=outdata|0x01; | ||||
| 			else  | ||||
| 				outdata=outdata|0x00; | ||||
| 
 | ||||
| 			TempData2=TempData2<<2; | ||||
| 
 | ||||
| 		} | ||||
| 		return outdata; | ||||
| } | ||||
| //4 Gray update display function
 | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   unsigned char value;    | ||||
|   EPD_W21_WriteCMD(0x24);   //write RAM for black(0)/white (1)           
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{    | ||||
| 		value= R24_DTM1( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(value);  | ||||
| 	}  | ||||
|   EPD_W21_WriteCMD(0x26);   //write RAM for black(0)/white (1)
 | ||||
| 	for(i=0;i<EPD_ARRAY*2;i+=2) | ||||
| 	{    | ||||
| 		value= R26_DTM2( *(datas+i),*(datas+i+1)); | ||||
| 		EPD_W21_WriteDATA(value);  | ||||
| 	}  | ||||
| 	  | ||||
|    EPD_Update_4G();	  | ||||
| } | ||||
| 
 | ||||
| void pic_display_4line(void) | ||||
| { | ||||
|   unsigned int i,row,col; | ||||
| 	EPD_W21_WriteCMD(0x24);			//¿ªÊ¼´«ÊäºÚ°×ͼÏñ	                             
 | ||||
|   for(col=0;col<300;col++)   | ||||
|     {  | ||||
| 			for(row=0;row<13;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 			}  | ||||
| 			for(row=0;row<12;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 			}  | ||||
| 			for(row=0;row<12;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 			}  | ||||
| 			for(row=0;row<13;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 			} | ||||
| 		} | ||||
| 	 | ||||
| 	  EPD_W21_WriteCMD(0x26);			//¿ªÊ¼´«ÊäºìͼÏñ	                       
 | ||||
| 		for(col=0;col<300;col++) | ||||
|     {  | ||||
| 			for(row=0;row<13;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 			}  | ||||
| 			for(row=0;row<12;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 			}  | ||||
| 			for(row=0;row<12;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 			}  | ||||
| 			for(row=0;row<13;row++) | ||||
| 			{  | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 			} | ||||
| 		}	 | ||||
| 	 | ||||
| 	EPD_Update_4G();	  | ||||
| } | ||||
| 
 | ||||
| /***********************************************************
 | ||||
| 						end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										39
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   400  | ||||
| #define EPD_HEIGHT  300 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_HW_Init(void);  | ||||
| void EPD_HW_Init_180(void);	 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      );													  | ||||
| //Fast update display
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray												 
 | ||||
| void EPD_HW_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas);	 | ||||
| void pic_display_4line(void);								//GUI
 | ||||
| void EPD_HW_Init_GUI(void);				  | ||||
| void EPD_Display(unsigned char *Image); | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										155
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/GDEY042T81.ino
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/GDEY042T81.ino
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,155 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       EPD_Dis_Part_Time(152,92+32*0,Num[i],         //x-A,y-A,DATA-A
 | ||||
|                         152,92+32*1,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                         152,92+32*2,gImage_numdot, //x-C,y-C,DATA-C
 | ||||
|                         152,92+32*3,Num[0],        //x-D,y-D,DATA-D
 | ||||
|                         152,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution  32*64
 | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //E-paper initialization 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update.
 | ||||
|       EPD_Dis_PartAll(gImage_p1); //Image 1
 | ||||
|       EPD_Dis_PartAll(gImage_p2); //Image 2
 | ||||
|       EPD_Dis_PartAll(gImage_p3); //Image 3
 | ||||
|       EPD_Dis_PartAll(gImage_p4); //Image 4
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|   #endif | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000);//Delay for 2s.
 | ||||
|   #endif         | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 0, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     //Point   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); | ||||
|     //Line
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(170, 15, 170, 55, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     Paint_DrawLine(150, 35, 190, 35, BLACK, LINE_STYLE_DOTTED, DOT_PIXEL_1X1); | ||||
|     //Rectangle
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     //Circle
 | ||||
|     Paint_DrawCircle(150, 200, 100, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); | ||||
|     Paint_DrawCircle(250, 200, 100, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawString_EN(0, 70, "Good Display", &Font24, BLACK, WHITE); //Font24 
 | ||||
|     Paint_DrawNum(220, 200, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(220, 210, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(220, 225, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawNum(220, 245, 123456789, &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(220, 270, 123456789, &Font24, BLACK, WHITE); //Font24
 | ||||
|     EPD_HW_Init_GUI(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										8772
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8772
									
								
								ESP32epdx/examples/2-Colors (BW)/4.2/GDEY042T81/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1750
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1750
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										79
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   800 | ||||
| #define EPD_HEIGHT  272 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| #define Source_BYTES    400/8 | ||||
| #define Gate_BITS  272 | ||||
| #define ALLSCREEN_BYTES   Source_BYTES*Gate_BITS | ||||
| 
 | ||||
| #define NUM_LINE_BYTES 8// =64/8  
 | ||||
| #define NUM_COLUMN_BYTES  30  | ||||
| 
 | ||||
| #define PART_LINE_BYTES 8// =64/8
 | ||||
| #define PART_COLUMN_BYTES  150 | ||||
| //EPD
 | ||||
| void Epaper_READBUSY(void); | ||||
| void Epaper_Spi_WriteByte(unsigned char TxData); | ||||
| void EPD_W21_WriteCMD(unsigned char cmd); | ||||
| void EPD_W21_WriteDATA(unsigned char data); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void EPD_HW_Init(void); //Electronic paper initialization
 | ||||
| void EPD_Update(void); | ||||
| void EPD_Part_Init(void);//Local update initialization
 | ||||
| void EPD_Part_Update(void);  | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Display 
 | ||||
| 
 | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_myself_M(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ); | ||||
| void EPD_Dis_Part_myself_S(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 											   unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ); | ||||
| void EPD_Dis_Part_myself_All(unsigned int x_startA,unsigned int y_startA,const unsigned char * datasA, | ||||
| 	                       unsigned int x_startB,unsigned int y_startB,const unsigned char * datasB, | ||||
| 												 unsigned int x_startC,unsigned int y_startC,const unsigned char * datasC, | ||||
| 												 unsigned int x_startD,unsigned int y_startD,const unsigned char * datasD, | ||||
| 												 unsigned int x_startE,unsigned int y_startE,const unsigned char * datasE, | ||||
| 												 unsigned int PART_COLUMN,unsigned int PART_LINE | ||||
| 	                      ); | ||||
| //Display canvas function
 | ||||
| void EPD_HW_Init_GUI(void); //EPD init GUI
 | ||||
| void EPD_Display(unsigned char *Image);  | ||||
| void EPD_Standby(void); | ||||
| 
 | ||||
| void EPD_HW_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas); | ||||
| 	 | ||||
| void EPD_HW_Init_Part(void);												  | ||||
| void EPD_Dis_Part_M(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE);												  | ||||
| void EPD_Dis_Part_S(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE);												  | ||||
| 
 | ||||
|  //4 gray
 | ||||
| void EPD_HW_Init_4G(void);												  | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas);		 | ||||
| void EPD_WhiteScreen_ALL_4line(void);		 | ||||
| 												  | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,131 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 0 //Full screen update, fast update, and partial update demostration.
 | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_HW_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.         
 | ||||
| 			/************Fast update mode(1.5s)*******************/ | ||||
| 			EPD_HW_Init_Fast(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
|      /************4 Gray update mode*******************/ | ||||
| 	#if 1		//To enable this feature, please change 0 to 1
 | ||||
| 			EPD_HW_Init_4G(); //4 Gray update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s. 
 | ||||
| 
 | ||||
| 	 #endif  | ||||
|    | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_HW_Init(); //Electronic paper initialization. 
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       for(i=0;i<6;i++) | ||||
| 			EPD_Dis_Part_myself_S(64,80,Num[1],         //x-A,y-A,DATA-A
 | ||||
|                             64+48,80,Num[0],         //x-B,y-B,DATA-B
 | ||||
|                             64+48*2,80,gImage_numdot,       //x-C,y-C,DATA-C
 | ||||
|                             64+48*3,80,Num[0],       //x-D,y-D,DATA-D
 | ||||
|                             64+48*4,80,Num[i],104,48);	 //x-D,y-D,DATA-D,Resolution 104*48												
 | ||||
|    | ||||
| 
 | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|           | ||||
| #endif    | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI demostration.
 | ||||
| ///////////////////////////GUI///////////////////////////////////////////////////////////////////////////////////
 | ||||
|    //Data initialization settings
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 180, WHITE); //Set screen size and display orientation
 | ||||
|     /**************Drawing**********************/ | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(10, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(10, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(10, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(10, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_HW_Init(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW);//display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s   
 | ||||
|      | ||||
|     /***********String&Number***************************/  | ||||
|     Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location
 | ||||
|     Paint_Clear(WHITE); | ||||
|     Paint_DrawString_EN(10, 0, "Good Display", &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawString_EN(10, 10, "Good Display", &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawString_EN(10, 25, "Good Display", &Font16, BLACK, WHITE); //Font16
 | ||||
|     Paint_DrawString_EN(10, 45, "Good Display", &Font20, BLACK, WHITE); //Font20
 | ||||
|     Paint_DrawNum(10, 80, 123456789, &Font8, BLACK, WHITE);  //Font8
 | ||||
|     Paint_DrawNum(10, 90, 123456789, &Font12, BLACK, WHITE); //Font12
 | ||||
|     Paint_DrawNum(10, 105, 123456789, &Font16, BLACK, WHITE); //Font16
 | ||||
|     EPD_HW_Init(); //EPD init GUI
 | ||||
|     EPD_Display(ImageBW); //display image
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s    
 | ||||
| #endif  | ||||
|     //Clear
 | ||||
|     EPD_HW_Init(); //EPD init
 | ||||
|     EPD_WhiteScreen_White();//EPD Clear
 | ||||
|     EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //2s  
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										10908
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10908
									
								
								ESP32epdx/examples/2-Colors (BW)/5.79/GDEY0579T93/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										459
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										459
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,459 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char PartImage[1000];//Define Partial canvas space  
 | ||||
| 
 | ||||
| //Busy function
 | ||||
| void lcd_chkstatus(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {  //=0 BUSY
 | ||||
|      if(isEPD_W21_BUSY==1) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_Init(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x1F); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
|   EPD_W21_WriteCMD(0X50);     //VCOM AND DATA INTERVAL SETTING
 | ||||
|   EPD_W21_WriteDATA(0x21); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
|    | ||||
| } | ||||
| //Fast update initialization
 | ||||
| void EPD_Init_Fast(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x1F);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
|   EPD_W21_WriteCMD(0X50);     //VCOM AND DATA INTERVAL SETTING
 | ||||
|   EPD_W21_WriteDATA(0x29); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x5A);  | ||||
| } | ||||
| //Partial update  initialization
 | ||||
| void EPD_Init_Part(void) | ||||
| {  | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x1F); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0xE0); | ||||
|   EPD_W21_WriteDATA(0x02); | ||||
|   EPD_W21_WriteCMD(0xE5); | ||||
|   EPD_W21_WriteDATA(0x6E); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
|   //update
 | ||||
|   EPD_W21_WriteCMD(0x12);   //DISPLAY update   
 | ||||
|   delay(1);              //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
|   lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;   | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xff); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }    | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xff); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }    | ||||
|    EPD_Update();      | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
|   unsigned int i; | ||||
|   //Write Data
 | ||||
|   EPD_W21_WriteCMD(0x10);       | ||||
|   for(i=0;i<EPD_ARRAY;i++)        | ||||
|   { | ||||
|     EPD_W21_WriteDATA(0xff);   | ||||
|   } | ||||
|   EPD_W21_WriteCMD(0x13);       | ||||
|   for(i=0;i<EPD_ARRAY;i++)        | ||||
|   { | ||||
|     EPD_W21_WriteDATA(0xff);   | ||||
|   } | ||||
|    EPD_Update();    | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
|   unsigned int i; | ||||
|   //Write Data
 | ||||
|   EPD_W21_WriteCMD(0x10);       | ||||
|   for(i=0;i<EPD_ARRAY;i++)        | ||||
|   { | ||||
|     EPD_W21_WriteDATA(0xff);   | ||||
|   } | ||||
|   EPD_W21_WriteCMD(0x13);       | ||||
|   for(i=0;i<EPD_ARRAY;i++)        | ||||
|   { | ||||
|     EPD_W21_WriteDATA(0x00);   | ||||
|   } | ||||
|    EPD_Update();   | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;  | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xff); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }    | ||||
|    EPD_Update();      | ||||
|     | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_end,y_end; | ||||
| 
 | ||||
|   x_end=x_start+PART_LINE-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x50); | ||||
|   EPD_W21_WriteDATA(0xA9); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|   EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|   EPD_W21_WriteDATA (x_start/256); | ||||
|   EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (x_end/256);     | ||||
|   EPD_W21_WriteDATA (x_end%256-1);  //x-end 
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_start/256);  //
 | ||||
|   EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_end/256);     | ||||
|   EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
|   EPD_W21_WriteDATA (0x01);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|    { | ||||
|      EPD_W21_WriteDATA(datas[i]);   | ||||
|      | ||||
|    }   | ||||
|     EPD_Update();  | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;   | ||||
|   unsigned int x_start=0,y_start=0,x_end,y_end; | ||||
|   unsigned int PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
|   x_end=x_start+PART_LINE-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x50); | ||||
|   EPD_W21_WriteDATA(0xA9); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|   EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|   EPD_W21_WriteDATA (x_start/256); | ||||
|   EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (x_end/256);     | ||||
|   EPD_W21_WriteDATA (x_end%256-1);  //x-end 
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_start/256);  //
 | ||||
|   EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_end/256);     | ||||
|   EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
|   EPD_W21_WriteDATA (0x01);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|   for(i=0;i<PART_COLUMN*PART_LINE/8;i++)        | ||||
|    { | ||||
|      EPD_W21_WriteDATA(datas[i]);    | ||||
|    }   | ||||
|     EPD_Update();  | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {    | ||||
|     EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING     
 | ||||
|     EPD_W21_WriteDATA(0xf7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57    WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7  
 | ||||
| 
 | ||||
|     EPD_W21_WriteCMD(0X02);   //power off
 | ||||
|     lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
|     delay(100);   //!!!The delay here is necessary, 200uS at least!!!       
 | ||||
|     EPD_W21_WriteCMD(0X07);   //deep sleep
 | ||||
|     EPD_W21_WriteDATA(0xA5); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   unsigned int i,j;   | ||||
|   unsigned int x_end,y_end; | ||||
| 
 | ||||
|   x_end=x_start+PART_LINE*num-1;  | ||||
|   y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x50); | ||||
|   EPD_W21_WriteDATA(0xA9); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x91);   //This command makes the display enter partial mode
 | ||||
|   EPD_W21_WriteCMD(0x90);   //resolution setting
 | ||||
|   EPD_W21_WriteDATA (x_start/256); | ||||
|   EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (x_end/256);     | ||||
|   EPD_W21_WriteDATA (x_end%256-1);  //x-end 
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_start/256);  //
 | ||||
|   EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
|   EPD_W21_WriteDATA (y_end/256);     | ||||
|   EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
|   EPD_W21_WriteDATA (0x01);  | ||||
| 
 | ||||
|   EPD_W21_WriteCMD(0x13);        //writes New data to SRAM.
 | ||||
|   for(i=0;i<PART_COLUMN;i++)        | ||||
|    { | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|         EPD_W21_WriteDATA(datas_A[i*PART_LINE/8+j]);     | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|         EPD_W21_WriteDATA(datas_B[i*PART_LINE/8+j]);   | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|         EPD_W21_WriteDATA(datas_C[i*PART_LINE/8+j]);     | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|         EPD_W21_WriteDATA(datas_D[i*PART_LINE/8+j]);   | ||||
|       for(j=0;j<PART_LINE/8;j++)        | ||||
|         EPD_W21_WriteDATA(datas_E[i*PART_LINE/8+j]);        | ||||
|    }   | ||||
|      | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
|   EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
|   EPD_Update(); | ||||
| }                         | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| { | ||||
|   EPD_W21_RST_0;  // Module reset   
 | ||||
|   delay(10);//At least 10ms delay 
 | ||||
|   EPD_W21_RST_1; | ||||
|   delay(10); //At least 10ms delay 
 | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x00); | ||||
|   EPD_W21_WriteDATA(0x13); | ||||
|    | ||||
|   EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
|   delay(300);   | ||||
|   lcd_chkstatus(); | ||||
|   EPD_W21_WriteCMD(0X50);     //VCOM AND DATA INTERVAL SETTING
 | ||||
|   EPD_W21_WriteDATA(0x21); | ||||
|   EPD_W21_WriteDATA(0x07); | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|   unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xff); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(Image[i]); | ||||
|    }	  | ||||
|    EPD_Update();			  | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // 4 Gray display
 | ||||
| void EPD_Init_4G(void)  | ||||
| {	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0x00); | ||||
| 	EPD_W21_WriteDATA(0x1F);  | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(300);   | ||||
| 	lcd_chkstatus(); | ||||
| 	EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x21); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0xE0); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 	EPD_W21_WriteCMD(0xE5); | ||||
| 	EPD_W21_WriteDATA(0x5F); //0x5A--1.5s, 0x5F--4 Gray
 | ||||
| 	 | ||||
| }	 | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL_4G(const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i,j,k; | ||||
| 	unsigned char temp1,temp2,temp3; | ||||
| 
 | ||||
| 	  //old  data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	        | ||||
| 
 | ||||
| 		for(i=0;i<38880;i++)	               //38880*2  648*480
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if((temp2>=0x80)&&(temp2<0xC0))  | ||||
| 						temp3 |= 0x00;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x01; //gray2
 | ||||
|         if((j==0&&k<=3)||(j==1&&k<=2)) | ||||
| 				{ | ||||
| 				temp3 <<= 1;	 | ||||
| 				temp1 <<= 2; | ||||
| 				} | ||||
| 			 } | ||||
| 		 }	 | ||||
|      EPD_W21_WriteDATA(temp3);			 | ||||
| 		} | ||||
| 
 | ||||
|     //new  data
 | ||||
| 		EPD_W21_WriteCMD(0x13);	        | ||||
| 		for(i=0;i<38880*2;i++)	               //38880*2   648*480
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if((temp2>=0x80)&&(temp2<0xC0))  | ||||
| 						temp3 |= 0x01;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x00; //gray2
 | ||||
|         | ||||
|         if((j==0&&k<=3)||(j==1&&k<=2)) | ||||
| 				{ | ||||
| 				temp3 <<= 1;	 | ||||
| 				temp1 <<= 2; | ||||
| 				} | ||||
| 			 }	 | ||||
| 		 } | ||||
| 			EPD_W21_WriteDATA(temp3);			 | ||||
| 	 } | ||||
| 
 | ||||
|    EPD_Update(); | ||||
|     | ||||
| } | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   648  | ||||
| #define EPD_HEIGHT  480 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);                     | ||||
| //Fast update display
 | ||||
| void EPD_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray
 | ||||
| void EPD_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G (const unsigned char *datas);		 | ||||
|  //GUI
 | ||||
|  void EPD_Display(unsigned char *Image);                         | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,156 @@ | |||
| #include<ESP32epdx.h> //E-paper SPI etc | ||||
| //EPD
 | ||||
| #include"EPD.h"  //E-paper driver | ||||
| #include"IMAGE.h" //E-paper image data | ||||
| 
 | ||||
| 
 | ||||
| unsigned char ImageBW[EPD_ARRAY];//Define canvas space  
 | ||||
| void setup() { | ||||
|  /* ESP32-WROOM-32D (Using hardware SPI)
 | ||||
|   BUSY——GPIO13  RES——GPIO12  DC——GPIO14  CS——GPIO27  SCK—GPIO18  SDIN—GPIO23  */ | ||||
|    pinMode(13, INPUT);  //BUSY
 | ||||
|    pinMode(12, OUTPUT); //RES 
 | ||||
|    pinMode(14, OUTPUT); //DC   
 | ||||
|    pinMode(27, OUTPUT); //CS   
 | ||||
|    //SPI
 | ||||
|    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));  | ||||
|    SPI.begin ();   | ||||
| } | ||||
| 
 | ||||
| //Tips//
 | ||||
| /*
 | ||||
| 1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. | ||||
| 2.There will be no flicker when EPD performs a partial update. | ||||
| 3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. | ||||
| 4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) | ||||
| 5.Re-initialization is required for every full screen update. | ||||
| 6.When porting the program, set the BUSY pin to input mode and other pins to output mode. | ||||
| */ | ||||
| void loop() { | ||||
|     unsigned char i; | ||||
|   | ||||
|  #if 1 //Full screen update, fast update, and partial update demostration.
 | ||||
| 
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|      /************Full display(2s)*******************/ | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|              | ||||
|       /************Fast update mode(1.5s)*******************/ | ||||
|       EPD_Init_Fast(); //Fast update initialization.
 | ||||
|       EPD_WhiteScreen_ALL_Fast(gImage_2); //To display one image using fast update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
| 			/************4 Gray update mode(2s)*******************/ | ||||
| 			EPD_Init_4G(); //Fast update initialization.
 | ||||
| 			EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using 4 gray update.
 | ||||
| 			EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
| 			delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   #if 1 //Partial update demostration.
 | ||||
|   //Partial update demo support displaying a clock at 5 locations with 00:00.  If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Electronic paper initialization.  
 | ||||
|       EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update.
 | ||||
|       EPD_Init_Part(); //Pa update initialization.
 | ||||
|       for(i=0;i<6;i++) | ||||
|       { | ||||
|         EPD_Dis_Part_Time(200,180,Num[1],Num[0],gImage_numdot,Num[0],Num[i],5,104,48); //x,y,DATA-A~E,Resolution 48*104                 
 | ||||
|       }        | ||||
|        | ||||
|       EPD_DeepSleep();  //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif   | ||||
|    | ||||
|   #if 1    //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1.
 | ||||
|   //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates.
 | ||||
|   //////////////////////Partial update time demo/////////////////////////////////////
 | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_Init_Part(); | ||||
|       EPD_Dis_PartAll(gImage_p1); | ||||
|       EPD_Dis_PartAll(gImage_p2); | ||||
| 
 | ||||
|       EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s. 
 | ||||
|        | ||||
|       EPD_Init(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif | ||||
|    | ||||
|   #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1.
 | ||||
|       /************Full display(2s)*******************/ | ||||
|       EPD_Init_180(); //Full screen update initialization.
 | ||||
|       EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update.
 | ||||
|       EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|       delay(2000); //Delay for 2s.
 | ||||
|   #endif         | ||||
|    | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
|  #if 1 //GUI Demo(GUI examples can display points, lines, rectangles, circles, letters, numbers, etc).
 | ||||
|    //Data initialization settings.
 | ||||
|     Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 0, WHITE); //Set canvas parameters, GUI image rotation, please change 0 to 0/90/180/270.
 | ||||
|     Paint_SelectImage(ImageBW); //Select current settings.
 | ||||
|     /**************Drawing demonstration**********************/    | ||||
| 		 | ||||
| 		Paint_Clear(WHITE); //Clear canvas.
 | ||||
| 		//Point.   
 | ||||
|     Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1.
 | ||||
|     Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2.
 | ||||
|     Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3.
 | ||||
|     Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4.
 | ||||
| 		//Line.
 | ||||
|     Paint_DrawLine(20, 10, 70, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1.
 | ||||
|     Paint_DrawLine(70, 10, 20, 60, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2.
 | ||||
| 		//Rectangle.
 | ||||
|     Paint_DrawRectangle(20, 10, 70, 60, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1.
 | ||||
|     Paint_DrawRectangle(85, 10, 130, 60, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2.
 | ||||
|     //Circle.
 | ||||
| 		Paint_DrawCircle(150, 90, 30, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle.
 | ||||
|     Paint_DrawCircle(200, 90, 30, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle.
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW); //Display GUI image.
 | ||||
| 		EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //Delay for 2s.
 | ||||
| 		 | ||||
|     /***********Letter demo***************************/ | ||||
| 		Paint_Clear(WHITE); //Clear canvas.
 | ||||
|     Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE);  //5*8.
 | ||||
| 		Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //7*12.
 | ||||
| 		Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //11*16.
 | ||||
| 		Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //14*20.
 | ||||
| 		Paint_DrawString_EN(0, 80, "Good Display", &Font24, BLACK, WHITE); //17*24.
 | ||||
|     Paint_DrawNum(0, 120, 123456789, &Font8, BLACK, WHITE);  //5*8.
 | ||||
| 		Paint_DrawNum(0, 130, 123456789, &Font12, BLACK, WHITE); //7*12.
 | ||||
| 		Paint_DrawNum(0, 155, 123456789, &Font16, BLACK, WHITE); //11*16.
 | ||||
| 		Paint_DrawNum(0, 175, 123456789, &Font20, BLACK, WHITE); //14*20.
 | ||||
| 		Paint_DrawNum(0, 210, 123456789, &Font24, BLACK, WHITE); //17*24.
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_Display(ImageBW);//Display GUI image.
 | ||||
| 		EPD_DeepSleep(); //EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!!
 | ||||
|     delay(2000); //Delay for 2s.	
 | ||||
| 
 | ||||
| #endif | ||||
|     //Clear
 | ||||
|     EPD_Init(); //Full screen update initialization.
 | ||||
|     EPD_WhiteScreen_White(); //Clear screen function.
 | ||||
|     EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen.
 | ||||
|     delay(2000); //Delay for 2s.
 | ||||
| 
 | ||||
|   while(1); // The program stops here
 | ||||
|    | ||||
| }  | ||||
							
								
								
									
										17699
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17699
									
								
								ESP32epdx/examples/2-Colors (BW)/5.83/GDEY0583T81/IMAGE.h
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/7.5/GDEY075T7/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										600
									
								
								ESP32epdx/examples/2-Colors (BW)/7.5/GDEY075T7/EPD.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,600 @@ | |||
| #include <EPD_SPI.h> | ||||
| #include "EPD.h" | ||||
| 
 | ||||
| //Delay Functions
 | ||||
| void delay_xms(unsigned int xms) | ||||
| { | ||||
|    delay(xms); | ||||
| } | ||||
| 
 | ||||
| ////////////////////////////////////E-paper demo//////////////////////////////////////////////////////////
 | ||||
| unsigned char PartImage[1000];//Define Partial canvas space  
 | ||||
| 
 | ||||
| //Busy function
 | ||||
| void lcd_chkstatus(void) | ||||
| {  | ||||
|   while(1) | ||||
|   {	 //=0 BUSY
 | ||||
|      if(isEPD_W21_BUSY==1) break; | ||||
|   }   | ||||
| } | ||||
| //Full screen update initialization
 | ||||
| void EPD_Init(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x01);			//POWER SETTING
 | ||||
| 	EPD_W21_WriteDATA (0x07); | ||||
| 	EPD_W21_WriteDATA (0x07);    //VGH=20V,VGL=-20V
 | ||||
| 	EPD_W21_WriteDATA (0x3f);		//VDH=15V
 | ||||
| 	EPD_W21_WriteDATA (0x3f);		//VDL=-15V
 | ||||
| 
 | ||||
| 	//Enhanced display drive(Add 0x06 command)
 | ||||
| 	EPD_W21_WriteCMD(0x06);			//Booster Soft Start 
 | ||||
| 	EPD_W21_WriteDATA (0x17); | ||||
| 	EPD_W21_WriteDATA (0x17);    | ||||
| 	EPD_W21_WriteDATA (0x28);		 | ||||
| 	EPD_W21_WriteDATA (0x17);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(100);   | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X00);			//PANNEL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x1F);   //KW-3f   KWR-2F	BWROTP 0f	BWOTP 1f
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x61);        	//tres			
 | ||||
| 	EPD_W21_WriteDATA (0x03);		//source 800
 | ||||
| 	EPD_W21_WriteDATA (0x20); | ||||
| 	EPD_W21_WriteDATA (0x01);		//gate 480
 | ||||
| 	EPD_W21_WriteDATA (0xE0);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X15);		 | ||||
| 	EPD_W21_WriteDATA(0x00);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x10); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X60);			//TCON SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x22); | ||||
| 	 | ||||
| } | ||||
| //Fast update 1 initialization
 | ||||
| void EPD_Init_Fast(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0X00);			//PANNEL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x1F);   //KW-3f   KWR-2F	BWROTP 0f	BWOTP 1f
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x10); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(100);   | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	//Enhanced display drive(Add 0x06 command)
 | ||||
| 	EPD_W21_WriteCMD(0x06);			//Booster Soft Start 
 | ||||
| 	EPD_W21_WriteDATA (0x27); | ||||
| 	EPD_W21_WriteDATA (0x27);    | ||||
| 	EPD_W21_WriteDATA (0x18);		 | ||||
| 	EPD_W21_WriteDATA (0x17);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0xE0); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 	EPD_W21_WriteCMD(0xE5); | ||||
| 	EPD_W21_WriteDATA(0x5A); | ||||
| } | ||||
| //Partial update  initialization
 | ||||
| void EPD_Init_Part(void) | ||||
| {	 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X00);			//PANNEL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x1F);   //KW-3f   KWR-2F	BWROTP 0f	BWOTP 1f
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(100);   | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 	 | ||||
| 	EPD_W21_WriteCMD(0xE0); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 	EPD_W21_WriteCMD(0xE5); | ||||
| 	EPD_W21_WriteDATA(0x6E); | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Update Function///////////////////////////////////////////////////////
 | ||||
| //Full screen update update function
 | ||||
| void EPD_Update(void) | ||||
| {    | ||||
| 	//update
 | ||||
| 	EPD_W21_WriteCMD(0x12);		//DISPLAY update 	
 | ||||
| 	delay_xms(1);	             //!!!The delay here is necessary, 200uS at least!!!     
 | ||||
| 	lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal
 | ||||
| } | ||||
| 
 | ||||
| //////////////////////////////Display Data Transfer Function////////////////////////////////////////////
 | ||||
| //Full screen update display function
 | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas) | ||||
| { | ||||
|    unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }	  | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Fast update display function
 | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) | ||||
| { | ||||
|   unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }	  | ||||
|    EPD_Update();	 	  | ||||
| } | ||||
| 
 | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White(void) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	//Write Data
 | ||||
| 	EPD_W21_WriteCMD(0x10);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0x00);   | ||||
| 	} | ||||
| 	EPD_W21_WriteCMD(0x13);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0x00);   | ||||
| 	} | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Clear screen display
 | ||||
| void EPD_WhiteScreen_White_Basemap(void) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	//Write Data
 | ||||
| 	EPD_W21_WriteCMD(0x10);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0xFF);  //is  different
 | ||||
| 	} | ||||
| 	EPD_W21_WriteCMD(0x13);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0x00);   | ||||
| 	} | ||||
|    EPD_Update();	  | ||||
| } | ||||
| //Display all black
 | ||||
| void EPD_WhiteScreen_Black(void) | ||||
| { | ||||
| 	unsigned int i; | ||||
| 	//Write Data
 | ||||
| 	EPD_W21_WriteCMD(0x10);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0x00);   | ||||
| 	} | ||||
| 	EPD_W21_WriteCMD(0x13);	      | ||||
| 	for(i=0;i<EPD_ARRAY;i++)	      | ||||
| 	{ | ||||
| 		EPD_W21_WriteDATA(0xff);   | ||||
| 	} | ||||
|    EPD_Update();	 | ||||
| } | ||||
| //Partial update of background display, this function is necessary, please do not delete it!!!
 | ||||
| void EPD_SetRAMValue_BaseMap( const unsigned char * datas) | ||||
| { | ||||
|   unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0xFF); //is  different
 | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(datas[i]); | ||||
|    }	  | ||||
|    EPD_Update();		  | ||||
| 	  | ||||
| } | ||||
| //Partial update display
 | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 
 | ||||
| 	x_end=x_start+PART_LINE-1;  | ||||
| 	y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x50); | ||||
| 	EPD_W21_WriteDATA(0xA9); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x91);		//This command makes the display enter partial mode
 | ||||
| 	EPD_W21_WriteCMD(0x90);		//resolution setting
 | ||||
| 	EPD_W21_WriteDATA (x_start/256); | ||||
| 	EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (x_end/256);		 | ||||
| 	EPD_W21_WriteDATA (x_end%256-1);  //x-end	
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_start/256);  //
 | ||||
| 	EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_end/256);		 | ||||
| 	EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
| 	EPD_W21_WriteDATA (0x01);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x13);				 //writes New data to SRAM.
 | ||||
| 	for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 	 { | ||||
| 		 EPD_W21_WriteDATA(datas[i]);   | ||||
| 	 }	 | ||||
|     EPD_Update();	 | ||||
| 
 | ||||
| } | ||||
| //Full screen partial update display
 | ||||
| void EPD_Dis_PartAll(const unsigned char * datas) | ||||
| { | ||||
| 	unsigned int i;   | ||||
| 	unsigned int x_start=0,y_start=0,x_end,y_end; | ||||
| 	unsigned int PART_COLUMN=EPD_HEIGHT,PART_LINE=EPD_WIDTH; | ||||
| 
 | ||||
| 	x_end=x_start+PART_LINE-1;  | ||||
| 	y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x50); | ||||
| 	EPD_W21_WriteDATA(0xA9); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x91);		//This command makes the display enter partial mode
 | ||||
| 	EPD_W21_WriteCMD(0x90);		//resolution setting
 | ||||
| 	EPD_W21_WriteDATA (x_start/256); | ||||
| 	EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (x_end/256);		 | ||||
| 	EPD_W21_WriteDATA (x_end%256-1);  //x-end	
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_start/256);  //
 | ||||
| 	EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_end/256);		 | ||||
| 	EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
| 	EPD_W21_WriteDATA (0x01);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x13);				 //writes New data to SRAM.
 | ||||
| 	for(i=0;i<PART_COLUMN*PART_LINE/8;i++)	      | ||||
| 	 { | ||||
| 		 EPD_W21_WriteDATA(datas[i]);  	 | ||||
| 	 }	 | ||||
|     EPD_Update();	 | ||||
| 
 | ||||
| } | ||||
| //Deep sleep function
 | ||||
| void EPD_DeepSleep(void) | ||||
| {  	 | ||||
| 		EPD_W21_WriteCMD(0X50);  //VCOM AND DATA INTERVAL SETTING			
 | ||||
| 		EPD_W21_WriteDATA(0xf7); //WBmode:VBDF 17|D7 VBDW 97 VBDB 57		WBRmode:VBDF F7 VBDW 77 VBDB 37  VBDR B7	
 | ||||
| 
 | ||||
| 		EPD_W21_WriteCMD(0X02);  	//power off
 | ||||
| 	  lcd_chkstatus();          //waiting for the electronic paper IC to release the idle signal 	
 | ||||
| 	  EPD_W21_WriteCMD(0X07);  	//deep sleep
 | ||||
| 		EPD_W21_WriteDATA(0xA5); | ||||
| } | ||||
| 
 | ||||
| //Partial update write address and data
 | ||||
| void EPD_Dis_Part_RAM(unsigned int x_start,unsigned int y_start, | ||||
| 	                      const unsigned char * datas_A,const unsigned char * datas_B, | ||||
| 												const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	unsigned int i,j;   | ||||
| 	unsigned int x_end,y_end; | ||||
| 
 | ||||
| 	x_end=x_start+PART_LINE*num-1;  | ||||
| 	y_end=y_start+PART_COLUMN-1; | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x50); | ||||
| 	EPD_W21_WriteDATA(0xA9); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x91);		//This command makes the display enter partial mode
 | ||||
| 	EPD_W21_WriteCMD(0x90);		//resolution setting
 | ||||
| 	EPD_W21_WriteDATA (x_start/256); | ||||
| 	EPD_W21_WriteDATA (x_start%256);   //x-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (x_end/256);		 | ||||
| 	EPD_W21_WriteDATA (x_end%256-1);  //x-end	
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_start/256);  //
 | ||||
| 	EPD_W21_WriteDATA (y_start%256);   //y-start    
 | ||||
| 
 | ||||
| 	EPD_W21_WriteDATA (y_end/256);		 | ||||
| 	EPD_W21_WriteDATA (y_end%256-1);  //y-end
 | ||||
| 	EPD_W21_WriteDATA (0x01);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x13);				 //writes New data to SRAM.
 | ||||
| 	for(i=0;i<PART_COLUMN;i++)	      | ||||
| 	 { | ||||
| 		  for(j=0;j<PART_LINE/8;j++)	      | ||||
| 		    EPD_W21_WriteDATA(datas_A[i*PART_LINE/8+j]);  	 | ||||
| 			for(j=0;j<PART_LINE/8;j++)	      | ||||
| 		    EPD_W21_WriteDATA(datas_B[i*PART_LINE/8+j]);   | ||||
| 		  for(j=0;j<PART_LINE/8;j++)	      | ||||
| 		    EPD_W21_WriteDATA(datas_C[i*PART_LINE/8+j]);  	 | ||||
| 			for(j=0;j<PART_LINE/8;j++)	      | ||||
| 		    EPD_W21_WriteDATA(datas_D[i*PART_LINE/8+j]); 	 | ||||
| 			for(j=0;j<PART_LINE/8;j++)	      | ||||
| 		    EPD_W21_WriteDATA(datas_E[i*PART_LINE/8+j]); 			  | ||||
| 	 }	 | ||||
| 	  | ||||
| 	   | ||||
| } | ||||
| //Clock display
 | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
| 	                      const unsigned char * datas_A,const unsigned char * datas_B, | ||||
| 												const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE) | ||||
| { | ||||
| 	EPD_Dis_Part_RAM(x_start,y_start,datas_A,datas_B,datas_C,datas_D,datas_E,num,PART_COLUMN,PART_LINE); | ||||
| 	EPD_Update(); | ||||
| 	EPD_W21_WriteCMD(0X92);  	//This command makes the display exit partial mode and enter normal mode. 
 | ||||
|   | ||||
| }												  | ||||
| 
 | ||||
| 
 | ||||
| ////////////////////////////////Other newly added functions////////////////////////////////////////////
 | ||||
| //Display rotation 180 degrees initialization
 | ||||
| void EPD_Init_180(void) | ||||
| { | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x01);			//POWER SETTING
 | ||||
| 	EPD_W21_WriteDATA (0x07); | ||||
| 	EPD_W21_WriteDATA (0x07);    //VGH=20V,VGL=-20V
 | ||||
| 	EPD_W21_WriteDATA (0x3f);		//VDH=15V
 | ||||
| 	EPD_W21_WriteDATA (0x3f);		//VDL=-15V
 | ||||
| 
 | ||||
| 	//Enhanced display drive(Add 0x06 command)
 | ||||
| 	EPD_W21_WriteCMD(0x06);			//Booster Soft Start 
 | ||||
| 	EPD_W21_WriteDATA (0x17); | ||||
| 	EPD_W21_WriteDATA (0x17);    | ||||
| 	EPD_W21_WriteDATA (0x28);		 | ||||
| 	EPD_W21_WriteDATA (0x17);	 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(100);   | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X00);			//PANNEL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x13);   //KW-3f   KWR-2F	BWROTP 0f	BWOTP 1f
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x61);        	//tres			
 | ||||
| 	EPD_W21_WriteDATA (0x03);		//source 800
 | ||||
| 	EPD_W21_WriteDATA (0x20); | ||||
| 	EPD_W21_WriteDATA (0x01);		//gate 480
 | ||||
| 	EPD_W21_WriteDATA (0xE0);   | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X15);		 | ||||
| 	EPD_W21_WriteDATA(0x00);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x10); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X60);			//TCON SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x22); | ||||
| } | ||||
| 
 | ||||
| //GUI display
 | ||||
| void EPD_Display(unsigned char *Image) | ||||
| { | ||||
|   unsigned int i;	 | ||||
|   EPD_W21_WriteCMD(0x10);  //write old data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(0x00); | ||||
|    } | ||||
|   EPD_W21_WriteCMD(0x13);  //write new data 
 | ||||
|   for(i=0;i<EPD_ARRAY;i++) | ||||
|    {                | ||||
|      EPD_W21_WriteDATA(~Image[i]); | ||||
|    }	  | ||||
|    EPD_Update();			  | ||||
| } | ||||
| 
 | ||||
| // 4 Gray display
 | ||||
| void EPD_Init_4G(void)  | ||||
| {		 | ||||
| 	EPD_W21_RST_0;  // Module reset   
 | ||||
| 	delay_xms(10);//At least 10ms delay 
 | ||||
| 	EPD_W21_RST_1; | ||||
| 	delay_xms(10); //At least 10ms delay 
 | ||||
|    | ||||
| 	EPD_W21_WriteCMD(0X00);			//PANNEL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x1F);   //KW-3f   KWR-2F	BWROTP 0f	BWOTP 1f
 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0X50);			//VCOM AND DATA INTERVAL SETTING
 | ||||
| 	EPD_W21_WriteDATA(0x10); | ||||
| 	EPD_W21_WriteDATA(0x07); | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0x04); //POWER ON
 | ||||
| 	delay_xms(100);   | ||||
| 	lcd_chkstatus();        //waiting for the electronic paper IC to release the idle signal
 | ||||
| 
 | ||||
| 	//Enhanced display drive(Add 0x06 command)
 | ||||
| 	EPD_W21_WriteCMD(0x06);			//Booster Soft Start 
 | ||||
| 	EPD_W21_WriteDATA (0x27); | ||||
| 	EPD_W21_WriteDATA (0x27);    | ||||
| 	EPD_W21_WriteDATA (0x18);		 | ||||
| 	EPD_W21_WriteDATA (0x17);		 | ||||
| 
 | ||||
| 	EPD_W21_WriteCMD(0xE0); | ||||
| 	EPD_W21_WriteDATA(0x02); | ||||
| 	EPD_W21_WriteCMD(0xE5); | ||||
| 	EPD_W21_WriteDATA(0x5F); //0x5A--1.5s, 0x5F--4 Gray
 | ||||
| 		 | ||||
| }	 | ||||
| 
 | ||||
| void EPD_WhiteScreen_ALL_4G (const unsigned char *datas) | ||||
| { | ||||
| 	unsigned int i,j,k; | ||||
| 	unsigned char temp1,temp2,temp3; | ||||
| 
 | ||||
| 	  //old  data
 | ||||
| 		EPD_W21_WriteCMD(0x10);	        | ||||
| 
 | ||||
| 		for(i=0;i<48000;i++)	               //48000*2  800*480
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if((temp2>=0x80)&&(temp2<0xC0))  | ||||
| 						temp3 |= 0x00;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x01; //gray2
 | ||||
|         if((j==0&&k<=3)||(j==1&&k<=2)) | ||||
| 				{ | ||||
| 				temp3 <<= 1;	 | ||||
| 				temp1 <<= 2; | ||||
| 				} | ||||
| 			 } | ||||
| 		 }	 | ||||
|      EPD_W21_WriteDATA(~temp3);			 | ||||
| 		} | ||||
| 
 | ||||
|     //new  data
 | ||||
| 		EPD_W21_WriteCMD(0x13);	        | ||||
| 		for(i=0;i<48000*2;i++)	               //48000*2   800*480
 | ||||
| 		{  | ||||
| 			temp3=0; | ||||
|       for(j=0;j<2;j++)	 | ||||
| 			{ | ||||
| 				temp1 = datas[i*2+j]; | ||||
| 				for(k=0;k<4;k++) | ||||
| 				{ | ||||
| 					temp2 = temp1&0xC0 ; | ||||
| 					if(temp2 == 0xC0) | ||||
| 						temp3 |= 0x01;//white
 | ||||
| 					else if(temp2 == 0x00) | ||||
| 						temp3 |= 0x00;  //black
 | ||||
| 					else if((temp2>=0x80)&&(temp2<0xC0))  | ||||
| 						temp3 |= 0x01;  //gray1
 | ||||
| 					else if(temp2 == 0x40) | ||||
| 						temp3 |= 0x00; //gray2
 | ||||
|         | ||||
|         if((j==0&&k<=3)||(j==1&&k<=2)) | ||||
| 				{ | ||||
| 				temp3 <<= 1;	 | ||||
| 				temp1 <<= 2; | ||||
| 				} | ||||
| 			 }	 | ||||
| 		 } | ||||
| 			EPD_W21_WriteDATA(~temp3);			 | ||||
| 	 } | ||||
| 
 | ||||
|    EPD_Update(); | ||||
|     | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void Display_4Level_Gray(void) | ||||
| { | ||||
| 	unsigned int i,j;  | ||||
| 
 | ||||
| 	lcd_chkstatus(); | ||||
| 	EPD_W21_WriteCMD(0x10);    | ||||
|   for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
|   	 | ||||
|  for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 		} | ||||
| 		 | ||||
| 		for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
| 		 | ||||
| 		for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 		} | ||||
| 			 | ||||
| 	lcd_chkstatus(); | ||||
| 	EPD_W21_WriteCMD(0x13);    | ||||
| 	for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
|   	 | ||||
|  for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0x00); | ||||
| 		} | ||||
| 		 | ||||
| 		for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 		} | ||||
| 		 | ||||
| 		for(i=0;i<800*480/16/2;i++) | ||||
| 		{ | ||||
| 				EPD_W21_WriteDATA(0xFF); | ||||
| 		} | ||||
| 
 | ||||
| 		EPD_Update(); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /***********************************************************
 | ||||
|             end file | ||||
| ***********************************************************/ | ||||
| 
 | ||||
							
								
								
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/7.5/GDEY075T7/EPD.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ESP32epdx/examples/2-Colors (BW)/7.5/GDEY075T7/EPD.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| #ifndef _EPD_H_ | ||||
| #define _EPD_H_ | ||||
| 
 | ||||
| #define EPD_WIDTH   800  | ||||
| #define EPD_HEIGHT  480 | ||||
| #define EPD_ARRAY  EPD_WIDTH*EPD_HEIGHT/8   | ||||
| 
 | ||||
| 
 | ||||
| //Full screen update display
 | ||||
| void EPD_Init(void);  | ||||
| void EPD_Init_180(void);   | ||||
| void EPD_WhiteScreen_ALL(const unsigned char *datas); | ||||
| void EPD_WhiteScreen_White(void); | ||||
| void EPD_WhiteScreen_Black(void); | ||||
| void EPD_DeepSleep(void); | ||||
| //Partial update display 
 | ||||
| void EPD_Init_Part(void); | ||||
| void EPD_SetRAMValue_BaseMap(const unsigned char * datas); | ||||
| void EPD_Dis_PartAll(const unsigned char * datas); | ||||
| void EPD_Dis_Part(unsigned int x_start,unsigned int y_start,const unsigned char * datas,unsigned int PART_COLUMN,unsigned int PART_LINE); | ||||
| void EPD_Dis_Part_Time(unsigned int x_start,unsigned int y_start, | ||||
|                         const unsigned char * datas_A,const unsigned char * datas_B, | ||||
|                         const unsigned char * datas_C,const unsigned char * datas_D,const unsigned char * datas_E, | ||||
|                         unsigned char num,unsigned int PART_COLUMN,unsigned int PART_LINE);                     | ||||
| //Fast update display
 | ||||
| void EPD_Init_Fast(void); | ||||
| void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas);    | ||||
| //4 Gray
 | ||||
| void EPD_Init_4G(void); | ||||
| void EPD_WhiteScreen_ALL_4G (const unsigned char *datas);		 | ||||
|  //GUI
 | ||||
|  void EPD_Display(unsigned char *Image);                         | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		
		Reference in a new issue