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模式)
#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位并口 — 高速刷新)
#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) {
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()