首页 > 技术支持 > 应用与案例 > 正文
第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片 作者:BW.SU   发表日期:2024-01-15   来源:菱致电子   浏览:
目录
第六讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part2.外接字库
第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库
第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片
第九讲 单片机驱动彩色液晶屏 控制RA8889软件:认识显存并进行读、写、复制
第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算
第十一讲 单片机驱动彩色液晶屏 控制RA8889软件:播放avi视频
第十二讲 单片机驱动彩色液晶屏 如何打包bin档
第十三讲 单片机驱动彩色液晶屏 bin档的烧录方法

下面我们开始介绍如何显示图片了!一般情况图资建议存放在RA8889 / RA8876扩展的FLASH芯片,容量可依据实际需求来做选择。

显示图片有如下几种方式:


RA8889是支持QPI(Quad Peripheral Interface)通信方式,这可大大加快DMA速度,图片显示速度很快!同时结合JPG硬件解码,图片显示速度又再提高一个数量级,相当强大的功能!

采用DMA方式显示BMP图片

实现方法是MCU将要调用图片的宽高和地址发送给RA8889,尔后交给RA8889从FLASH内部连续获取图片数据,过程不需要MCU干预了,因此显示速度很快,若采用QPI通信则更快了!

显示BMP图片的API代码:

void DMA_24bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W ,unsigned long Addr);
void DMA_32bit(unsigned char Clk ,unsigned short X1,unsigned short Y1,unsigned short X_W,unsigned short Y_H ,unsigned short P_W,unsigned long Addr);


显示JPG图片

JPG图片的显示也很简单,自动选择QPI通信方式,由于JPG数据经过压缩,容量是BMP图片的10%左右,再加上采用QPI获取数据,显示图片速度相比BMP图片会有一个指数级的提高。

也因此RA8889还支持AVI影片的播放,这部份内容在后文再作介绍。

显示JPG图片的API代码:

void JPG_NOR (unsigned long addr,unsigned long JPGsize,unsigned long IDEC_canvas_width,unsigned short x,unsigned short y);


采用MCU直接写入BMP图片

BMP图片还可以从MCU直接写入,直接写入的数据是存在MCU的FLASH中,这种方法速度比较慢,小的图片、图标可行,太大要考虑速度是否可接受了,再者图片大也可能存不进FLASH。

MCU写入图片调用的API函数如下:

void BTE_MCU_Write_MCU_8bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned char *data);
void BTE_MCU_Write_MCU_16bit(unsigned long S1_Addr,unsigned short S1_W,unsigned short XS1,unsigned short YS1,unsigned long Des_Addr,unsigned short Des_W, unsigned short XDes,unsigned short YDes,unsigned int ROP_Code,unsigned short X_W,unsigned short Y_H,const unsigned short *data);


显示PNG图片

PNG图片的显示类似BMP,不一样的是显存要先指定一个Buffer空间,用于处理透明色,处理完之后再复制到指定位置。

显示PNG图片的API代码:

void SPI_NOR_DMA_png (unsigned long dma_page_addr,unsigned long pic_buffer_Layer,unsigned long Show_pic_Layer,unsigned int picture_Width,unsigned int picture_Height);



显示图形光标

图形光标的显示会有点不同,RA8889内建4个32x32点阵可自定义的图形光标,建好的图形光标可类似桌面系统的光标(比如鼠标形状)自由指定坐标,光标是显示在另外一个图层。

图形光标实例演示:

//文字光标演示
 Enable_Text_Cursor_Blinking();
 Blinking_Time_Frames(10);
 Text_Cursor_H_V(15,1);
 Enable_Text_Cursor();
 delay_seconds(1);
 Show_String("d"); delay_ms(300);
 Show_String("i"); delay_ms(300);
 Show_String("r"); delay_ms(300);
 Show_String(" "); delay_ms(1000);
 for(i=0;i<14;i++)
 {
  delay_ms(300);
  Text_Cursor_H_V(15-i,1+i); 
 }
 delay_seconds(3);
 Disable_Text_Cursor();
 
 BTE_Solid_Fill(0,canvas_image_width,0,32+24+4+28+20+28+28+20+28+108+28+24,0x4410,LCD_width,83);
 Foreground_color_65k(White);
 Goto_Text_XY(0,32+24+4+28+20+28+28+20+28+108+28+24);
 Show_String("Demo graphic cursor:");

 CGROM_Select_Internal_CGROM(); //选择内部字库
 Font_Select_12x24_24x24();
 Set_Graphic_Cursor_Color_1(0xff);
 Set_Graphic_Cursor_Color_2(0x00);

 Graphic_cursor_initial();  //内部图形光标
 Graphic_Cursor_XY(0,32+24+4+28+20+28+28+20+28+108+28+28+28);
 Select_Graphic_Cursor_1(); 
 delay_ms(1000);
 Select_Graphic_Cursor_2();
 delay_ms(1000);
 Select_Graphic_Cursor_3();
 delay_ms(1000);
 Select_Graphic_Cursor_4();
 delay_ms(1000);
 Select_Graphic_Cursor_1();
 
 for(j=0;j<6;j++)
 {
  for(i=0;i<800;i++)
  {
   Graphic_Cursor_XY(i,32+24+4+28+20+28+28+20+28+108+28+28+28-j*50); 
   delay_ms(3);  
    }
 }
 Graphic_Cursor_XY(0,32+24+4+28+20+28+28+20+28+108+28+28+28); 
 delay_seconds(3);
 Disable_Graphic_Cursor();

BMP图片格式

补充一些说明,BMP图片即原图无压缩,每一个点是由RGB三个像素构成,如果是24位,则RGB为8:8:8,即3个字节表示一个点。我们画图软件描一张图,仅红绿蓝三个点:

 

用转档软件(ImageTool等软件)取出来点阵数据就可以烧进FLASH使用,我们可以打开查看数据的二进制内容如下图,前三个字节为取出来是0xFF0000,即表示红色;接下来是0x00FF00表示绿色;最后一个是0x0000FF表示蓝色。注意数据是LSB->MSB存放,因此倒过来拼在一起。



如果是16位,则RGB为5:6:5,即2个字节表示一个点。我们再打开查看数据的二进制内容如下图,前两个字节为取出来是0xF800,即表示红色;接下来是0x07E0表示绿色;最后一个是0x001F表示蓝色。



如果是8位,则RGB为3:3:2,即1个字节表示一个点。我们再打开查看数据的二进制内容如下图,第一个字节为取出来是0xE0,即表示红色;接下来是0x1C表示绿色;最后一个是0x03表示蓝色。



BMP图片存入FLASH的格式即如此,RA8889 / RA8876进行DMA调用就是一点一点读取,然后再写入显存。

液晶屏初始化是8位色、16位色或者24位色,那么也只能显示相应位深的图片,实际使用时打包图片数据要注意选择好,使图片数据格式与初始化的格式一致。

关于显存,下一章节再进行介绍。


第八讲 THE END

分享到:

相关热词搜索:RA8889 RA8876 显示图片

上一篇:第七讲 单片机驱动彩色液晶屏 显示文字:Part3.自建字库
下一篇:第九讲 单片机驱动彩色液晶屏 控制RA8889软件:认识显存

>>延伸阅读:0

  • · 如何解决MCU与RA8889等液晶控制芯片的SPI通信问题 [2020-03-04]
  • · RA8889配套上位机使用简介 [2020-09-01]
  • · 介绍一颗51单片机就可以进行视频解码的芯片方案1366x768 [2020-09-07]
  • · RA88xx系列对显存直接读写点的方法 [2020-09-10]
  • · NAND FLASH的调用 [2020-09-14]