Last active
September 28, 2022 11:02
-
-
Save elpekenin/a419ba91d11533d011086b73689adb05 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// =================== | |
// 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