探索S5U13781R01C100 Shield图形库:从安装到应用
在电子设计领域,图形显示功能的实现一直是一个重要的环节。今天,我们将深入探讨Seiko Epson的S5U13781R01C100 Shield图形库,它能极大地简化图形和文本显示到连接在S5U13781R01C100 Shield上的面板的过程。
文件下载:S5U13781R01C100.pdf
一、引言
S5U13781R01C100 Shield图形库是专门为Arduino Due微控制器板设计的软件库。Arduino Due是一款广受欢迎的开发板,而这个图形库为其增添了强大的图形显示能力。该库可以让我们轻松地在连接的LCD面板上显示图形和文本。同时,S5U13781R01C100 Shield TFT板还可用于评估低成本的S1D13L01 LCD控制器,它与S1D13781有相似的功能集,但也存在一些差异。
S1D13781与S1D13L01的对比
特性差异
S1D13L01
S1D13781
显示接口
仅支持有源TFT显示器
支持无源STN和有源TFT显示器
BitBLT支持
软件BitBLT
硬件BitBLT引擎(移动BitBLT、实心填充BitBLT)
温度范围
-40至85°C
-40至85°C或 -40至105°C
封装
QFP15 128引脚
QFP15 100引脚
二、系统要求
在安装S5U13781R01C100 Shield图形库之前,我们需要准备好以下硬件和软件:
硬件 :S5U13781R01C100 Shield TFT板、Arduino Due控制器板、LCD面板(默认配置为480x272 @ 24bpp)、Micro USB电缆(为Arduino Due供电并可用于串口调试)。
软件 :Arduino Sketch IDE软件v1.6.2或更高版本、S5U13781R01C100图形库包。
需要注意的是,Arduino Sketch IDE软件需要在Windows、Mac OS X或Linux平台上运行。
三、安装步骤
硬件安装
连接S5U13781R01C100 Shield到Arduino Due
将S5U13781R01C100 Shield的J1 Header连接到Arduino Due的“Power” Socket。
将S5U13781R01C100 Shield的J2 Header连接到Arduino Due的SPI Socket。
将S5U13781R01C100 Shield的J3 Header连接到Arduino Due的“Digital” (PWML) Socket。
正确对齐两块板,然后轻轻按压,直到引脚完全插入对应的插座。
连接LCD面板
打开S5U13781R01C100 Shield板上的FPC连接器CN1,方法是轻轻拉动深色标签向板边缘。
将平板电缆滑入连接器CN1。
推动深色标签回到原位关闭连接器。
连接Arduino Due到开发平台
使用Micro USB电缆将开发平台与Arduino Due的编程端口连接,这样既可以为Arduino Due供电,也可以使用串口监视器进行调试。
软件安装
安装Arduino Sketch IDE
访问Arduino网站,下载与操作系统兼容的Sketch版本。安装完成后,就可以进行下一步。
安装Arduino SAM板(包括Due)
在Sketch菜单中点击“Tools->Board->Boards Manager...”,确认“Arduino SAM Boards (32 - bits ARM Cortex - M3)”板包是否安装。如果未安装,安装与Sketch IDE版本匹配的包。
安装S5U13781R01C100图形库和示例草图
将S5U13781R01C100 Shield图形库的.zip存档解压到开发平台的临时位置。
在Sketch菜单中点击“Sketch->Include Library->Add .ZIP Library...”,选择解压后的“S1d13781.zip”文件进行安装。
确认库是否安装成功,可以点击“Sketch->Include Library”,查看列表底部是否有“S1d13781”条目。
使用Sketch IDE编译示例草图并上传到Arduino Due
设置Sketch IDE的Board和Port设置。点击“Tools->Board->Arduino Due (Programming Port)”设置Board,点击“Tools->Port->Arduino Due (Programming Port)”设置Port。
打开“781_gltest”示例草图,点击“File->Open…”,选择解压后的示例草图文件夹中的“781_gltest.ino”文件。
点击“Verify”按钮检查代码错误,点击“Upload”按钮将应用程序上传到Arduino Due。
四、使用图形库
修改现有草图
图形库提供了多个示例草图,例如“781_gltest.ino”展示了图形库的一些图形功能,“781_RegisterAccessExample”展示了如何直接读写S1D13781寄存器,“781_MemoryAccessExample”展示了如何直接读写S1D13781内存。要修改草图,只需在Sketch的loop()函数中添加调用图形库函数的新行。例如,要在LCD面板上显示一条从位置(20,20)到位置(100,100)的绿色线,可以添加以下代码:
result = lcdc.drawLine( S1d13781_gfx::window_Main,20,20,100,100,0x0000FF00 );
sleep(2000);
创建新草图
创建新草图时,需要在基本模板中添加以下元素:
#include < SPI.h >
#include < S1d13781_gfx.h >
#include < S1d13781_registers.h >
//create an instance of S1d13781 for us to work with
S1d13781_gfx lcdc;
void setup() {
//start serial for serial monitor
Serial.begin(9600);
//start the S1d13781 library
lcdc.begin();
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
使用串口监视器
当Arduino Due通过编程端口连接时,可以使用串口监视器。可以通过Sketch工具栏上的“Serial Monitor”按钮或Sketch菜单中的“Tools->Serial Monitor”启动。串口监视器可以显示Arduino Due上运行的应用程序的信息和消息,对于调试修改后的应用程序代码或创建新应用程序非常有帮助。
使用字体
S5U13781R01C100 Shield图形库支持使用可编程字体进行文本绘制。字体依赖于两个组件:一个以.pbm图形文件(二进制)存储的1 bpp图像文件和一个以.pfi文件(二进制)存储的便携式字体索引。图形库包提供了一些示例字体,包括.pbm图像文件和.pfi索引文件。要在草图应用程序中使用字体,可以将二进制.pbm和二进制.pfi文件转换为简单的字节数组,然后在需要时将其传递给S1d13781_gfx::createFont()方法。例如:
extern byte ascii9x13IndexData[]; //test font index data
extern byte ascii9x13ImageData[]; //test font image data
testfont = lcdc.createFont(ascii9x13ImageData, 1453, ascii9x13IndexData, 498);
五、理解图形库
库结构
图形库由以下文件组成:
S1d13781.h :S1d13781类的头文件,包含图形库硬件相关功能的概述和配置SPI接口的常量。
S1d13781.cpp :S1d13781类的源文件,包含访问S1D13781 LCD控制器硬件级功能的方法。
S1d13781_gfx.h :S1d13781_gfx类的头文件,提供图形和文本方法的概述。
S1d13781_gfx.cpp :S1d13781_gfx类的源文件,包含图形和文本显示方法。
S1d13781_init.h :包含用于初始化S1D13781硬件寄存器的值的结构。
S1d13781_registers.h :包含S1D13781硬件寄存器的#define定义,建议在访问寄存器时使用这些定义以避免意外访问未定义的寄存器。
keywords.txt :Arduino Sketch IDE库支持所需的文件,新的类和方法应添加到该文件中。
修改图形库
图形库提供了完整的源代码,允许用户进行定制和修改。建议使用外部代码编辑工具进行修改。安装在Sketch IDE中的图形库可以在“Arduino/libraries/S1d13781”文件夹中直接修改,也可以在“off - tree”修改后重新作为.zip库安装。重新安装时,需要先从“Arduino/libraries”文件夹中移除现有的S1d13781库。
自定义S1D13781初始化值
如果需要自定义S1D13781 LCD控制器的寄存器初始化值,可以更新S1d13781_init.h文件中的结构。可以使用Epson Electronics America网站上的S1d13781windows实用程序“781cfg.exe”生成新的值,然后将生成的S1D13781.h文件中的值更新到S1d13781_init.h文件中,可能需要进行一些小的修改。
六、库参考
图形库分为两个类:S1d13781和S1d13781_gfx。
S1d13781类
该类提供了硬件级支持,包括以下公共方法:
S1d13781() :类的构造函数。
S1d13781::begin() :设置SPI接口并配置寄存器。
S1d13781::regWrite() :向S1D13781寄存器写入一个字(16位无符号整数)。
S1d13781::regRead() :从S1D13781寄存器读取一个字(16位无符号整数)。
S1d13781::regModify() :使用位掩码修改S1D13781寄存器的内容。
S1d13781::regSetBits() :使用位掩码设置S1D13781寄存器中的特定位。
S1d13781::regClearBits() :使用位掩码清除S1D13781寄存器中的特定位。
S1d13781::memWriteByte() :向S1D13781视频内存的指定地址偏移写入一个字节(8位)值。
S1d13781::memReadByte() :从S1D13781视频内存的指定地址偏移读取一个字节(8位)值。
S1d13781::memWriteWord() :向S1D13781视频内存的指定地址偏移写入一个字(16位)值。
S1d13781::memReadWord() :从S1D13781视频内存的指定地址偏移读取一个字(16位)值。
S1d13781::memBurstWriteBytes() :向S1D13781视频内存的指定地址偏移突发写入指定数量的字节(8位)值。
S1d13781::memBurstReadBytes() :从S1D13781视频内存的指定地址偏移突发读取指定数量的字节(8位)值。
S1d13781::memBurstWriteWords() :向S1D13781视频内存的指定地址偏移突发写入指定数量的字(16位)值。
S1d13781::memBurstReadWords() :从S1D13781视频内存的指定地址偏移突发读取指定数量的字(16位)值。
S1d13781::lcdSetRotation() :设置主层的旋转角度。
S1d13781::lcdGetRotation() :返回主层的当前旋转角度。
S1d13781::lcdSetColorDepth() :设置主层的颜色深度。
S1d13781::lcdGetColorDepth() :返回主层的当前颜色深度。
S1d13781::lcdGetBytesPerPixel() :返回基于主层颜色深度的每个像素使用的字节数。
S1d13781::lcdSetStartAddress() :设置主层的内存起始地址。
S1d13781::lcdGetStartAddress() :返回主层的内存起始地址。
S1d13781::lcdSetWidth() :设置物理LCD的宽度。
S1d13781::lcdGetWidth() :返回主层的宽度。
S1d13781::lcdSetHeight() :设置物理LCD的高度。
S1d13781::lcdGetHeight() :返回主层的高度。
S1d13781::lcdGetStride() :返回主层的步幅(每行的字节数)。
S1d13781::pipSetDisplayMode() :设置PIP窗口的效果(闪烁/淡入淡出)。
S1d13781::pipGetDisplayMode() :返回PIP窗口的当前效果。
S1d13781::pipSetRotation() :设置PIP层的旋转角度。
S1d13781::pipGetRotation() :返回PIP层的当前旋转角度。
S1d13781::pipIsOrthogonal() :确定主层和PIP层是否具有相同的旋转角度。
S1d13781::pipSetColorDepth() :设置PIP层的颜色深度。
S1d13781::pipGetColorDepth() :返回PIP层的当前颜色深度。
S1d13781::pipGetBytesPerPixel() :返回基于PIP层颜色深度的每个像素使用的字节数。
S1d13781::pipSetStartAddress() :设置PIP层的内存起始地址。
S1d13781::pipGetStartAddress() :返回PIP层的内存起始地址。
S1d13781::pipSetWidth() :设置PIP窗口的宽度。
S1d13781::pipGetWidth() :返回PIP窗口的宽度。
S1d13781::pipSetHeight() :设置PIP窗口的高度。
S1d13781::pipGetHeight() :返回PIP窗口的高度。
S1d13781::pipGetStride() :返回PIP窗口的步幅(每行的字节数)。
S1d13781::pipSetPosition() :设置PIP窗口相对于LCD面板左上角的位置。
S1d13781::pipGetPosition() :获取PIP窗口相对于LCD面板左上角的位置。
S1d13781::pipSetFadeRate() :设置PIP窗口的闪烁/淡入淡出周期。
S1d13781::pipGetFadeRate() :返回PIP窗口的当前闪烁/淡入淡出周期。
S1d13781::pipWaitForFade() :等待当前PIP闪烁/淡入淡出操作完成。
S1d13781::pipSetAlphaBlendStep() :设置PIP窗口的Alpha混合步长。
S1d13781::pipGetAlphaBlendStep() :返回PIP窗口的Alpha混合步长。
S1d13781::pipSetAphaBlendRatio() :设置PIP窗口的Alpha混合比例。
**S1d1