3.5寸TFT ILI9486 多平台代码例程

知识库
知识库文档
/firmware/显示屏/3.5寸 TFT ILI9486/3.5寸TFT ILI9486 多平台代码例程.md

文档

3.5寸TFT ILI9486 多平台代码例程


Arduino Mega (MCUFriend — 并口模式)

#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

void setup() {
  uint16_t ID = tft.readID();
  tft.begin(ID);
  tft.setRotation(1); // 480x320 横屏
  tft.fillScreen(TFT_BLACK);
  
  // 仪表盘背景
  tft.fillRoundRect(10, 10, 460, 300, 20, TFT_DARKGREY);
  
  // 标题
  tft.setTextColor(TFT_WHITE);
  tft.setTextSize(3);
  tft.setCursor(120, 20);
  tft.println("ILI9486 3.5\"");
  
  // 图表区域模拟
  for(int x=30; x<450; x+=10) {
    int h = random(50, 200);
    tft.fillRect(x, 300-h, 9, h, TFT_GREEN);
  }
  
  tft.drawLine(30, 300, 450, 300, TFT_WHITE); // 基线
}

void loop() {}

ESP32 (TFT_eSPI — SPI模式)

// User_Setup.h:
// #define ILI9486_DRIVER
// #define TFT_WIDTH 480 #define TFT_HEIGHT 320
// #define SPI_FREQUENCY 40000000
// TFT_CS=15, TFT_DC=2, TFT_RST=4, TFT_MOSI=23, TFT_SCLK=18

#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI();

void setup() {
  tft.init();
  tft.setRotation(1);
  tft.fillScreen(TFT_BLACK);
  
  // 渐变背景
  for(int i=0; i<480; i++) {
    tft.drawFastVLine(i, 0, 320, 
      tft.color565(i*255/480, 64, 255-i*255/480));
  }
  
  // 半透明卡片
  tft.fillRoundRect(40, 40, 400, 240, 15, TFT_NAVY);
  tft.setTextColor(TFT_WHITE, TFT_NAVY);
  tft.drawString("ESP32 + ILI9486", 60, 60, 4);
  tft.drawString("480x320 SPI Mode", 60, 100, 2);
  tft.drawString("Vibe Electronics", 60, 140, 2);
}

void loop() {
  // 动态时间
  static uint32_t last=0;
  if(millis()-last>1000) {
    last=millis();
    tft.setTextColor(TFT_YELLOW, TFT_NAVY);
    tft.drawString("Uptime: " + String(last/1000) + "s", 60, 200, 2);
  }
}

STM32F4 (FSMC 16位并口 — 高速刷新)

// STM32 FSMC 16位并口驱动
// FSMC NE1接CS, A0接DC, 数据D0-D15

#define ILI9486_BASE ((uint32_t)0x60000000)
#define ILI9486_CMD  (*(__IO uint16_t*)ILI9486_BASE)
#define ILI9486_DATA (*(__IO uint16_t*)(ILI9486_BASE + (1<<17)))

void ili9486_write_cmd(uint16_t cmd) {
    ILI9486_CMD = cmd;
}

void ili9486_write_data(uint16_t data) {
    ILI9486_DATA = data;
}

void ili9486_init(void) {
    // FSMC配置...
    ili9486_write_cmd(0x01); // SW Reset
    HAL_Delay(150);
    ili9486_write_cmd(0x11); // Sleep Out
    HAL_Delay(150);
    ili9486_write_cmd(0x3A); // Pixel Format
    ili9486_write_data(0x55); // 16bit
    
    ili9486_write_cmd(0x29); // Display ON
    ili9486_write_cmd(0x2C); // Memory Write Start
}

void ili9486_fill_fast(uint16_t color) {
    ili9486_write_cmd(0x2A);
    ili9486_write_data(0); ili9486_write_data(0);       // X start=0
    ili9486_write_data(0x01); ili9486_write_data(0xDF);  // X end=479
    
    ili9486_write_cmd(0x2B);
    ili9486_write_data(0); ili9486_write_data(0);        // Y start=0
    ili9486_write_data(0x01); ili9486_write_data(0x3F);  // Y end=319
    
    ili9486_write_cmd(0x2C);
    for(uint32_t i=0; i<480*320; i++) {
        ILI9486_DATA = color;
    }
}

MicroPython (RP2040)

from machine import Pin, SPI
import ili9486
import time

spi = SPI(0, baudrate=30000000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
tft = ili9486.ILI9486(spi, cs=Pin(17), dc=Pin(20), rst=Pin(21), w=480, h=320)

tft.fill(ili9486.BLACK)

# 绘制网格
for x in range(0, 480, 40):
    tft.vline(x, 0, 320, ili9486.DARKGREY)
for y in range(0, 320, 40):
    tft.hline(0, y, 480, ili9486.DARKGREY)

# 绘制节点
for x in range(60, 420, 80):
    for y in range(60, 260, 80):
        tft.fill_circle(x, y, 15, ili9486.CYAN)
        tft.draw_circle(x, y, 15, ili9486.WHITE)

tft.text("MicroPython", 170, 10, ili9486.WHITE)
tft.show()

信息

路径
/firmware/显示屏/3.5寸 TFT ILI9486/3.5寸TFT ILI9486 多平台代码例程.md
更新时间
2026/5/26