本帖最后由 gaoyang9992006 于 2023-12-7 17:00 编辑  
 
#申请原创# @21小跑堂  
 
在Arduino开发中,ESP32的默认引脚配置文件为:pin_arduino.h 
该文件内有以下内容: 
- static const uint8_t TX = 21;
 
 - static const uint8_t RX = 20;
 
  
- static const uint8_t SDA = 8;
 
 - static const uint8_t SCL = 9;
 
  
- static const uint8_t SS    = 7;
 
 - static const uint8_t MOSI  = 6;
 
 - static const uint8_t MISO  = 5;
 
 - static const uint8_t SCK   = 4;
 
  
- static const uint8_t A0 = 0;
 
 - static const uint8_t A1 = 1;
 
 - static const uint8_t A2 = 2;
 
 - static const uint8_t A3 = 3;
 
 - static const uint8_t A4 = 4;
 
 - static const uint8_t A5 = 5;
 
  
- #endif /* Pins_Arduino_h */
 
  其中,该LCD屏幕所用的即为SPI接口 
所以默认可以使用 
- static const uint8_t SS    = 7;
 
 - static const uint8_t MOSI  = 6;
 
 - static const uint8_t MISO  = 5;
 
 - static const uint8_t SCK   = 4;
 
  由于该液晶屏只需要单向写入通信,因此只使用了MOSI接口, 
于是可以使用MISO的接口用作屏幕上其他端口的控制,比如下面这种 
 
 
 
另外串口占用的引脚,如果不使用的情况下是可以用作IO使用的,该引脚的数字使用编号为21,20 
如上图所示测试了GPIO21,经过测试可以作为普通引脚使用。 
该屏幕的BL背光引脚,默认悬空则为拉高,点亮,如果该引脚接地则息屏灯。 
--------------------------------------------------------------------------------------- 
当一个系统中只有这一个SPI设备时候,还可以更加精简 
例如CS引脚,可以直接接地,这样省去了片选的控制引脚,连接如下所示 
 
 
这样系统头文件为SPI预留的4个引脚刚好够用,如果需要实现自动息屏功能,则需要额外再使用一个IO用来定时控制息屏个功能,当没有操作的时候倒计时,进入息屏模式,同样也可以通过按键实现息屏,这就又需要一个引脚了。 
如果引脚不够用,无法实现,则可以增加一个开关用于控制该引脚拉低到底,可以是拨动开关,也可以是自锁按键。 
--------------------------------------------- 
继续精简 
对于LCD的RESET引脚,也可以省略一个IO,由于单片机本身也具备复位引脚,因此我们可以将该引脚与单片机的RST合并使用,由单片机复位信号复位LCD,这样只要单片机上电,那么LCD就进入复位,开始工作 
 
 
这样驱动显示屏只需要3个IO引脚即可完成工作。 
 
-----------------------------------------------------------------继续优化 
经过上述的操作我们节约出来了GPIO05,刚好此时我们的背光控制BL有希望了,可以用GPIO05给其提供控制信号。 
对GPIO05初始化为输出引脚,同时设置初始值为高电平,这样上电即可点亮屏幕。 
当需要息屏的时候拉低GPIO05,当遇到点亮触发信号,拉高该引脚。 
 
 
至此,我们使用Arduino 为ESP32C3的SPI预留的4个引脚完美的实现了ST7735的LCD彩屏控制。 
 
 
  |