#include #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=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 ***********************************************************/