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

news2024/9/27 23:27:11

单片机驱动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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卡尔曼滤波:理论与代码

卡尔曼滤波&#xff1a;理论与代码 引言 卡尔曼滤波是一种用于估计系统状态的优化技术&#xff0c;特别适用于含有噪声的测量数据和系统动态变化的情况。本文将简单探讨卡尔曼滤波的理论基础、数学公式的推导&#xff0c;并通过Python代码示例演示其在实际应用中的效果。 一…

20_GC垃圾回收机制

文章目录 GC如何确定垃圾如何回收垃圾回收垃圾的时机 GC 如何确定垃圾 引用计数算法 给对象添加一个引用计数器&#xff0c;每当一个地方引用它时&#xff0c;计数器加1&#xff0c;每当引用失效时&#xff0c;计数器减少1&#xff0c;当计数器的数值为0时&#xff0c;也就是对…

python,序列的切片

序列的切片就是指从一个序列中取出子序列 语法&#xff1a; 序列[起始下标&#xff1a;结束下标&#xff1a;步长] 步长为1表示一个一个的取元素&#xff0c;步长为2表示每次跳过一个元素的取元素&#xff0c;步长为负数表示反向切片&#xff0c;取元素时取到结束下标&#…

Python如何免费调用微软Bing翻译API

一、引言 现在免费的机器翻译越来越少了&#xff0c;随着有道翻译开始收费&#xff0c;百度降低用户的免费机器翻译额度(目前只有实名认证过的高级用户才能获得100万字符的免费翻译额度)&#xff0c;而亚马逊、腾讯等机器翻译调用相对比较麻烦&#xff0c;需要下载各种插件包&…

智能小程序能做什么?

一. 自定义Tab页 涂鸦提供了丰富的场景化、个性化的 ToC 智能服务&#xff0c;不仅可以快速低成本的自由搭建出更多智能服务&#xff0c;还为你提供了基于小程序技术方案的可自主可控的自定义开发链路&#xff0c;为拓展更多品牌化、个性化、差异化智能服务提供生态基础。 我…

Unity之角色控制器

PS:公司终于给我派任务了&#xff0c;最近几天都没学Unity&#x1f927;。 一、角色控制器的实现方式 目前小编知道的角色控制器实现方式有三种&#xff1a; 应用商店的角色控制系统Unity自己的角色控制器通过物理系统去做角色控制器 本篇介绍的是第二种Unity自己的角色控制…

【期末不挂科-C++考前速过系列P1】大二C++第1次过程考核(3道简述题&7道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C复习系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

vi/vim 编辑器 --基本命令

1 vi/vim编辑器介绍 vi 是visual interface 的简称&#xff0c;是Linux中最经典的文本编辑器 vim是vi的加强版。兼容了vi的所有指令&#xff0c;不仅能编辑文本&#xff0c;而且具有shell程序编辑的功能&#xff0c;可以通过不同颜色的字体辨别语法的正确性&#xff0c;极大…

js中try...catch捕捉错误

文章目录 一、前言二、场景2.1、setTimeout2.2、Promise 三、最后 一、前言 说到try...catch都觉得非常熟悉了&#xff0c;不就是用来捕捉代码块中的错误嘛&#xff0c;平时也用得比较多的 二、场景 try...catch只能捕捉到同步执行代码块中的错误 2.1、setTimeout try {setT…

淘宝商家实现批量上货API接口调用接入说明(淘宝开放平台免申请接入)

API接入详细步骤&#xff1a; 第一步&#xff1a;在淘宝开放平台中选择接口塡写应用申报递交给我司&#xff0c;确认接口是否都有。 第二步&#xff1a;确认接口都有&#xff0c;需交1000元进行测试&#xff0c;可以测试三天&#xff0c;测试数据符合淘宝开放平台接口参数说明&…

Java常用的加密技术

项目结构&#xff1a; 总体代码&#xff1a; package VirtualUtils; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.security.*; import java.security.sp…

WebServer 跑通/运行/测试(详解版)

&#x1f442; 椿 - 沈以诚 - 单曲 - 网易云音乐 目录 &#x1f382;前言 &#x1f33c;跑通 &#xff08;1&#xff09;系统环境 &#xff08;2&#xff09;克隆源码 &#xff08;3&#xff09;安装和配置 Mysql &#xff08;4&#xff09;写 sql 语句 &#xff08;5&…

文件操作(一)

目录 一.什么是文件 1.程序文件和数据文件 2.文件名 3&#xff0c;文本文件和二进制文件 二.文件的打开和关闭 1.流和标准流 2.文件指针 3.文件的打开与关闭 三.结尾 一.什么是文件 在我们学习文件操作之前我们先了解一下什么是文件&#xff1f;以及文件为什么使用文件…

【Effective Objective - C】—— 熟悉Objective-C

【Effective Objective - C】—— 熟悉Objective-C 熟悉Objective-C1.oc的起源消息和函数的区别运行期组件和内存管理要点&#xff1a; 2.在类的头文件中尽量少引入其他头文件向前声明要点&#xff1a; 3.多使用字面量语法&#xff0c;少用与之等价的方法字符串字面量字面数值字…

小程序基础学习(导航栏组件)

一&#xff0c;创建组件 二&#xff0c;组件传入参数 三&#xff0c;组件接收参数 四&#xff0c;组件渲染参数 五&#xff0c;组件代码 <!--components/daoHangLan/daoHangLan.wxml--> <view class"titles"><block wx:for"{{titles}}"…

第 3 章 Keepalived 双机热备

技能展示&#xff1a; 会构建双机热备系统 会构建 LVSHA 高可用群集 在这个高度信息化的 IT 时代&#xff0c;企业的生产系统、业务运营、销售和支持&#xff0c;以及日常管理等环节越来越依赖于计算机信息和服务&#xff0c;对高可用&#xff08;HA&#xff09;技术的应用需求…

Python3.5如何打包编译

python3.5怎么打包编译 问题&#xff1a;用Python开发的小工具有时需要编译打包为Windows(*.exe)、Mac等操作系统下的可执行性文件以供非程序员使用。 解决方案&#xff1a; 一、py2exe 目前只支持到Python3.4&#xff0c;暂不支持Python3.5 二、PyInstaller 安装&#x…

C#人力资源管理系统源码

C#人力资源管理系统源码 源码描述&#xff1a; 该系统利用asp.net中mvc,linq搭建开发&#xff0c; 分权限管理 权限级别分为&#xff1a;管理员&#xff0c;经理&#xff0c;专员&#xff0c;员工等 管理员可以管理角色、菜单 经理可以管理 组织规划&#xff0c;员工管理&#…

微信商家转账到零钱,既能单笔又能批量,支持多商户管理

大家好&#xff0c;我是小悟 微信商家转账到零钱的功能大家应该都熟悉吧&#xff0c;为了满足商家向用户微信零钱转账的需求&#xff0c;微信支付推出【商家转账到零钱】服务&#xff0c;方便商户可以一次向单个或多个用户的微信零钱转账。 商家转账到零钱为商户提供了简便、…

【Qt 学习之路】关于C++ Vlc视频播放

文章目录 1、简介2、效果2.1、视频2.2、动态图 3、核心代码3.1、判断视频3.2、视频核心类调用3.3、视频核心类3.3.1、头文件3.3.2、源文件 1、简介 最近有童鞋咨询VLC相关的问题&#xff0c;公布一个 5年前 编写的 VLC示例 代码供参考学习。包括正常对视频各种常用的操作&…