Skip to content

Instantly share code, notes, and snippets.

@elpekenin
Last active September 28, 2022 11:02
Show Gist options
  • Save elpekenin/a419ba91d11533d011086b73689adb05 to your computer and use it in GitHub Desktop.
Save elpekenin/a419ba91d11533d011086b73689adb05 to your computer and use it in GitHub Desktop.
// ===================
// Manual SPI handling
void my_spi(uint8_t value, bool is_data) {
writePinLow(LCD_CS_PIN);
writePin(LCD_DC_PIN, is_data);
spi_write(value);
writePinHigh(LCD_CS_PIN);
}
void my_cmd(uint8_t cmd) {
my_spi(cmd, false);
}
void my_data(uint8_t data) {
my_spi(data, true);
}
// ------------------------------
// ==========
// Setup pins
// SPI
spi_init();
spi_start(LCD_CS_PIN, false, LCD_SPI_MODE, LCD_SPI_DIV);
// Touchpad
setPinOutput(TP_CS_PIN);
writePinHigh(TP_CS_PIN); // Maybe not needed
// Backlight
setPinOutput(LCD_BL_PIN);
writePinHigh(LCD_BL_PIN);
wait_ms(150); //Let it draw some power
// Reset by hardware
setPinOutput(LCD_RST_PIN);
writePinLow(LCD_RST_PIN);
wait_ms(20);
writePinHigh(LCD_RST_PIN);
wait_ms(20);
// Init DC pin low
setPinOutput(LCD_DC_PIN);
writePinLow(LCD_DC_PIN);
// ====
// Init
my_cmd(ILI9XXX_CMD_RESET);
wait_ms(120);
my_cmd(ILI9XXX_SET_PIX_FMT);
my_data(0x55);
my_cmd(ILI9XXX_SET_PGAMMA);
my_data(0x0F);
my_data(0x1F);
my_data(0x1C);
my_data(0x0C);
my_data(0x0F);
my_data(0x08);
my_data(0x48);
my_data(0x98);
my_data(0x37);
my_data(0x0A);
my_data(0x13);
my_data(0x04);
my_data(0x11);
my_data(0x0D);
my_data(0x00);
my_cmd(ILI9XXX_SET_NGAMMA);
my_data(0x0F);
my_data(0x32);
my_data(0x2E);
my_data(0x0B);
my_data(0x0D);
my_data(0x05);
my_data(0x47);
my_data(0x75);
my_data(0x37);
my_data(0x06);
my_data(0x10);
my_data(0x03);
my_data(0x24);
my_data(0x20);
my_data(0x00);
my_cmd(ILI9XXX_SET_POWER_CTL_1);
my_data(0x0D);
my_data(0x0D);
my_cmd(ILI9XXX_SET_POWER_CTL_2);
my_data(0x43);
my_data(0x00);
my_cmd(ILI9XXX_SET_POWER_CTL_3);
my_data(0x00);
my_cmd(ILI9XXX_SET_VCOM_CTL_1);
my_data(0x00);
my_data(0x48);
my_data(0x00);
my_data(0x48);
my_cmd(ILI9XXX_SET_INVERSION_CTL);
my_data(0x02);
// ========
// Rotation
my_cmd(ILI9XXX_SET_MEM_ACS_CTL);
my_data(0x08);
my_cmd(ILI9XXX_SET_FUNCTION_CTL);
my_data(0x00);
my_data(0x42);
my_cmd(ILI9XXX_CMD_SLEEP_OFF);
wait_ms(5);
my_cmd(ILI9XXX_CMD_DISPLAY_ON);
wait_ms(5);
// ====
// Test
// Fill black
my_cmd(ILI9XXX_SET_COL_ADDR);
my_data(0x00);
my_data(0x00);
my_data(LCD_WIDTH >> 8);
my_data((LCD_WIDTH & 0xFF) - 1);
my_cmd(ILI9XXX_SET_PAGE_ADDR);
my_data(0x00);
my_data(0x00);
my_data(LCD_HEIGHT >> 8);
my_data((LCD_HEIGHT & 0xFF) - 1);
my_cmd(ILI9XXX_SET_MEM);
for (uint64_t i=0; i < (LCD_WIDTH-1)*(LCD_HEIGHT-1); i++) {
my_data(0x00);
my_data(0x00);
}
// Red rect
my_cmd(ILI9XXX_SET_COL_ADDR);
my_data(0x00);
my_data(0x00);
my_data(0x00);
my_data(0x0A);
my_cmd(ILI9XXX_SET_PAGE_ADDR);
my_data(0x00);
my_data(0x00);
my_data(0x00);
my_data(0x0A);
my_cmd(ILI9XXX_SET_MEM);
for (int i=0; i<100; i++) {
my_data(0xF8);
my_data(0x00);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment