OpenEdv-开源电子网

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

请问TFT填充函数

[复制链接]

25

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-1
在线时间
42 小时
发表于 2016-2-26 09:45:46 | 显示全部楼层 |阅读模式
1金钱
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*width+j];//写入数据
        }                  
}  
此函数中最后一个参数color是个什么变量?调用时应该赋予何值?

最佳答案

查看完整内容[请看2#楼]

color是颜色表,是由height*width个u16类型的数值组成,每个数值对应一个颜色,按RGB565排列, 你先用上位机软件对图像取模生成相应格式的数组,然后把这个数组的指针传入LCD_Color_Fill函数的参数, 屏幕上就按次序逐个点填充像素,就看到图片了 你若只是想单色填充,LCD的驱动文件提供了别的函数
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-2-26 09:45:47 | 显示全部楼层
color是颜色表,是由height*width个u16类型的数值组成,每个数值对应一个颜色,按RGB565排列,
你先用上位机软件对图像取模生成相应格式的数组,然后把这个数组的指针传入LCD_Color_Fill函数的参数,
屏幕上就按次序逐个点填充像素,就看到图片了


你若只是想单色填充,LCD的驱动文件提供了别的函数
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

25

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-1
在线时间
42 小时
 楼主| 发表于 2016-2-26 10:10:50 | 显示全部楼层
xkwy 发表于 2016-2-26 10:05
color是颜色表,是由height*width个u16类型的数值组成,每个数值对应一个颜色,按RGB565排列,
你先用上位 ...

如果只是简单的想在屏幕上某个位置做一个单一颜色的矩形,不能用这个函数吗?
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-2-26 10:20:24 | 显示全部楼层
可以,你要先准备一个颜色表,这个很浪费ROM的。。

用下面这个代码:
[mw_shl_code=c,true]
void LCD_Color_Fill2(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;//写入数据
        }                  
}  [/mw_shl_code]
优点:
1、不需准备颜色表,color里直接填入颜色值即可(如0x07E0则是绿色填充)
2、速度快一些,不需要查表等操作。
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

25

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-1
在线时间
42 小时
 楼主| 发表于 2016-2-26 11:40:33 | 显示全部楼层
xkwy 发表于 2016-2-26 10:20
可以,你要先准备一个颜色表,这个很浪费ROM的。。

用下面这个代码:

这个函数和原来的相比只是一个color参数变了是么?
回复

使用道具 举报

30

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1001
金钱
1001
注册时间
2015-8-24
在线时间
241 小时
发表于 2016-2-26 12:08:15 | 显示全部楼层
原子哥的讲解不是一清二楚吗?直接写颜色值就好。或者你写WHITE,BLUE这些就行了。
回复

使用道具 举报

25

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2016-1-1
在线时间
42 小时
 楼主| 发表于 2016-2-26 13:09:50 | 显示全部楼层
沉默焚烧 发表于 2016-2-26 12:08
原子哥的讲解不是一清二楚吗?直接写颜色值就好。或者你写WHITE,BLUE这些就行了。

懂了,谢谢你
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 04:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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