当前位置: 首页 > news >正文

瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇

RA6807是RA8876M的缩小版,具备RA8876M的所有功能,只将MCU控制接口进行缩减,仅保留SPI-3和I2C接口,其它功能基本相同。

该芯片最大可控制854x600的分辨率,内建64Mbits显存,多个图层,使用起来相当灵活!

继续讲解软件代码,我们使用SPI-3进行演示。参考代码请使用PC端浏览器访问本贴,在标题下方找到下载链接。

10. 让PNG图片动起来

上篇已经解释了如何显示PNG图片,接下来我们要做一个有趣的效果!让PNG图片动起来!先看实际效果:
在这里插入图片描述

实现代码:

	unsigned short n,x,y,dir_x,dir_y;//显示PNG只能在16位色深方可Select_Main_Window_16bpp();		//[10h]Set main window color depthMemory_16bpp_Mode();			//[5Eh]Set active memory color depthDMA_24bit(CS1,0,0,480*0,800,480,BINARY_INFO[5].img_width,BINARY_INFO[5].start_addr);	//Layer0:主画面DMA_24bit(CS1,0,0,480*1,800,480,BINARY_INFO[5].img_width,BINARY_INFO[5].start_addr);	//Layer1:主画面组合PNG用DMA_24bit(CS1,0,0,480*2,800,480,BINARY_INFO[5].img_width,BINARY_INFO[5].start_addr);	//Layer2:主画面备份用DMA_24bit(CS1,0,0,480*3,400,100,BINARY_INFO[6].img_width,BINARY_INFO[6].start_addr);	//Layer3:读取PNG(ARGB:4444)数据放到该图层x=300;y=300;			dir_x=1;	//PNG移动方向:0:递减,1:递进dir_y=1;	//PNG移动方向:0:递减,1:递进for(n=0;n<400;n++){BTE_Alpha_Blending_Pixel_PNG_16bpp(Layer1,canvas_image_width,x,y,Layer3,canvas_image_width,0,0,Layer1,canvas_image_width,x,y,400,100);	//将PNG数据延展为图片,贴到Layer1上BTE_Memory_Copy(Layer1,canvas_image_width,0,0,0,canvas_image_width,0,0,Layer0,canvas_image_width,0,0,0x0C,800,480);											//将Layer1复制到Layer0,主画面叠加了PNG图片后复制BTE_Memory_Copy(Layer2,canvas_image_width,0,0,0,canvas_image_width,0,0,Layer1,canvas_image_width,0,0,0x0C,800,480);											//将Layer2复制到Layer1,恢复底图//x向递增和递减if(dir_x==1 && x<800-400){x++;if(x==800-400-1)	dir_x=0;}else if(dir_x==0 && x>0){x--;if(x==0)	dir_x=1;}		//y向递增和递减if(dir_y==1 && y<480-100){y++;if(y==480-100-1)	dir_y=0;}else if(dir_y==0 && y>0){y--;if(y==0)	dir_y=1;}}	

上例中,我们将显存规划出来Layer0~3共4个图层,这几个层用宏定义了相应地址了,范例的代码在UserDef.h中:

/* RA6807 图层定义 16位色 */
#define Layer0  384000*2*0		//图层0地址(canvas_image_width*LCD_Height*16/8)
#define Layer1  384000*2*1		//图层1地址
#define Layer2  384000*2*2		//图层2地址
#define Layer3  384000*2*3		//图层3地址
#define Layer4  384000*2*4		//图层4地址

补充一下,显存是用户自由规划的,这里我们规划出来画布的宽度是800,即屏宽,那么每个图层的大小是:
800 x 480 x16bpp / 8bit=384000 x 2

Layer0绝对坐标:(0,480 * 0)
Layer1绝对坐标:(0,480 * 1)
Layer2绝对坐标:(0,480 * 2)
Layer3绝对坐标:(0,480 * 3)

上面的代码,参考下方流程图:
在这里插入图片描述
可能有些细心的R&D会注意到,范例中是将PNG先贴到Layer1,然后再将Layer1复制到Layer0,那为何不直接将PNG贴到Layer0呢?何必多此一举?这里卖个关子,先不细说,等您来探索!

至此,RA6807的参考程序全部介绍完毕!

如您还有兴趣,可访问论坛:https://bbs.lcdvision.com.cn


http://www.mrgr.cn/news/77851.html

相关文章:

  • uniapp接入高德地图
  • 如何在 UniApp 中实现 iOS 版本更新检测
  • 线性回归模型预测房价
  • 订单日记为“惠采科技”提供全方位的进销存管理支持
  • Elasticsearch Windows版的安装及启动
  • Powershell 命令行窗口 设置行宽、折行、行省略
  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • Vue实训---3-element plus的使用与布局
  • 深入解读:2023华为流程体系及落地实施
  • 【Bluedroid】A2DP SINK播放流程源码分析
  • BERT解析
  • 鸿蒙进阶-状态管理之@Prop@Link
  • 【老白学 Java】Warship v2.0(三)
  • 增量预训练(Pretrain)样本拼接篇
  • Gate学习(6) 指令学习3
  • WPF异步UI交互功能的实现方法
  • cangjie (仓颉) vscode环境搭建
  • .NET9 - 新功能体验(二)
  • 使用bcc/memleak定位C/C++应用的内存泄露问题
  • #Verilog HDL# 谈谈代码中如何跨层次引用
  • 下载安装Android Studio
  • #Verilog HDL# Verilog中的ifdef/ifndef/else等用法
  • 每日一练:位运算-消失的两个数字
  • CNN—LeNet:从0开始神经网络学习,实战MNIST和CIFAR10~
  • 第三十四篇 MobileNetV1、V2、V3模型解析
  • 【计算机网络】数据链路层