import machine
import time
# Setup SPI and control pins
spi = machine.SPI(1, baudrate=40000000, sck=machine.Pin(10), mosi=machine.Pin(11), miso=machine.Pin(12))
cs = machine.Pin(17, machine.Pin.OUT)
dc = machine.Pin(18, machine.Pin.OUT)
rst = machine.Pin(19, machine.Pin.OUT)
led_backlight = machine.Pin(20, machine.Pin.OUT)
def write_cmd(cmd):
dc.value(0)
cs.value(0)
spi.write(bytearray([cmd]))
cs.value(1)
def write_data(data):
dc.value(1)
cs.value(0)
spi.write(bytearray([data]))
cs.value(1)
def init_display():
rst.value(0)
time.sleep(0.1)
rst.value(1)
time.sleep(0.1)
write_cmd(0x01) # Software reset
time.sleep(0.1)
# Initialization sequence based on ILI9341 datasheet
write_cmd(0x28) # Display off
write_cmd(0xCF)
write_data(0x00)
write_data(0x83)
write_data(0x30)
write_cmd(0xED)
write_data(0x64)
write_data(0x03)
write_data(0x12)
write_data(0x81)
write_cmd(0xE8)
write_data(0x85)
write_data(0x01)
write_data(0x79)
write_cmd(0xCB)
write_data(0x39)
write_data(0x2C)
write_data(0x00)
write_data(0x34)
write_data(0x02)
write_cmd(0xF7)
write_data(0x20)
write_cmd(0xEA)
write_data(0x00)
write_data(0x00)
write_cmd(0xC0) # Power control
write_data(0x26) # VRH[5:0]
write_cmd(0xC1) # Power control
write_data(0x11) # SAP[2:0];BT[3:0]
write_cmd(0xC5) # VCM control
write_data(0x35)
write_data(0x3E)
write_cmd(0xC7) # VCM control2
write_data(0xBE)
write_cmd(0x36) # Memory Access Control
write_data(0x48)
write_cmd(0x3A)
write_data(0x55)
write_cmd(0xB1)
write_data(0x00)
write_data(0x1B)
write_cmd(0xF2) # 3Gamma Function Disable
write_data(0x08)
write_cmd(0x26) # Gamma curve selected
write_data(0x01)
write_cmd(0xE0) # Set Gamma
write_data(0x1F)
write_data(0x1A)
write_data(0x18)
write_data(0x0A)
write_data(0x0F)
write_data(0x06)
write_data(0x45)
write_data(0x87)
write_data(0x32)
write_data(0x0A)
write_data(0x07)
write_data(0x02)
write_data(0x07)
write_data(0x05)
write_data(0x00)
write_cmd(0xE1) # Set Gamma
write_data(0x00)
write_data(0x25)
write_data(0x27)
write_data(0x05)
write_data(0x10)
write_data(0x09)
write_data(0x3A)
write_data(0x78)
write_data(0x4D)
write_data(0x05)
write_data(0x18)
write_data(0x0D)
write_data(0x38)
write_data(0x3A)
write_data(0x1F)
write_cmd(0x2A)
write_data(0x00)
write_data(0x00)
write_data(0x00)
write_data(0xEF)
write_cmd(0x2B)
write_data(0x00)
write_data(0x00)
write_data(0x01)
write_data(0x3F)
write_cmd(0x29) # Display on
# Initialize the display
init_display()
# Turn on the LED backlight
led_backlight.on()
# Write white pixels to the screen
def fill_screen(color):
write_cmd(0x2C)
for _ in range(320*240):
write_data(color >> 8)
write_data(color & 0xFF)
# Fill the screen with white
fill_screen(0xFFFF)
# Keep display on
while True:
time.sleep(1)