显示上一帧和下一帧图片之间会有全白到全黑刷新两三次,用的是指导书里的例程,是程序的问题还是硬件本身就是如此呢
灰小子:
电子墨水屏本身会闪,就像亚马逊的kindle也有闪屏现象。
但你说的刷新两三次,是比较严重的情况,觉得应该能够进一步优化。
手里没有这个硬件,不能给出更具体的分析验证了。。。
Dywu:
回复 灰小子:
屏幕分辨率250*122 用的spi接口 下面是例程里的代码 新手表示看不太懂。。 运行到for循环结束下面几行时开始闪然后图片出来 不知道为啥 有哪里可以优化下吗
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//xx 图片显示函数 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvoid DIS_IMG(unsigned char num){ unsigned int row, col; unsigned int pcnt;
SPI4W_WRITECOM(0x4E); SPI4W_WRITEDATA(0x00); // set RAM x address count to 0; SPI4W_WRITECOM(0x4F); SPI4W_WRITEDATA(0xF9); // set RAM y address count to 250-1; 2D13 DELAY_S(5); SPI4W_WRITECOM(0x24); DELAY_S(5); pcnt = 0; // 复位或保存提示字节序号 for(col=0; col<250; col++) // 总共250 GATE列 // send 128x250bits ram 2D13 { for(row=0; row<16; row++) // 总共128 SOURCE行,每个像素1bit,即 128/8=16 字节 { switch (num) { case 1: SPI4W_WRITEDATA(DisBuffer[pcnt]); break; case 2: SPI4W_WRITEDATA(gImage_logo[pcnt]); break; case 3: SPI4W_WRITEDATA(gImage_Orientation[pcnt]); break; case PIC_WHITE: SPI4W_WRITEDATA(0xff); break; default: break; } pcnt++; } } SPI4W_WRITECOM(0x22); SPI4W_WRITEDATA(0xC7); // (Enable Clock Signal, Enable CP) (Display update,Disable CP,Disable Clock Signal) // SPI4W_WRITEDATA(0xF7); // (Enable Clock Signal, Enable CP, Load Temperature value, Load LUT) (Display update,Disable CP,Disable Clock Signal) SPI4W_WRITECOM(0x20); DELAY_mS(1); READBUSY(); DELAY_S(DELAY_TIME);}
void SPI4W_WRITECOM(unsigned char INIT_COM){ unsigned char TEMPCOM; unsigned char scnt; TEMPCOM=INIT_COM; nCS_H; nCS_L; SCLK_L; nDC_L; for(scnt=0;scnt<8;scnt++) { if(TEMPCOM&0x80) SDA_H; else SDA_L; DELAY_100nS(10); SCLK_H; DELAY_100nS(10); SCLK_L; TEMPCOM=TEMPCOM<<1; DELAY_100nS(10); } nCS_H;}
void SPI4W_WRITEDATA(unsigned char INIT_DATA){ unsigned char TEMPCOM; unsigned char scnt; TEMPCOM=INIT_DATA; nCS_H; nCS_L; SCLK_L; nDC_H; for(scnt=0;scnt<8;scnt++) { if(TEMPCOM&0x80) SDA_H; else SDA_L; DELAY_100nS(10); SCLK_H; DELAY_100nS(10); SCLK_L; TEMPCOM=TEMPCOM<<1; DELAY_100nS(10); } nCS_H;}
灰小子:
回复 Dywu:
看程序,使用的是全局刷新的方法。
建议尝试局部刷新试试,应该能改善闪屏的问题。但要注意,局部刷新容易产生残影。
Dywu:
回复 灰小子:
谢谢大手的建议 有个问题是这样的话局部帧与帧之间是不是还是会一闪一闪的呀 这个闪闪的能通过修改程序语句改善吗
灰小子:
回复 Dywu:
因为墨水屏的原理,闪是肯定要闪的。
但可以降低闪的次数,每次刷新不要闪的太多太严重