0.96寸彩屏
模块来源
采购链接:
https://item.taobao.com/item.htm?id=563017284569&_u=n1q56pn38e09
资料下载链接:
https://pan.baidu.com/s/19DxY8JJEzNt4XYF_CwVbDw
资料提取码:8888
规格参数
工作电压:2.8~3.3V
工作电流:30MA
模块尺寸:24(H) x 30(V)MM
像素大小:80(H) x 160(V) RGB
驱动芯片:ST7735
通信协议:SPI
管脚数量:8 Pin(2.54mm间距排针)
原理解析
SPI与IIC类似,都分有软件SPI和硬件SPI。
ESP32-S3芯片集成了四个 SPI 控制器:
• SPI0
• SPI1
• 通用 SPI2,即 GP-SPI2
• 和通用 SPI3,即 GP-SPI3
SPI0 和 SPI1 控制器主要供内部使用以访问外部 flash 及 PSRAM。我们只能使用SPI2和SPI3。
硬件SPI支持以下特性:
与屏幕显示位置及显示方向相关的寄存器主要有:
- 36h Memory Data Access Control 内存数据控制,用于控制,屏幕(0,0)原点的位置,及x轴和y轴的方向
- 2ah 列地址设置寄存器
- 2bh 行地址设置寄存器
- 2c 内存写入寄存器,某个像素点显示的颜色数据 其中最需要耗时也最需要深入了解的是36h寄存器,其涉及到屏幕的显示方向及显示位置。
移植过程
我们的目标是将例程移植至ESP32-S3开发板上。已经为大家提供了完整的驱动代码,按照以下步骤,即可完成移植。
软件SPI移植
该屏幕需要设置8个接口,具体接口说明见 表2.4.1-1 各引脚说明。
模块为SPI通信协议的从机,SCL为SPI信号线(SCK),SDA为SPI输出线(MOSI),CS为SPI片选线(NSS)。
如果MCU的GPIO引脚不足,可以将屏幕的两个引脚接口不接入MCU的GPIO。
- 将RES接入MCU的复位引脚,当MCU复位时,屏幕也跟着复位;
- 可以将BLK接入3.3V或悬空,代价是无法控制背光亮度。
当前厂家源码使用的是软件SPI接口,SPI时序部分厂家已经完成,我们只需要将引脚和延时配置好即可。所以对应接入的屏幕引脚请按照你的需要。这里选择的引脚见表2.4.1-2 软件SPI接线
为大家准备的【LCD】文件夹,复制到自己工程中的main文件夹中。
软件SPI驱动代码(已经适配):
将LCD文件夹复制到main文件下:
打开自己的工程,将我们刚刚复制过来的文件导入.c和.h文件路径。
- 在VSCode中打开main文件夹下的CMakeLists.txt文件
- 添加这些路径
到这里软件SPI就移植完成了,请移步到 2.5 进行移植验证。
硬件SPI移植
该屏幕需要设置8个接口,具体接口说明见 表2.4.2-1 各引脚说明。
模块为SPI通信协议的从机,SCL为SPI信号线(SCK),SDA为SPI输出线(MOSI),CS为SPI片选线(NSS)。
如果MCU的GPIO引脚不足,可以将屏幕的两个引脚接口不接入MCU的GPIO。
- 将RES接入MCU的复位引脚,当MCU复位时,屏幕也跟着复位;
- 可以将BLK接入3.3V或悬空,代价是无法控制背光亮度。
当前厂家源码使用的是软件SPI接口,SPI时序部分厂家已经完成,我们只需要将引脚和延时配置好即可。所以对应接入的屏幕引脚请按照你的需要。这里选择的引脚见表2.4.2-2 硬件SPI接线
为大家准备的【LCD】文件夹,复制到自己工程中的main文件夹中。
LCD硬件SPI驱动代码(已适配):
将LCD文件夹复制到main文件下:
打开自己的工程,将我们刚刚复制过来的文件导入.c和.h文件路径。
- 在VSCode中打开main文件夹下的CMakeLists.txt文件
- 添加这些路径
到这里硬件SPI就移植完成了,请移步进行移植验证。
移植验证
在main.c中输入代码如下
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_timer.h"
#include "LCD/lcd_init.h"
#include "LCD/lcd.h"
#include "LCD/pic.h"
void app_main(void)
{
float t = 0;
LCD_Init();//屏幕初始化
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);//清全屏为黑色
while(1)
{
LCD_ShowString(0,16*0,(uint8_t *)"LCD_W:",WHITE,BLACK,16,0);
LCD_ShowIntNum(48,16*0,LCD_W,3,WHITE,BLACK,16);
LCD_ShowString(80,16*0,(uint8_t *)"LCD_H:",WHITE,BLACK,16,0);
LCD_ShowIntNum(128,16*0,LCD_H,3,WHITE,BLACK,16);
LCD_ShowString(0,16*1,(uint8_t *)"Nun:",WHITE,BLACK,16,0);
LCD_ShowFloatNum1(8*4,16*1,t,4,WHITE,BLACK,16);
LCD_ShowChinese(8*5,16*3,(uint8_t *)"中电子",RED,BLACK,32,0);
t+=0.11;
delay_ms(1000);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
上电效果: