http://blog.csdn.net/zhandoushi1982/article/details/7104584
我们在做一些产品时,比如液晶显示器的NO SIGNAL待机画面、液晶电视的无电视信号画面等,都需要给出用户一个提示画面在屏幕上随机的动态的显示,这个做法列出如下。注意:以下的显示是固定从左上角开始向右向下移动,移到边框后就反弹回去。如果是随机的显示LOGO画面,用一个rand函数提供位置种子就可以了。
void DispProtec()
{
int startX = 0,startY = 0; //左上角座标(0,0)
int BMPWidth = 24,BMPHight = 16; //屏保图片大小
int LCDWidth = 1024,intLCDHight = 768; //屏幕边框
int Xstep = 4,Ystep = 4; //跳动步长
int XDirect = 1,YDirect = 1; //假设运动方向为右方和方下方为正,左方和上方为负。
for() //循环,除非退出屏保。
{
BMPDiplay(startX,startY); //刷屏
SleepMs(3000); //每3秒刷一次
if(XDirect == 1) //屏保向右移动
{
if((startX + BMPWidth )>LCDWidth) //如果图片已移到最右边
{
XDirect = -1; //图片开始向左
}
else
{
startX += Xstep; //图片向右加步长
}
}
if(XDirect == -1) //屏保向左移动
{
if(startX< 0) //如果图片已移到最左边
{
XDirect = 1; //图片开始向右
}
else
{
startX -= Xstep; //图片向左减步长
}
}
if(YDirect == 1) //屏保向下移动
{
if((startY + BMPHight )>intLCDHight) //如果图片已移到最下边
{
YDirect = -1; //图片开始向上
}
else
{
startY += Ystep; //图片向下加步长
}
}
if(YDire ct == -1) //屏保向上移动
{
if(startY< 0) //如果图片已移到最上边
{
XDirect = 1; //图片开始向下
}
else
{
startY -= Ystep; //图片向上减步长
}
}
}
}
===================================================================================================================
在做手机关机时充电画面的动态显示时,发现一个问题。画面替换时有时会花屏,有时会卡住,另一个较为不解的问题是:按电源键唤醒屏幕后,显示的第一个画面没有对应当前电池度量,而是之前熄屏时显示画面的下一个画面,推测是图像RAM有残留导致。
为什么会有这个问题?应该是跟屏供电有关系,在以前的印象中,刷屏的次序是:刷图像RAM-》屏供电-》背光供电;但是对于有些接口的屏,如果不给屏供电,刷图像RAM是不成功的,这会导致很多意外的刷屏现象,比如花屏。这也可以解释上面那个不解的问题:由于缓冲原因,刷图像时的RAM中保存有LCD当前显示的下一幅画面,背光灭掉后此RAM还是存在的,在下次按电源键唤醒屏幕时,由于屏还没有供电所以第一次刷图像是不成功,亮背光后显示的是之前RAM保存的那副,也就是第一幅被RAM保存的那副覆盖掉了。
所以只要调换上电顺序,做到屏供电-》刷图像RAM-》背光供电,或者屏供电-》背光供电-》刷图像RAM,即可解决上述问题。