ili9341数据手册中的常用命令

一.设置液晶显示窗口

        根据液晶屏的要求,在发送显示数据前,需要先设置显示窗口确定后面发送的像素数据的显示区域。下面的0x2A和0x2B分别对应的是y轴与x轴的命令。


/********** ILI934 命令 ********************************/
#define   CMD_SetCoordinateX   0x2A
// 设置 X 坐标
#define   CMD_SetCoordinateY   0x2B
// 设置 Y 坐标
/** * @brief ILI9341 显示器上开辟一个窗口
* @param usX :在特定扫描方向下窗口的起点 X 坐标
* @param usY :在特定扫描方向下窗口的起点 Y 坐标
* @param usWidth :窗口的宽度
* @param usHeight :窗口的高度
* @retval
*/ void ILI9341_OpenWindow ( uint16_t usX, uint16_t usY, uint16_t usWidth, uint16_t usHeight )
{
        ILI9341_Write_Cmd ( CMD_SetCoordinateX ); /* 设置 X 坐标 */
        ILI9341_Write_Data ( usX >> 8 ); /* 先高 8 位,然后低 8 */
        ILI9341_Write_Data ( usX & 0xff ); /* 设置起始点和结束点 */
        ILI9341_Write_Data ( ( usX + usWidth - 1 ) >> 8 );
        ILI9341_Write_Data ( ( usX + usWidth - 1 ) & 0xff );
        ILI9341_Write_Cmd ( CMD_SetCoordinateY ); /* 设置 Y 坐标 */
        ILI9341_Write_Data ( usY >> 8 );
        ILI9341_Write_Data ( usY & 0xff );
        ILI9341_Write_Data ( ( usY + usHeight - 1 ) >> 8 );
        ILI9341_Write_Data ( ( usY + usHeight - 1 ) & 0xff );
}
        代码中定义的 ILI9341_OpenWindow 函数实现了图 设置显示窗口的 X 坐标 及图 设置液晶显示窗口的 Y 坐标 0x2A 0x2B 命令,它们分别用于设置显示窗口的起始及结束的 X 坐标和 Y 坐标,每个命令后包含 4 8 位的参数,这些参数组合后成起始坐标和结束坐标各 1 个用 16 位表示的值。ILI9341_OpenWindow 把它的四个函数输入参数 X Y 起始坐标,宽度、高度转化成命令参数的格式,写入到液晶屏中,从而设置出一个显示窗口。

二.发送像素数据

        调用上面的 ILI9341_OpenWindow 函数设置显示窗口后,再向液晶屏发送像素数据时,这些数据就会直接显示在它设定的窗口位置中。

#define   CMD_SetPixel   0x2C   // 填充像素
/**
* @brief ILI9341 显示器上以某一颜色填充像素点
* @param ulAmout_Point :要填充颜色的像素点的总数目
* @param usColor :颜色
* @retval
*/
static __inline void ILI9341_FillColor ( uint32_t ulAmout_Point, uint16_t usColor )
{
        uint32_t i = 0 ;
        /* memory write */
        ILI9341_Write_Cmd ( CMD_SetPixel );
        for ( i = 0 ; i < ulAmout_Point; i ++ )
        ILI9341_Write_Data ( usColor );
}
发送像素数据的命令非常简单,首先发送命令代码 0x2C,然后后面紧跟着要传输的像素数据即
可。按照本液晶屏的配置,像素点的格式为 RGB565 ,所以像素数据就是要显示的 RGB565 格式
的颜色值。 本 ILI9341_FillColor 函数包含两个输入参数,分别用于设置要发送的像素数据个数 ulAmout_Point 及像素点的颜色值 usColor ,在代码实现中它调用 ILI9341_Write_Cmd 发送一次命令代码,接着使用 for 循环调用 ILI9341_Write_Data 写入 ulAmout_Po int 个同样的颜色值。这些颜色值会按顺序填充到前面使用 ILI9341_OpenWindow 函数设置的显示窗口中,例如,若设置了一个usX=10 usY=30 usWidth=50 usHeight=20 的窗口,然后再连续填充 50*20 个颜色值为 0XFFFF 的像素数据,即可在 (10,30) 的起始坐标处显示一个宽 50 像素高 20 像素的白色矩形。

三.设置液晶的扫描方向

控制液晶屏时,还有一个非常重要的参数,就是设置液晶屏的扫描方向.

#define   ILI9341_LESS_PIXEL 240 // 液晶屏较短方向的像素宽度
#define ILI9341_MORE_PIXEL 320 // 液晶屏较长方向的像素宽度
// 根据液晶扫描方向而变化的 XY 像素宽度
// 调用 ILI9341_GramScan 函数设置方向时会自动更改
uint16_t LCD_X_LENGTH = ILI9341_LESS_PIXEL;
uint16_t LCD_Y_LENGTH = ILI9341_MORE_PIXEL;
// 液晶屏扫描模式,本变量主要用于方便选择触摸屏的计算参数
// 参数可选值为 0-7
// 调用 ILI9341_GramScan 函数设置方向时会自动更改
//LCD 刚初始化完成时会使用本默认值
uint8_t LCD_SCAN_MODE = 6 ;
/**
* @brief 设置 ILI9341 GRAM 的扫描方向
* @param ucOption :选择 GRAM 的扫描方向
* @arg 0-7 : 参数可选值为 0-7 这八个方向
*
* !!!其中 0 3 5 6 模式适合从左至右显示文字,
* 不推荐使用其它模式显示文字 其它模式显示文字会有镜像效果
*
* 其中 0 2 4 6 模式的 X 方向像素为 240 Y 方向像素为 320
* 其中 1 3 5 7 模式下 X 方向像素为 320 Y 方向像素为 240
*
* 其中 6 模式为大部分液晶例程的默认显示方向
* 其中 3 模式为摄像头例程使用的方向
* 其中 0 模式为 BMP 图片显示例程使用的方向
*
* @retval
* @note 坐标图例:A 表示向上, V 表示向下, < 表示向左, > 表示向右
                                X 表示 X 轴,Y 表示 Y
*******************************************************/
void ILI9341_GramScan ( uint8_t ucOption )
{
        //参数检查,只可输入 0-7
        if (ucOption > 7 )
        return ;
        //根据模式更新 LCD_SCAN_MODE 的值,主要用于触摸屏选择计算参数
        LCD_SCAN_MODE = ucOption;
        //根据模式更新 XY 方向的像素宽度
        if (ucOption % 2 == 0 ) {
        //0 2 4 6 模式下 X 方向像素宽度为 240 Y 方向为 320
        LCD_X_LENGTH = ILI9341_LESS_PIXEL;
        LCD_Y_LENGTH = ILI9341_MORE_PIXEL;
        } else {
        //1 3 5 7 模式下 X 方向像素宽度为 320 Y 方向为 240
        LCD_X_LENGTH = ILI9341_MORE_PIXEL;
        LCD_Y_LENGTH = ILI9341_LESS_PIXEL;
        }
        //0x36 命令参数的高 3 位可用于设置 GRAM 扫描方向
        ILI9341_Write_Cmd ( 0x36 );
        ILI9341_Write_Data ( 0x08 | (ucOption << 5 )); // 根据 ucOption 的值设置 LCD 参 数,共 0-7 种模式
        ILI9341_Write_Cmd ( CMD_SetCoordinateX );
        ILI9341_Write_Data ( 0x00 );
        /* x 起始坐标高 8 */
        ILI9341_Write_Data ( 0x00 );
        /* x 起始坐标低 8 */
        ILI9341_Write_Data ( ((LCD_X_LENGTH -1 ) >> 8 ) & 0xFF ); /* x 结束坐标高 8 */
        ILI9341_Write_Data ( (LCD_X_LENGTH -1 ) & 0xFF );
        /* x 结束坐标低 8 */
        ILI9341_Write_Cmd ( CMD_SetCoordinateY );
        ILI9341_Write_Data ( 0x00 );
        /* y 起始坐标高 8 */
        ILI9341_Write_Data ( 0x00 );
        /* y 起始坐标低 8 */
        ILI9341_Write_Data ( ((LCD_Y_LENGTH -1 ) >> 8 ) & 0xFF ); /*y 结束坐标高 8 */
        ILI9341_Write_Data ( (LCD_Y_LENGTH -1 ) & 0xFF );
        /*y 结束坐标低 8 */
        /* write gram start */
        ILI9341_Write_Cmd ( CMD_SetPixel );
 }

液晶屏的 8 种扫描模式
当设置了液晶显示窗口,再连续向液晶屏写入像素点时,它会一个点一个点地往液晶屏的 X
向填充,填充完一行 X 方向的像素点后,向 Y 方向下移一行, X 坐标回到起始位置,再往 X
向一个点一个点地填充,如此循环直至填充完整个显示窗口。
而屏幕的坐标原点和 XY 方向都可以根据实际需要使用 0X36 命令来配置的。0X36 命令参数中的 MY MX MV 这三个数据位用于配置扫描方向,因此一共有 2^ 3 = 8 种模式。
ILI9341_GramScan 函数就是根据输入的模式设置这三个数据位,并且根据相应的模式更改 XY
向的分辨率 LCD_X_LENGTH LCD_Y_LENGTH ,使得其它函数可以利用这两个全局变量获屏
幕实际的 XY 方向分辨率信息;同时,函数内还设置了全局变量 LCD_SCAN_MODE 的值用于记
录当前的屏幕扫描模式,这在后面计算触摸屏坐标的时候会使用到。设置完扫描方向后,代码中
还调用设置液晶显示窗口的命令 CMD_SetCoordinateX/Y 0X2A/0X2B 命令)默认打开一个与屏
幕大小一致的显示窗口,方便后续的显示操作。
其中模式 6 最符合我们的阅读习惯,扫描方向与文字方向一致,都是从左到右,从上到下,所以
本开发板中的大部分液晶程序都是默认使用模式 6
其实模式 0 3 5 6 的液晶扫描方向都与文字方向一致,比较适合显示文字,只要适当旋转屏
幕即可,使得用屏幕四个边沿作为正面看去都有适合的文字显示模式。而其它模式由于扫描方向
与文字方向不一致,要想实现同样的效果非常麻烦,也没有实现的必要。

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

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

相关文章

【深度学习】LLaMA-Factory 大模型微调工具, 大模型GLM-4-9B Chat ,微调与部署 (2)

文章目录 数据准备chat评估模型导出模型部署总结 资料&#xff1a; https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md https://www.53ai.com/news/qianyanjishu/2015.html 代码拉取&#xff1a; git clone https://github.com/hiyouga/LLaMA-Factory.git cd …

Qt SQLite数据库编程学习总结

到此为止&#xff0c;就使用Qt进行SQLite数据库的操作&#xff0c;做一次总结 1. Qt中数据库操作的相关概念和类 Qt 数据库编程相关基本概念https://blog.csdn.net/castlooo/article/details/140497177 2.表的只读查询--QSqlQueryModel QSqlQueryModel单表查询的使用总结htt…

AI驱动的在线面试系统:技术革新与初步面试的新体验

一、引言 在数字化和智能化的时代背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正日益渗透到各行各业&#xff0c;为人们的生活和工作带来前所未有的变革。其中&#xff0c;AI驱动的在线面试系统&#xff0c;凭借其高效、便捷、公正等特性&#xff0c;逐渐成为企业…

示例:WPF中如何处理TabControl页面绑定ItemsSource切换TabItem时UI数据没有持久保存的问题

一、目的&#xff1a;在WPF开发过程中&#xff0c;经常用到TabControl&#xff0c;也会遇到类似问题&#xff0c;用TabControl绑定数据源ItemsSource时&#xff0c;切换TabItem时&#xff0c;UI上的数据没有持久保存&#xff0c;本文介绍一种处理方式&#xff0c;可以做到缓存页…

Elasticsearch概念及ELK安装

1、Elasticsearch是什么 它是elastic技术栈中的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索 Logstash/Beats&#xff1a;用于数据收集 Kibana&#xff1a;用于数据可视化 整套技术栈被称为ELK&#xff0c;经常用来做日志收集…

海康4G摄像头接入自定义程序

1.使用【萤石云视频】APP添加摄像头&#xff0c;在设置中关闭视频加密 2.打开萤石云&#xff0c;进入控制台 3.设备管理中可以看到添加的设备 4.添加一个应用&#xff0c;即可获取AppKey、Secret、AccessToken 5.根据文档中的说明获取播放地址&#xff0c;这里是我生成的播放…

单证不一致清关难题 | 国际贸易综合服务平台 | 箱讯科技

什么是单证一致&#xff1f; 单证一致出口方所提供的所有单据要严格符合进口方开证银行所开信用证的要求&#xff0c;或者说出口方制作和提供的所有与本项货物买卖有关的单据&#xff0c;与进口方申请开立的信用证对单据的要求完全吻合&#xff0c;没有矛盾。 添加图片注释&am…

本地搭建rtmp拉流

本地搭建rtmp拉流 可按照步骤来 关注公众号&#xff1a;城羽海 更多有趣实用教程 下载地址: 从微信公众号发送关键词 rtmp可获取下载地址 文章目录 本地搭建rtmp拉流 可按照步骤来 关注公众号&#xff1a;城羽海 更多有趣实用教程 拿到之后如图所下&#xff1f;二、配置obs文…

构建查询洞察 UI

本文字数&#xff1a;2631&#xff1b;估计阅读时间&#xff1a;7 分钟 作者&#xff1a;Bucky Schwarz 本文在公众号【ClickHouseInc】首发 我们最近发布了 Query Insights 的初步实现&#xff0c;为 ClickHouse Cloud 用户提供了一种便捷的方法来查看和解释查询日志。该功能对…

Python --NumPy库基础方法(1)

NumPy Numpy(Numerical Python) 是科学计算基础库&#xff0c;提供大量科学计算相关功能&#xff0c;比如数据统计&#xff0c;随机数生成等。其提供最核心类型为多维数组类型&#xff08;ndarray&#xff09;&#xff0c;支持大量的维度数组与矩阵运算&#xff0c;Numpy支持向…

mysql语法介绍

MySQL 语法主要基于 SQL&#xff08;Structured Query Language&#xff09;标准&#xff0c;用于管理和操作关系型数据库。以下是一些基本的 MySQL 语句&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE database_name; 1.选择数据库&#xff1a; USE database_name;…

科研绘图系列:R语言组合堆积图(stacked barplot with multiple groups)

介绍 通常堆积图的X轴表示样本,样本可能会存在较多的分组信息,通过组合堆积图和样本标签分组信息,我们可以得到一张能展示更多信息的可发表图形。 加载R包 knitr::opts_chunk$set(warning = F, message = F) library(tidyverse) library(cowplot) library(patchwork)导入…

springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step

springcloud RocketMQ &#xff0c;一个mq消息发送后&#xff0c;客户端是怎么一步步拿到消息去消费的&#xff1f;我们要从代码层面探究这个问题。 找的流程图&#xff0c;有待考究。 以下我们开始debug&#xff1a; 拉取数据的线程&#xff1a; PullMessageService.java 本…

云盘高速视觉检测机,如何提高螺丝件的检测效率?

螺纹螺丝钉是一种常见的螺纹结构紧固件&#xff0c;通常由金属制成&#xff0c;具有螺旋状的螺纹结构。这种螺丝钉旨在通过旋入螺纹孔或材料中&#xff0c;实现可靠的固定连接。 螺纹螺丝钉具有螺旋状的螺纹结构&#xff0c;使其能够轻松旋入金属或其他硬质材料。主要用于金属…

UDP的报文结构及其注意事项

1. 概述 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的数据传输服务&#xff0c;不保证数据的可靠传输。在网络通信中&#xff0c;UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用&#xff0c…

NLP基础知识2【各种大模型的注意力】

注意力 传统Attention存在的问题优化方向变体有哪些现在的主要变体集中在KVMulti-Query AttentionGrouped-query AttentionFlashAttention 传统Attention存在的问题 上下文约束速度慢&#xff0c;显存占用大&#xff08;因为注意力考虑整体信息&#xff0c;所以每一个位置都要…

【大模型】基于LoRA微调Gemma大模型(1)

文章目录 一、LoRA工作原理1.1 基本原理1.2 实现步骤 二、LoRA 实现2.1 PEFT库&#xff1a;高效参数微调LoraConfig类&#xff1a;配置参数 2.2 TRL库SFTTrainer 类 三、代码实现3.1 核心代码3.2 完整代码 参考资料 大模型微调技术有很多&#xff0c;如P-Tuning、LoRA 等&#…

狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient 上面的公式是Policy Gradient的更新函数&#xff0c;这个式子是指在 s t s_t st​时刻采取了 a t a_t at​&#xff0c;计算出对应发生的概率 p θ p_\theta pθ​&#xff0c;然后计算在采取了这个 a t a_t at​之后&#xff0c;所得到的reward有多大。…

table car vs. table cars:数据库命名用单数还是复数?

数据库的命名方式已经形成了许多共识&#xff0c;比如全部小写、下划线分隔、使用标准缩写等&#xff1b;其中就包括「使用单数名词」。 用户 jonr 在 reddit 网的程序员笑话&#xff08;ProgrammerHumor&#xff09;社区发了一篇帖子&#xff0c;调侃这些数据库命名方式的共识…

Hive3:基本介绍

一、概述 Apache Hive是一款分布式SQL计算的工具&#xff0c; 其主要功能是&#xff1a; 将SQL语句翻译成MapReduce程序运行 二、基本逻辑简介 主要由两大模块组成&#xff1a;元数据管理&#xff0c;SQL解析器 1、元数据管理 即&#xff1a;数据位置信息、数据结构信息、…