您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> [原创]bf518控制AT070TN83 V.1液晶显示屏显... 
本帖共有1541个阅读者
发表帖子 发表投票 回复主题
[原创]bf518控制AT070TN83 V.1液晶显示屏显示图片
fashionly(论坛新手)
fashionly
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:195
积分:13
注册时间:2011/7/14
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
精华主题 精华帖子
[原创]bf518控制AT070TN83 V.1液晶显示屏显示图片

bf518控制AT070TN83 V.1液晶显示屏显示图片

上面搞定了color bar,接下来搞图片了。呵呵。
找了好多资料都是搞480x272的屏,7寸的资料好少。只能自己搞了。
下面开始吧。

所有初始化和前期的准备工作都和之前的一样,这里就不在重复了。其实显示图片和 color bar的原理是一样的,只不过color bar是自己建立的数组拼接的数据,图片是从外部读进来的数据。可以参考我论坛中的另一篇《bf518控制AT070TN83 V.1的7寸液晶显示屏代码及总结说明》


先定义个数组用于存放数据
section("MEM_SDRAM0_BANK0") unsigned char Inputdata[480*800*3+54];//图片文件读入缓冲

fp = fopen("../1.bmp", "rb");
fread(Inputdata, 1, 480*800*3+54, fp);//bmp图像数据有54个字节的头信息,fread函数读出来为BGR顺序
fclose(fp);
这样,bmp格式的图片数据就被读到Inputdata[]中了。每个像素点为3个字节数据,按BGR888顺序存储。
按照正常的数据处理方法,一般都把读出来的BGR数据转换成RGB格式然后在进行处理,但由于我的电路设计时,已经按照BGR顺序设计了,就跳过了转换这部分。
---------------------------------------------------------
如果有需要转换的,可以参照下面方法进行转换,这是一个480x272的转换例子。
void bgrtorgb24(void)
{
int i,j;
int a,b,c;
for(i=0;i<272;i++)
{
  for(j=0;j<1440;j++)
  {
   TempBuffer_img[i][j] = Inputdata[i*1440+j+54];  
  }
}

for(i=0;i<272;i++)
{
  for(j=0;j<480;j++)
  {
      a = TempBuffer_img[i][j*3];
      b = TempBuffer_img[i][j*3+1];
      c = TempBuffer_img[i][j*3+2];
      TempBuffer_img[i][j*3] = c;
      TempBuffer_img[i][j*3+1] = b;
      TempBuffer_img[i][j*3+2] = a;
  }
}
}
---------------------------------------------------------------------------------
为了方便处理,先把数据按照我需要的格式传递到二维数据中
section("MEM_SDRAM0_BANK0") unsigned char DisplayBuffer_BGR888[480][800*3];

for(i=0;i<480;i++)//缓冲数据读取到BGR888[]中
{
  for(j=0;j<800*3;j++)
  {
   DisplayBuffer_BGR888[i][j] = Inputdata[i*2400+j+54];  
  }
}

上传的图片
  20117251011667.bmp [ 720.05 KB 640×384 ] (缩略时请点击查看原图)

 

接下来需要做的就是将BGR888转成BGR565.
for(i=0;i<480;i++)//转换为BGR565写入DisplayBuffer
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer_tmp[i][j] = DisplayBuffer_BGR888[i][j*3] & 0xF8;//B
   DisplayBuffer_tmp[i][j] |= (DisplayBuffer_BGR888[i][j*3+1] >> 5) & 0x07;//GH
   DisplayBuffer_tmp[i][j] = (DisplayBuffer_tmp[i][j] << 8) + ((DisplayBuffer_BGR888[i][j*3+1] << 3)& 0xe0);//GL
   DisplayBuffer_tmp[i][j] |= (DisplayBuffer_BGR888[i][j*3+2] >> 3) & 0xF8;//R
  }
}

上传的图片
  20117251015367.bmp [ 750.06 KB 800×480 ] (缩略时请点击查看原图)

 


转换完成后的图像在液晶上显示出来是上下翻转的,还需要进行一次处理。
for(i=0;i<480;i++)
{
  for(j=0;j<800;j++)
  {
   DisplayBuffer[i+22][j] = DisplayBuffer_tmp[479-i][j];//图像上下翻转
  }
}

这样,就得到了BGR565格式的数据,将DisplayBuffer[][]直接发送到液晶上显示出来就可以了。
有了之前做color bar的经验,做这一步可以说是比较简单的了。


chris ma 于2011年7月25日

QQ:5797378


上传的图片
  20117251033767.jpg [ 558.65 KB 2048×1536 ] (缩略时请点击查看原图)

 




这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/25 10:04:43
chengkang(论坛新手)
chengkang
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:120
积分:4
注册时间:2011/7/1
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
受益匪浅...感谢楼主分享

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/25 10:30:32
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

顶一下


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2011/7/25 12:44:01
ppsca(论坛新手)
ppsca
头衔:社区公民
帮派:无帮无派
帖数:43
金钱:305
积分:41
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

支持!


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/7/26 19:53:36
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
顶一下。

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/5/30 17:28:25
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154537 Call, 1 Queries, Processed in 0.015625 second(s),