|
本帖最后由 w灰太狼x 于 2013-11-28 20:28 编辑
天啊!我们用了这么就的彩屏清屏函数竟然有BUG
你买彩屏店家会给你一些彩屏资料,其中包括程序,但是我发现这些店家的技术员所写彩屏的清屏函数几乎都有一个问题(我验证了好几家都有这个问题),而这个问题又不容易发现。这几天室友发现了,然后我们研究了下,发现了问题所在,在这里和大家分享一下。问题虽小,但是也是问题啊。
先上几张图片
这个是个钟表的程序
这个是清全屏后的效果
这个屏幕并没有全部成情成红色。
彩屏有240*320的有320*480的等等,这240、320等是指像素点有这么多个,但是彩屏程序中规定坐标点是从(0,0)开始的,也就是说最大坐标为(239,319),并不是(240,320)(这里以240*320的屏为例)。
下面是这些店家给的的清屏函数
/*------------------------------------------------
清屏函数
------------------------------------------------*/
void ClearScreen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,320,0,480); //这里的坐标依次为x1,x2,y1,y2
for (i=0;i<480;i++)
{
for (j=0;j<320;j++)
Write_Data_U16(bColor);
}
}
//================================================================================================
// 实现功能: TFT清屏
// 输入参数: bColor 清屏所使用的背景色
//================================================================================================
void CLR_Screen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
Write_Data_U16(bColor);
}
}
/*----------------------------------------------------------------
清屏函数
输入参数:bColor 清屏所使用的背景色
----------------------------------------------------------------*/
void CLR_Screen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
Write_Data_U16(bColor);
}
}
这些程序都有这个共同的错误,用这个错误的程序在程序开头清屏是可以清全屏的,在一些画线、画点、写字符、刷图片的程序之后也是可以用的,但是在画圆等函数之后调用就不能全部清屏了。这才是最蛋疼的。所以在这里和大家分享一下。
这是修改正确的清屏效果
下面是正确的清屏函数
void ClearScreen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,319,0,479); //只需要把这个坐标改下就ok了
for (i=0;i<480;i++)
{
for (j=0;j<320;j++)
Write_Data_U16(bColor);
}
}
void CLR_Screen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,239,0,319);//320x240
for (i=0;i<320;i++)
{
for (j=0;j<240;j++)
Write_Data_U16(bColor);
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|