ili9341数据手册中的常用命令

news2024/9/24 19:23:16

一.设置液晶显示窗口

        根据液晶屏的要求,在发送显示数据前,需要先设置显示窗口确定后面发送的像素数据的显示区域。下面的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://www.coloradmin.cn/o/1950027.html

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

相关文章

keil调试SH79F7416

仿真器JET51A, 调试设置 选择器件 再次点击调试就一切正常啦

使用moco 完成挡板测试

这里写自定义目录标题 背景使用 moco 工具完成mock挡板功能1. 下载jar包2. 简单启动2.1 准备一个简单的json文件2.2 启动 高级运用同一接口的不同返回字段部分匹配 SONPath参数结构匹配 SON Struct JSON分模块 背景 mock测试&#xff08;挡板测试&#xff09;就是在测试过程中…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求&#xff0c;需要测试几个考试相关的接口。其中有一个获取试题详情的接口&#xff0c;和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数&#xff0c;添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求&#xff0c;这…

保障企业数据主权:安全可控的爬虫工具与管理平台

摘要 在数据驱动的时代&#xff0c;企业对数据的需求日益增长&#xff0c;但如何在保障数据主权的前提下高效采集数据&#xff1f;本文深入探讨了选择安全可控爬虫工具与管理平台的重要性&#xff0c;分析了关键特性&#xff0c;并提出实用建议&#xff0c;助力企业维护数据安…

AWT200-HPLC-M载波通讯模块/智能网关

安科瑞AWT200-HPLC-M载波通讯模块适用于对数据实时性要求不高的系统&#xff0c;数据刷新速度大于1分钟&#xff0c;比如Acrel-5000能耗管理系统 电力线载波通讯模块AWT200-HPLC-M具备载波接收和网关通讯功能&#xff0c;支持三相载波数据采集&#xff0c;协议转换和数据上传平…

【Plotly-驯化】一文教你通过plotly画出动态可视化多变量分析:create_scatterplotmatrix

【Plotly-驯化】一文教你通过plotly画出动态可视化多变量分析&#xff1a;create_scatterplotmatrix 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &am…

windows USB 设备驱动开发- WinUSB 简介

WinUSB 是 Windows 随附的 USB 设备的通用驱动程序。WinUSB 包括&#xff1a; 内核模式驱动程序 (Winusb.sys)&#xff1b;公开 winusb.h 中所述的 WinUSB 函数的用户模式动态链接库 (Winusb.dll)。 借助这些函数&#xff0c;你可以使用用户模式软件管理 USB 设备&#xff1b;…

软件测试产教融合高质量发展论坛举办,开源网安受邀解读国家标准

近年来&#xff0c;在国家政策引导下&#xff0c;横跨教育体系内外的产教融合改革正在进行&#xff0c;推动了教育与产业深度融合、学校与企业协同发展。在软件安全领域&#xff0c;开源网安也一直走在产教融合发展的最前线&#xff0c;与各大高校建立了深度合作&#xff0c;双…

Cuppa CMS v1.0 任意文件读取漏洞(CVE-2022-25578)

前言 春秋云镜靶场是一个专注于网络安全培训和实战演练的平台&#xff0c;旨在通过模拟真实的网络环境和攻击场景&#xff0c;提升用户的网络安全防护能力和实战技能。这个平台主要提供以下功能和特点&#xff1a; 实战演练&#xff1a; 提供各种网络安全攻防演练场景&#…

mysql字符类型字段设置默认值为当前时间

-- 2024-07-22 10:22:20 select (DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)); ALTER TABLE tablename MODIFY COLUNN CREATE_DATE varchar (23) DEFAULT(DATE_FORMAT(CURRENT_TIMESTAMP, %Y-%m-%d %H:%i:%s)) COMMENT "创建日期;

新校区,新视野——广州六中以太彩光打造智慧教育新高地

广州市第六中学总务处 林继青 广州市第六中学是拥有85年办学历史的著名市重点中学,也是广东省首批一级学校和国家级示范性高中。作为广州市首批智慧校园建设示范单位,广州第六中学在从化、花都新建校区的智慧校园建设中“破旧立新”,让先进的以太全光技术与学校新校区建设同频共…

CVE-2024-39700 (CVSS 9.9):JupyterLab 模板中存在严重漏洞

在广泛使用的 JupyterLab 扩展模板中发现了一个严重漏洞&#xff0c;编号为CVE-2024-39700 。此漏洞可能使攻击者能够在受影响的系统上远程执行代码&#xff0c;从而可能导致大范围入侵和数据泄露。 该漏洞源于在扩展创建过程中选择“测试”选项时自动生成“update-integratio…

基于 HTML+ECharts 实现智慧安防数据可视化大屏(含源码)

构建智慧安防数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 随着科技的不断进步&#xff0c;智慧安防系统已经成为保障公共安全的重要工具。通过数据可视化&#xff0c;安防管理人员可以实时监控关键区域的安全状况、人员流动以及设备状态&#xff0c;从而提高应急响…

TikTok批量养号方法

想要在TikTok平台上批量养号&#xff0c;确保账号的健康与活跃度非常重要&#xff0c;不然等于白干。下面&#xff0c;我们就来详细探讨一下TikTok养号的几个关键步骤。 首先&#xff0c;新注册的账号必须严格遵守一机一号一IP的原则。随着TikTok平台在识别IP技术方面的不断进步…

叶再豪老师-降龙精英课程

文章目录 1.思维认知1.1 稻盛和夫成功公式1.2 龙头主升模式1.3 龙头主升-两种路径1.4 股市新手的炒股思路1.5 龙头案例1.6 降龙心法 2.情绪周期2.1 情绪周期2.1 情绪演绎周期2.2 情绪的四个部分2.2.1 指数的情绪周期2.2.3 热点情绪周期2.2.4 热点情绪演绎周期2.2.5 大热点支线2…

CDGA|数据治理:安全如何贯穿数据供给、流通、使用全过程

随着信息技术的飞速发展&#xff0c;数据已经成为企业运营、社会管理和经济发展的核心要素。然而&#xff0c;数据在带来巨大价值的同时&#xff0c;也伴随着诸多安全风险。因此&#xff0c;数据治理的重要性日益凸显&#xff0c;它不仅仅是对数据的简单管理&#xff0c;更是确…

JAVA基础知识4(static、继承)

JAVA基础知识4 static静态成员变量静态成员方法解释注意点 继承父类&#xff08;基类或超类&#xff09;子类&#xff08;派生类&#xff09;使用继承的示例解释运行结果 成员变量的访问特点成员方法的访问特点构造方法的访问特点 Java项目&#xff0c;包和类之间的联系包的概念…

【Linux】玩转操作系统,深入刨析进程状态与调度机制

目录 1. 进程排队2. 进程状态的表述2.1. 进程状态2.2 运行状态2.3. 阻塞状态2.4. 挂起状态 3. Linux下具体的进程状态3.1. 运行状态R3.2. 可中断睡眠状态S3.3. 不可中断睡眠状态D3.4. 停止状态T3.5. 死亡状态X3.6. 僵尸状态Z 4. 孤儿进程5. 优先级6. Linux的调度与切换6.1. 四个…

[代码审计]记一次简单的java代码审计

如果觉得该文章有帮助的&#xff0c;麻烦师傅们可以搜索下微信公众号&#xff1a;良月安全。点个关注&#xff0c;感谢师傅们的支持。 免责声明 本博客所发布的所有内容&#xff0c;包括但不限于信息、工具、项目以及文章&#xff0c;均旨在提供学习与研究之用。所有工具安全…

《代码大全》读书笔记-第Ⅰ部分 奠定基础

0.欢迎来到软件构建世界 什么是软件构件&#xff1a; 对于非正式及项目&#xff0c;会觉得罗列出来的这些活动太过于繁复。但是这些对于正式项目都是很有必要的(大部分人都没经历过&#xff0c;比如说我)。一般一些小公司主要也就是需求分析、编码、开发人员自测、集成测试这几…