#include "Display_EPD_W21_spi.h" #include "Display_EPD_W21.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; } } void lcd_chkstatus(void) { while(1) { //=0 BUSY if(isEPD_W21_BUSY==1) break; } } void EPD_DeepSleep_UC(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); } //Deep sleep function void EPD_DeepSleep(void) { EPD_W21_WriteCMD(0x10); //Enter deep sleep EPD_W21_WriteDATA(0x01); delay_xms(100); } void EPD_DeepSleep_BWRY(void) { EPD_W21_WriteCMD(0X02); //power off EPD_W21_WriteDATA(0x00); lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal EPD_W21_WriteCMD(0X07); //deep sleep EPD_W21_WriteDATA(0xA5); } //Full screen update initialization void EPD_Init750_BW(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(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(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); } void EPD_Init750_BWR(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(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(100); lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal EPD_W21_WriteCMD(0X00); //PANNEL SETTING EPD_W21_WriteDATA(0x0F); //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(0x11); EPD_W21_WriteDATA(0x07); EPD_W21_WriteCMD(0X60); //TCON SETTING EPD_W21_WriteDATA(0x22); } void EPD_Init750_BWRY(void) { #define EPD_WIDTH 800 #define EPD_HEIGHT 480 delay(100);//At least 20ms delay EPD_W21_RST_0; // Module reset delay(10);//At least 10ms delay EPD_W21_RST_1; delay(10);//At least 10ms delay lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal EPD_W21_WriteCMD(0x00); //0x00 EPD_W21_WriteDATA(0x0F); EPD_W21_WriteDATA(0x29); EPD_W21_WriteCMD(0x06); //0x06 EPD_W21_WriteDATA(0x0F); EPD_W21_WriteDATA(0x8B); EPD_W21_WriteDATA(0x93); EPD_W21_WriteDATA(0xa1); EPD_W21_WriteCMD(0x41); //0x41 EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0x50); //0x50 EPD_W21_WriteDATA(0x37); EPD_W21_WriteCMD(0x60); //0x60 EPD_W21_WriteDATA(0x02); EPD_W21_WriteDATA(0x02); EPD_W21_WriteCMD(0x61);//0x61 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(0x62); EPD_W21_WriteDATA(0x98); EPD_W21_WriteDATA(0x98); EPD_W21_WriteDATA(0x98); EPD_W21_WriteDATA(0x75); EPD_W21_WriteDATA(0xCA); EPD_W21_WriteDATA(0xB2); EPD_W21_WriteDATA(0x98); EPD_W21_WriteDATA(0x7E); EPD_W21_WriteCMD(0x65); //0x65 EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0xE7); //0xE7 EPD_W21_WriteDATA(0x1C); EPD_W21_WriteCMD(0xE3); //0xE3 EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0xE9); EPD_W21_WriteDATA(0x01); EPD_W21_WriteCMD(0x30);// frame go with waveform EPD_W21_WriteDATA(0x08); EPD_W21_WriteCMD(0x04); //Power on lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal } /*****************13.3寸********************************/ //SSD1677 void EPD_HW_Init1330_BW(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(); //waiting for the electronic paper IC to release the idle signal EPD_W21_WriteCMD(0x0C); // Soft start setting EPD_W21_WriteDATA(0xAE); EPD_W21_WriteDATA(0xC7); EPD_W21_WriteDATA(0xC3); EPD_W21_WriteDATA(0xC0); EPD_W21_WriteDATA(0x80); EPD_W21_WriteCMD(0x01); // Set MUX as 527 EPD_W21_WriteDATA(0xA7); EPD_W21_WriteDATA(0x02); EPD_W21_WriteDATA(0x00);//Cancel mirror operation EPD_W21_WriteCMD(0x11); // Data entry mode EPD_W21_WriteDATA(0x01); EPD_W21_WriteCMD(0x44); EPD_W21_WriteDATA(0x00); // RAM x address start at 0 EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0xBF); // RAM x address end at 36Fh -> 879 EPD_W21_WriteDATA(0x03); EPD_W21_WriteCMD(0x45); EPD_W21_WriteDATA(0xA7); // RAM y address start at 20Fh; EPD_W21_WriteDATA(0x02); EPD_W21_WriteDATA(0x00); // RAM y address end at 00h; EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0x3C); // VBD EPD_W21_WriteDATA(0x01); // LUT1, for white EPD_W21_WriteCMD(0x18); EPD_W21_WriteDATA(0X80); EPD_W21_WriteCMD(0x4E); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0x4F); EPD_W21_WriteDATA(0xA7); EPD_W21_WriteDATA(0x02); } void EPD_Init1330_BWRY(void) { #define EPD_WIDTH 960 #define EPD_HEIGHT 680 delay(100);//At least 20ms delay EPD_W21_RST_0; // Module reset delay(10);//At least 10ms delay EPD_W21_RST_1; delay(10);//At least 10ms delay lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal EPD_W21_WriteCMD(0x00); //0x00 EPD_W21_WriteDATA(0x2F); EPD_W21_WriteDATA(0x29); EPD_W21_WriteCMD(0x01); //0x01 EPD_W21_WriteDATA(0x07); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x19); //RED 6.2 EPD_W21_WriteDATA(0x78); //WHITE 6.0 ***************************************** EPD_W21_WriteDATA(0x28); EPD_W21_WriteDATA(0x19); //RED EPD_W21_WriteCMD(0x03); //0x03 EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0x06); //0x06 EPD_W21_WriteDATA(0x0F); EPD_W21_WriteDATA(0x98); EPD_W21_WriteDATA(0xA5); EPD_W21_WriteDATA(0xC3); EPD_W21_WriteCMD(0x30);// frame go with waveform EPD_W21_WriteDATA(0x08); EPD_W21_WriteCMD(0x41); //0x41 EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0x50); //0x50 EPD_W21_WriteDATA(0x37); EPD_W21_WriteCMD(0x60); //0x60 EPD_W21_WriteDATA(0x04); EPD_W21_WriteDATA(0x02); EPD_W21_WriteCMD(0x61);//0x61 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(0x65); //0x65 EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0xE7); //0xE7 EPD_W21_WriteDATA(0x16); EPD_W21_WriteCMD(0xE3); //0xE3 EPD_W21_WriteDATA(0x65); EPD_W21_WriteCMD(0xE0); EPD_W21_WriteDATA(0x00); EPD_W21_WriteCMD(0xE9); EPD_W21_WriteDATA(0x01); EPD_W21_WriteCMD(0x62); EPD_W21_WriteDATA(0x7D); EPD_W21_WriteDATA(0x7D); EPD_W21_WriteDATA(0x7D); EPD_W21_WriteDATA(0x60); EPD_W21_WriteDATA(0xA7); EPD_W21_WriteDATA(0x93); EPD_W21_WriteDATA(0x7D); EPD_W21_WriteDATA(0x68); EPD_W21_WriteCMD(0x04); //Power on lcd_chkstatus(); //waiting for the electronic paper IC to release the idle signal } ////////////////////////////////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(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(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); } //Full screen refresh display function void EPD_WhiteScreen_GUI(const unsigned char* datasBW) { unsigned int i; EPD_W21_WriteCMD(0x10); //write old data for(i=0;i