OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 18537|回复: 35

求教:有关lcd的问题LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)怎么运用?

[复制链接]

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2013-6-13 17:14:57 | 显示全部楼层 |阅读模式
 void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color)

u16 height,width;
u16 i,j;
width=ex-sx+1; //得到填充的宽度
height=ey-sy+1;//高度
 for(i=0;i<height;i++)
{
 LCD_SetCursor(sx,sy+i);   //设置光标位置
LCD_WriteRAM_Prepare();     //开始写入GRAM
for(j=0;j<width;j++)LCD->LCD_RAM=color[i*height+j];//写入数据
}  

该函数的形参“u16 *color”怎么运用?请举个例子!谢谢!
手艺人要内外兼修。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-5-27
在线时间
5 小时
发表于 2013-6-13 17:35:52 | 显示全部楼层
原子的历程里已经把颜色在lcd.h文件中都宏定义好了,你可以直接写颜色的名称
//画笔颜色
#define WHITE           0xFFFF
#define BLACK           0x0000   
#define BLUE           0x001F  
#define BRED             0XF81F
#define GRED   0XFFE0
#define GBLUE  0X07FF
#define RED             0xF800
#define MAGENTA         0xF81F
#define GREEN           0x07E0
#define CYAN            0x7FFF
#define YELLOW          0xFFE0
#define BROWN   0XBC40 //棕色
#define BRRED   0XFC07 //棕红色
#define GRAY    0X8430 //灰色
//GUI颜色

#define DARKBLUE        0X01CF //深蓝色
#define LIGHTBLUE        0X7D7C //浅蓝色  
#define GRAYBLUE         0X5458 //灰蓝色
//以上三色为PANEL的颜色 
 
#define LIGHTGREEN       0X841F //浅绿色
//#define LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
#define LGRAY   0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)
回复 支持 0 反对 9

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2014-8-25
在线时间
0 小时
发表于 2014-10-19 11:33:38 | 显示全部楼层
你把下面这行代码改写下:
for(j=0;j<width;j++)LCD->LCD_RAM=color[i*height+j];//写入数据 
改写为:
for(j=0;j<width;j++)LCD->LCD_RAM=color;//写入数据  

然后
函数定义和声明中 把u16 * color 改为 u16 color.

例子:
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);

满屏背景红色;
LCD_Color_Fill(0,0,240,320,RED);

你可以试试
我就是一片天--天哥
回复 支持 3 反对 0

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-2-8
在线时间
10 小时
发表于 2017-3-1 10:59:32 | 显示全部楼层
本帖最后由 lichome 于 2017-3-1 11:14 编辑

用一句话描述这个函数:用数组中的各个颜色值 来显示指定区域中各个点的颜色

可以用在显示 自定义字符 的场合,把要显示的字符的各个像素点 用 指定的颜色 填入 数组 color中。
*color的各个值分别代表 字符各个点的颜色。
当然,用在显示图片时就更方便了
读取图片中各个点的颜色,保存在数组*color中,然后将这个数组填充到指定区域。
是否正确,请朋友验证后回复一下,防止误导别人。


回复 支持 2 反对 0

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-10-7
在线时间
2 小时
发表于 2017-9-11 20:23:07 | 显示全部楼层
给你们说啊,27楼是对的,有人需要验证吗,反正我验证了一下,定义一个颜色数组u16 color【4】,然后就可以显示啦,虽然说是显示的很乱,但是就是27楼说的那样
9%(4RYPE&lt;]2(7H$OA3QVW.png
回复 支持 1 反对 1

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2612
金钱
2612
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-13 17:56:53 | 显示全部楼层
楼上的,人家这个参数是一个指针。
楼主,指针指向的颜色,不难理解。
一直努力就很好。
回复 支持 反对

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-6-8
在线时间
0 小时
发表于 2013-6-13 19:52:07 | 显示全部楼层
楼上酷毕
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2013-6-13 20:35:33 | 显示全部楼层
回复【2楼】冯丑丑爱睡觉:
---------------------------------
你用过了吗?这样写 LCD_Color_Fill(5,150,235,315,RED);行吗?
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2013-6-13 20:36:08 | 显示全部楼层
回复【3楼】qq942266575:
---------------------------------
你用过了吗?这样写 LCD_Color_Fill(5,150,235,315,RED);行吗?
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2013-6-13 20:42:15 | 显示全部楼层
回复【3楼】qq942266575:
---------------------------------
我知道是16位指针类型数据,可是就不知道怎么写,你能举个加入形参的具体例子吗?例如, LCD_Color_Fill(5,150,235,315,RED);行吗?
事实上,这样写编译错误
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2013-6-13 20:49:33 | 显示全部楼层
回复【5楼】wangyan915205:
---------------------------------
我知道是16位指针类型数据,可是就不知道怎么写,你能举个加入形参的具体例子吗?例如, LCD_Color_Fill(5,150,235,315,RED);行吗? 
事实上,这样写编译错误
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

7

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-5-27
在线时间
5 小时
发表于 2013-6-13 20:58:14 | 显示全部楼层
回复【6楼】wangyan915205:
---------------------------------
不好意思,看错了,漏掉指针了
回复 支持 反对

使用道具 举报

3

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2013-4-8
在线时间
9 小时
发表于 2013-6-15 11:17:20 | 显示全部楼层
同问,感觉那个指针变量应该指向一个数组的,可是又找到这样的数组,这个数这倒是什么样的呢,有什么特点呢?!求解?
回首不再遥远
回复 支持 反对

使用道具 举报

10

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
670
金钱
670
注册时间
2014-4-12
在线时间
194 小时
发表于 2014-4-12 21:02:41 | 显示全部楼层
回复【5楼】wangyan915205:
---------------------------------
同样的问题哈,求达人支教
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2014-4-13 00:57:13 | 显示全部楼层
随便写一个数据试试如,12345;或者用“&RED”试试;试过之后结果如何,请告诉我,谢谢!
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-4-21
在线时间
0 小时
发表于 2014-4-28 22:11:12 | 显示全部楼层
11楼的,我试了,不行诶,同求答案。。
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2014-5-2 22:48:16 | 显示全部楼层
数据类型对不对,直接写"0"试试
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2014-10-22 17:21:58 | 显示全部楼层
现在看来,就不是事。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

42

主题

208

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2014-6-12
在线时间
35 小时
发表于 2014-10-25 10:25:26 | 显示全部楼层
回复【16楼】wangyan915205:
---------------------------------
楼主怎么破的?
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
 楼主| 发表于 2014-10-25 19:26:40 | 显示全部楼层
用原子老师的USMART串口助手多试试就知道了。再说,u16 *color是什么意思就不用说了吧。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
发表于 2014-10-25 22:53:47 | 显示全部楼层
回复【18楼】wangyan915205:
---------------------------------
楼主详细的解释一下吧~~
同样比较疑问
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
发表于 2014-10-25 23:29:59 | 显示全部楼层
回复【15楼】一片天:
---------------------------------
我试过了,你的这种方式可行
不修改原函数,定义一个u16数组也是可以实现区域颜色填充功能的
回复 支持 反对

使用道具 举报

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2012-2-16
在线时间
11 小时
发表于 2014-10-25 23:33:44 | 显示全部楼层
定义变量
u16 test_color[441];
u16 *p_test_color = test_color;
变量赋值
for(test = 0;test < 441;test++)
   {test_color[test] = RED;}
函数调用
LCD_Color_Fill(5,15,25,35,test_color);

注意441的来由:填充区域21 * 21
Enjoy it!!!!!
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-22 14:51:57 | 显示全部楼层
谢谢楼主分享,我也在找这个问题,楼主辛苦了。
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-22 14:52:53 | 显示全部楼层
回复【3楼】qq942266575:
---------------------------------
该函数的形参“u16 *color”怎么运用?请举个例子!谢谢!===例子
回复 支持 反对

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2015-1-22 14:55:44 | 显示全部楼层
回复【15楼】一片天:
---------------------------------
你说的,下面的这个函数就实现了,也是在开发板上的函数
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{          
u16 i,j;
u16 xlen=0;
u16 temp;
if((lcddev.id==0X6804)&&(lcddev.dir==1)) //6804?á?????±?ò???????í  
{
temp=sx;
sx=sy;
sy=lcddev.width-ex-1;   
ex=ey;
ey=lcddev.width-temp-1;
  lcddev.dir=0;  
  lcddev.setxcmd=0X2A;
lcddev.setycmd=0X2B;    
LCD_Fill(sx,sy,ex,ey,color);  
  lcddev.dir=1;  
   lcddev.setxcmd=0X2B;
lcddev.setycmd=0X2A;    
  }else
{
xlen=ex-sx+1;  
for(i=sy;i<=ey;i++)
{
  LCD_SetCursor(sx,i);       //?è????±ê???? 
LCD_WriteRAM_Prepare();      //????????GRAM   
for(j=0;j<xlen;j++)LCD_WR_DATA(color); //?è????±ê????      
}
}  
}>
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2015-9-2
在线时间
0 小时
发表于 2015-9-9 11:01:36 | 显示全部楼层
color的参数上: 
一个是数值 void LCD_Fill();
一个是内存 void LCD_Color_Fill();呗
回复 支持 反对

使用道具 举报

8

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2017-1-24
在线时间
27 小时
发表于 2017-2-21 12:42:58 | 显示全部楼层
楼主,你这个问题解决了吗?  求告知。现在仍然不知道那个参数写什么
回复 支持 反对

使用道具 举报

4

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
201
金钱
201
注册时间
2017-4-5
在线时间
24 小时
发表于 2017-4-8 21:02:43 | 显示全部楼层
我也不太会啊
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-6-9
在线时间
7 小时
发表于 2017-6-9 22:53:43 | 显示全部楼层
27楼你说的应该是对的,但是我怎么把颜色改来改去显示的还是黑色的,有木有人验证一下,应该是用来显示图片填充数组的
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2017-6-9
在线时间
7 小时
发表于 2017-6-9 22:56:29 | 显示全部楼层
有木有人用过这个函数的,不验证一下心里老不爽了
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10561
金钱
10561
注册时间
2017-2-18
在线时间
1912 小时
发表于 2018-8-7 18:07:39 | 显示全部楼层
附上用法

LCD_Color_Fill()的调用(最后一个形参是指针).rar

2.38 MB, 下载次数: 696

回复 支持 反对

使用道具 举报

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
发表于 2018-8-11 09:26:01 | 显示全部楼层
tuzihog 发表于 2014-10-25 23:33
定义变量
u16&nbsp;test_color[441];
u16&nbsp;*p_test_color&nbsp;=&nbsp;test_color;

请教一下,按你这个写的话,填充后出现底边黑带!还有改成(5,15,35,45),test_color[961],
test<961的时候居然黑屏了???为什么
回复 支持 反对

使用道具 举报

5

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
132
金钱
132
注册时间
2018-1-14
在线时间
26 小时
发表于 2018-8-11 09:40:15 | 显示全部楼层
冯爽朗 发表于 2017-9-11 20:23
给你们说啊,27楼是对的,有人需要验证吗,反正我验证了一下,定义一个颜色数组u16 color【4】,然后就可以 ...

都是黑色
回复 支持 反对

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2019-7-15 20:33:20 | 显示全部楼层
一片天 发表于 2014-10-19 11:33
你把下面这行代码改写下:
for(j=0;j&lt;width;j++)LCD-&gt;LCD_RAM=color;//写入数据&nbsp;
改写为:

好用好用666
qq1950361006,互帮互助,共同进步。
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2021-12-9
在线时间
6 小时
发表于 2022-4-7 22:08:49 | 显示全部楼层

下载到板子上,没反应呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 14:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表