天啊!我们用了这么就的彩屏清屏函数竟然有BUG(高手...
本帖最后由 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);
}
}
留印,有时间慢慢看。。。。 lans0625 发表于 2013-11-28 20:28
留印,有时间慢慢看。。。。
回复的还真快,小问题,就是个最大坐标的问题。 我早就发现了,只是不懂这竟是个普遍现像。还以为就只是买的那家给的有错。搞不好淘宝上的大多都是你抄抄我,我抄抄你,来来回回都是那一两个人写的。 这是个简单的问题,一般看到都随手改掉错误。淘宝上都那样,他是靠卖板子又不是靠卖程序,送的例子都是互相抄,一般都是参考下,很少敢拿来直接用 LZ is much better;
and do pls pay more attention to "int i, int j" TB很多都是相互抄袭的见怪不怪了 LM1876 发表于 2013-11-28 21:19
我早就发现了,只是不懂这竟是个普遍现像。还以为就只是买的那家给的有错。搞不好淘宝上的大多都是你抄抄我 ...
估计是抄来抄去的。 fzkqi 发表于 2013-11-28 21:31
这是个简单的问题,一般看到都随手改掉错误。淘宝上都那样,他是靠卖板子又不是靠卖程序,送的例子都是互相 ...
确实是小问题。 TonyCai 发表于 2013-11-28 21:36
LZ is much better;
and do pls pay more attention to "int i, int j"
为什么要改成“inti,int j”啊? not_at_all 发表于 2013-11-28 21:57
TB很多都是相互抄袭的见怪不怪了
看来是我见怪了。 相互抄多了 本帖最后由 shanyan 于 2013-11-28 23:41 编辑
不知道楼主买哪家垃圾屏了?我们做TFT液晶屏的全被鄙视了,真是一颗老鼠屎坏一锅粥!!
让楼主看看我家的程序:
另外我严重鄙视那些人云亦云的SB!!!!
喔。 好。 我倒是觉得本来就相互抄袭了,只是当中或许有些是某人故意埋下的陷阱.
真抄袭也得看懂,要不程序在哪死了都不知道,既然是320*240就表示有320*240个点,起点坐标是0,0当然最后是319,239啦 这个不一定的,自己注意下;
有的是做了处理的,//****************************************************************************//
//在LCD上开窗口,SX,SY为开始点;
//x_Length,y_Length 为X,Y方向的长度
void LCD_Set_Windows(UINT16 sx,UINT16 sy,UINT16 x_Length,UINT16 y_Length)
{
//硬件相关,
Set_Windows(sx,sy,sx+x_Length-1,sy+y_Length-1);///这边是跟屏驱动相关的,
} 其实很多程序都是抄来抄去的,只要第一个人写的有Bug,后面的人基本都会跟着错. shanyan 发表于 2013-11-28 23:40
不知道楼主买哪家垃圾屏了?我们做TFT液晶屏的全被鄙视了,真是一颗老鼠屎坏一锅粥!!
让楼主看看我家的程 ...
. 我撑你..... 了解一下 这只是个小问题而已 shanyan 发表于 2013-11-28 23:40
不知道楼主买哪家垃圾屏了?我们做TFT液晶屏的全被鄙视了,真是一颗老鼠屎坏一锅粥!!
让楼主看看我家的程 ...
我没有否定全部的TFT屏的开发者的意思,有冒犯之处还望海涵。 tony_sgt 发表于 2013-11-29 09:40
我倒是觉得本来就相互抄袭了,只是当中或许有些是某人故意埋下的陷阱.
真抄袭也得看懂,要不程序在哪死了都不 ...
应该没人那么龌龊吧。 这么简单的问题在应用中很容易就会发现 这种东西自己改一下就算了。不要太纠结了。
只要初始化代码能用就行了,其他都是小事。 RUANJI 发表于 2013-11-29 19:59
这种东西自己改一下就算了。不要太纠结了。
只要初始化代码能用就行了,其他都是小事。 ...
是的,不用纠结了。 多谢指点迷津 skyformat 发表于 2013-12-1 13:11
多谢指点迷津
客气客气。 为什么会偏移那么多? 那个时钟挺漂亮的 shanyan 发表于 2013-11-28 23:40
不知道楼主买哪家垃圾屏了?我们做TFT液晶屏的全被鄙视了,真是一颗老鼠屎坏一锅粥!!
让楼主看看我家的程 ...
去逛了一下你的淘宝店,没有图例显示
我发现在卖TFT的都要附上高清美女图才行,建议老板也弄一下,销量大增{:lol:} wxty 发表于 2013-12-2 10:53
为什么会偏移那么多?
这个我也不知道。 撒手归路 发表于 2013-12-3 00:59
那个时钟挺漂亮的
时钟没有完善了,我把程序共享下吧,在例程的驱动文件里面接着写的GUI,有点乱,没有分开了。 我也遇到过此类问题,不过当时没怎么在意~ w灰太狼x 发表于 2013-12-4 15:22
时钟没有完善了,我把程序共享下吧,在例程的驱动文件里面接着写的GUI,有点乱,没有分开了。 ...
lz,,,谢了
页:
[1]