第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片

单片机驱动TFT彩色液晶屏系列讲座

目录

第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频
第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架
第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化
第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图
第五讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part1.内部字库
第六讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part2.外接字库
第七讲 单片机驱动彩色液晶屏 控制RA8889软件:显示文字:Part3.自建字库
第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片
第九讲 单片机驱动彩色液晶屏 控制RA8889软件:显存操作
第十讲 单片机驱动彩色液晶屏 控制RA8889软件:图像运算
第十一讲 单片机驱动彩色液晶屏 控制RA8889软件:播放avi视频
第十二讲 单片机驱动彩色液晶屏 如何打包bin档
第十三讲单片机驱动彩色液晶屏 bin档的烧录方法

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

显示图片有如下几种方式:
在这里插入图片描述

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

显示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);
采用DMA方式显示BMP图片

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

显示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);
显示JPG图片

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

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

显示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

了解更多信息:http://www.lcdvision.com.cn

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315803.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【排序篇1】插入排序、希尔排序

目录 一、插入排序二、希尔排序 一、插入排序 思路&#xff1a; 插入排序就像玩扑克牌&#xff0c;抽出一张牌作为比较的元素&#xff0c;与前面的牌依次进行比较&#xff0c;小于继续往前比较&#xff0c;大于等于停下插入到当前位置。 图示&#xff1a; void InsertSort(…

DNS域名解析以及操作流程

dns:将域名转化为IP地址的过程&#xff0c;域名方便人们记忆&#xff0c;ip地址过长&#xff0c;且都是数字&#xff0c;不方便记忆&#xff0c;所以才出现了域名。 怎么实现访问域名等于访问ip地址 1.老方法&#xff1a;写入文件里 /etc/hosts 左边 IP地址 右边域名 格式例…

S1-05二进制信号量和计数器信号量

二进制信号量 二进制信号量&#xff0c;又叫二值信号量&#xff0c;要么是0&#xff0c;要么是1&#xff0c;也是通过Take和Give方式获取和释放&#xff0c;用于控制对共享资源的访问。在每次访问共享资源之前需要获取二进制信号量&#xff0c;若已被获取则任务会被阻塞直到二…

技术专栏——你所不知道的 RocketMQ 的集群管理:副本机制

这些精彩的技术类型的体系化文章&#xff0c;后面我会放到公众号上&#xff0c;并集中在合集“分布式消息中间件专栏”中&#xff0c;欢迎大家去订阅我的公众号和视频号“架构随笔录”&#xff0c;大家可以订阅合集&#xff0c;这样更加方便喔&#xff0c;后面会出电子版本&…

电脑上不安装Oracle,但是虚拟机装了Oracle,怎么连接到虚拟机里的Oracle数据库呢?

1、准备工作 1.1、确定数据库版本信息 注&#xff1a;如果知道数据库的版本信息&#xff0c;这个步骤可以跳过。 比较简单的方法&#xff0c;直接看数据库的安装位置&#xff0c;也就是数字&#xff08;但是这个方法确定就是&#xff0c;不好确定是多少位的数据库&#xff09;…

AI智能分析网关V4烟火检测算法解决方案

一、背景需求 根据国家消防救援局公布的数据显示&#xff0c;2023年共接报处置各类警情213.8万起&#xff0c;督促整改风险隐患397万处。火灾危害巨大&#xff0c;必须引起重视。传统靠人工报警的方法存在人员管理难、场地数量多且分散等问题&#xff0c;无法有效发现险情降低…

微信小程序(二)事件绑定

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 点击事件绑定注册页面设置页面初始化数据事件处理函数的实现更新数据并更新视图 源码&#xff1a; index.wxml <!-- 页面的数据绑定 --> <view>{{msg}}</view> <!-- 绑定点击事件 --> <but…

openssl3.2 - 官方demo学习 - cipher - aesgcm.c

文章目录 openssl3.2 - 官方demo学习 - cipher - aesgcm.c概述笔记END openssl3.2 - 官方demo学习 - cipher - aesgcm.c 概述 AES-256-GCM 在这个实验中验证了EVP_CIPHER_fetch()中算法名称字符串的来源定位. 在工程中配置环境变量PATH, 且合并环境. 这样就不用将openSSL的D…

【Python】编程练习的解密与实战(四)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1fa90;1. 初识Python &a…

Spring Boot - Application Events 的发布顺序_ApplicationStartedEvent

文章目录 Pre概述Code源码分析 Pre Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent 概述 Spring Boot 的广播机制是基于观察者模式实现的&#xff0c;它允许在 Spring 应用程序中发布和监听事件。这种机制的主要目的是为了实现解耦&#…

linux 服务器上安装 ftp(亲测有效)

目录 1 需求2 安装 1 需求 服务器上需要安装ftp 2 安装 1 下载地址 https://developer.aliyun.com/packageSearch?wordvsftpd或者 https://rpmfind.net/linux/rpm2html/search.php?queryvsftpd2 如何判断 服务器是否安装了ftp rpm -qa | grep vsftpd出现提示则表示已安装…

什么是国密算法

国密算法是指由中国国家密码管理局发布的密码算法标准&#xff0c;旨在保障国家信息安全。目前&#xff0c;国家密码管理局已发布了一系列国产商用密码标准算法&#xff0c;包括SM1&#xff08;SCB2&#xff09;、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法&#xff08;ZUC)等…

thinkphp学习09-数据库的数据新增

单数据新增 使用 insert()方法可以向数据表添加一条数据&#xff0c;更多的字段采用默认 public function index() {$data [username > 犬夜叉,password > 123,gender > 男,email > wjl163.com,price > 999,details > 犬夜叉介绍];echo Db::name(user)-&g…

【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*Y=Z套(n=10),套用没有分割行列的A4横版模板

作品展示&#xff1a; 撑满格子的10宫格数独50%难度 50空 背景需求&#xff1a; 大4班有3位男孩做9宫格数独&#xff08;81格子&#xff0c;30%难度 24空&#xff09;非常娴熟&#xff0c;我观察他们基本都在10分钟内完成&#xff0c;其中一位男孩把九宫格题目给我看时表达自…

android 13.0 Launcher3长按app弹窗设置为圆角背景功能实现二

1.前言 在13.0的系统ROM定制化开发中,在进行一些Launcher3的定制化开发中,在使用app的弹窗的功能时,会弹出应用信息和 微件之类的内容,所以在定制需求中,需要默认设置为圆角背景,接下来就来分析下相关功能的实现如图: 2.Launcher3长按app弹窗设置为圆角背景功能实现二的…

【目标检测】评价指标:混淆矩阵概念及其计算方法(yolo源码)

本篇文章首先介绍目标检测任务中的评价指标混淆矩阵的概念&#xff0c;然后介绍其在yolo源码中的实现方法。 目标检测中的评价指标&#xff1a; mAP概念及其计算方法(yolo源码/pycocotools) 混淆矩阵概念及其计算方法(yolo源码) 本文目录 1 概念2 计算方法 1 概念 在分类任务中…

rime中州韵小狼毫 汉语拼音输入方案

在word中&#xff0c;我们可以轻易的给汉字加上拼音&#xff0c;如下&#x1f447;&#xff1a; 但是&#xff0c;如何单独的输入拼音呢&#xff1f;例如输入 pīn yīn, 再如 zhōng guō。今天我们分享一个使用rime中州韵小狼毫须鼠管输入法配置的输入汉语拼音的输入方案。功…

WPS - 表格虚线变成实线解决方案(Office 同上)

1、选中表格区域&#xff0c;在表格中选中需要调整为实线的表格区域 2、点击设置单元格格式&#xff0c;鼠标进行右击并点击设置单元格格式选项 3、选择实线&#xff0c;在单元格格式下的边框&#xff0c;调整到实线 4、设置为实线&#xff0c;即可将表格的虚线设置为实线

(ros2)gazebo颜色设置

在gazebo当中不用再设置颜色了&#xff0c;因为完全可以使用urdf的设置 <robot name"base" xmlns:xacro"http://wiki.ros.org/wiki/xacro"><xacro:property name"PI" value"3.1415926"/><!--定义一个变量PI&#xff0…

研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug

文章目录 前言 背景 问题 排查 解决 总结 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南&#xff08;一&#xff09;——Data Store Memory模块执行时序Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 背景 在一个嵌入式软…