#include "Display_EPD_W21_spi.h"
#include "Display_EPD_W21.h"
void Epaper_READBUSY(void)
{
while(1)
{ if(isEPD_W21_BUSY==0) break;;
}
}
void EPD_HW_Init(void)
{
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10);
Epaper_READBUSY();
EPD_W21_WriteCMD(0x12); Epaper_READBUSY();
EPD_W21_WriteCMD(0x01); EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);
EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x21); EPD_W21_WriteDATA(0x40);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x3C); EPD_W21_WriteDATA(0x05);
EPD_W21_WriteCMD(0x11); EPD_W21_WriteDATA(0x01);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(EPD_WIDTH/8-1);
EPD_W21_WriteCMD(0x45); 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); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);
EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
Epaper_READBUSY();
}
void EPD_HW_Init_Fast(void)
{
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10);
EPD_W21_WriteCMD(0x12); Epaper_READBUSY();
EPD_W21_WriteCMD(0x21);
EPD_W21_WriteDATA(0x40);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x3C);
EPD_W21_WriteDATA(0x05);
EPD_W21_WriteCMD(0x1A); EPD_W21_WriteDATA(0x6E);
EPD_W21_WriteCMD(0x22); EPD_W21_WriteDATA(0x91);
EPD_W21_WriteCMD(0x20);
Epaper_READBUSY();
EPD_W21_WriteCMD(0x11); EPD_W21_WriteDATA(0x01);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(EPD_WIDTH/8-1);
EPD_W21_WriteCMD(0x45); 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); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);
EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
Epaper_READBUSY();
}
void EPD_Update(void)
{
EPD_W21_WriteCMD(0x22); EPD_W21_WriteDATA(0xF7);
EPD_W21_WriteCMD(0x20); Epaper_READBUSY();
}
void EPD_Update_Fast(void)
{
EPD_W21_WriteCMD(0x22); EPD_W21_WriteDATA(0xC7);
EPD_W21_WriteCMD(0x20); Epaper_READBUSY();
}
void EPD_Part_Update(void)
{
EPD_W21_WriteCMD(0x22); EPD_W21_WriteDATA(0xFF);
EPD_W21_WriteCMD(0x20); Epaper_READBUSY();
}
void EPD_WhiteScreen_ALL(const unsigned char *datas)
{
unsigned int i;
EPD_W21_WriteCMD(0x24); 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(datas[i]);
}
EPD_Update();
}
void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas)
{
unsigned int i;
EPD_W21_WriteCMD(0x24); 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(datas[i]);
}
EPD_Update_Fast();
}
void EPD_WhiteScreen_White(void)
{
unsigned int i;
EPD_W21_WriteCMD(0x24); 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(0xff);
}
EPD_Update();
}
void EPD_WhiteScreen_Black(void)
{
unsigned int i;
EPD_W21_WriteCMD(0x24); 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();
}
void EPD_SetRAMValue_BaseMap( const unsigned char * datas)
{
unsigned int i;
EPD_W21_WriteCMD(0x24); 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(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;
unsigned int x_end,y_end;
x_start=x_start/8; x_end=x_start+PART_LINE/8-1; y_start=y_start; y_end=y_start+PART_COLUMN-1;
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10); EPD_W21_WriteCMD(0x3C); EPD_W21_WriteDATA(0x80);
EPD_W21_WriteCMD(0x21);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(x_start); EPD_W21_WriteDATA(x_end); EPD_W21_WriteCMD(0x45); EPD_W21_WriteDATA(y_start%256); EPD_W21_WriteDATA(y_start/256); EPD_W21_WriteDATA(y_end%256); EPD_W21_WriteDATA(y_end/256);
EPD_W21_WriteCMD(0x4E); EPD_W21_WriteDATA(x_start); EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA(y_start%256); EPD_W21_WriteDATA(y_start/256);
EPD_W21_WriteCMD(0x24); for(i=0;i<PART_COLUMN*PART_LINE/8;i++)
{
EPD_W21_WriteDATA(datas[i]);
}
EPD_Part_Update();
}
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; delay(10); EPD_W21_RST_1;
delay(10); EPD_W21_WriteCMD(0x3C); EPD_W21_WriteDATA(0x80);
EPD_W21_WriteCMD(0x21);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x24); for(i=0;i<PART_COLUMN*PART_LINE/8;i++)
{
EPD_W21_WriteDATA(datas[i]);
}
EPD_Part_Update();
}
void EPD_DeepSleep(void)
{
EPD_W21_WriteCMD(0x10); EPD_W21_WriteDATA(0x01);
delay(100);
}
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_end=x_start+PART_LINE/8-1;
y_start=y_start-1; y_end=y_start+PART_COLUMN-1;
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10);
EPD_W21_WriteCMD(0x21);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x3C); EPD_W21_WriteDATA(0x80);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(x_start); EPD_W21_WriteDATA(x_end); EPD_W21_WriteCMD(0x45); EPD_W21_WriteDATA(y_start%256); EPD_W21_WriteDATA(y_start/256); EPD_W21_WriteDATA(y_end%256); EPD_W21_WriteDATA(y_end/256);
EPD_W21_WriteCMD(0x4E); EPD_W21_WriteDATA(x_start); EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA(y_start%256); EPD_W21_WriteDATA(y_start/256);
EPD_W21_WriteCMD(0x24); for(i=0;i<PART_COLUMN*PART_LINE/8;i++)
{
EPD_W21_WriteDATA(datas[i]);
}
}
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();
}
void EPD_HW_Init_180(void)
{
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10);
Epaper_READBUSY();
EPD_W21_WriteCMD(0x12); Epaper_READBUSY();
EPD_W21_WriteCMD(0x21); EPD_W21_WriteDATA(0x40);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x3C); EPD_W21_WriteDATA(0x05);
EPD_W21_WriteCMD(0x11); EPD_W21_WriteDATA(0x02);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(EPD_WIDTH/8-1);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x45); 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); EPD_W21_WriteDATA(EPD_WIDTH/8-1);
EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(0x00);
Epaper_READBUSY();
}
void EPD_HW_Init_Fast2(void)
{
EPD_W21_RST_0; delay(10); EPD_W21_RST_1;
delay(10);
EPD_W21_WriteCMD(0x12); Epaper_READBUSY();
EPD_W21_WriteCMD(0x21);
EPD_W21_WriteDATA(0x40);
EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x3C);
EPD_W21_WriteDATA(0x05);
EPD_W21_WriteCMD(0x1A); EPD_W21_WriteDATA(0x5A);
EPD_W21_WriteCMD(0x22); EPD_W21_WriteDATA(0x91);
EPD_W21_WriteCMD(0x20);
Epaper_READBUSY();
EPD_W21_WriteCMD(0x11); EPD_W21_WriteDATA(0x01);
EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteDATA(EPD_WIDTH/8-1);
EPD_W21_WriteCMD(0x45); 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); EPD_W21_WriteDATA(0x00);
EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA((EPD_HEIGHT-1)%256);
EPD_W21_WriteDATA((EPD_HEIGHT-1)/256);
Epaper_READBUSY();
}