#include "include.h" #include "tft.h" #define CommEnd() tft_write_end() #define WriteData(v) tft_write_data(v) #define WriteComm(v) tft_write_cmd(v) #define GUI_TFT_SCREEN_ID 0x0 #define GUI_SCREEN_OFS_X 0 #define GUI_SCREEN_OFS_Y 12 static void tft_gui_set_window(u16 x0, u16 y0, u16 x1, u16 y1) { x0 += GUI_SCREEN_OFS_X; x1 += GUI_SCREEN_OFS_X; y0 += GUI_SCREEN_OFS_Y; y1 += GUI_SCREEN_OFS_Y; WriteComm(0x2A); // TFT_CASET WriteData(BYTE1(x0)); WriteData(BYTE0(x0)); WriteData(BYTE1(x1)); WriteData(BYTE0(x1)); WriteComm(0x2B); // TFT_PASET WriteData(BYTE1(y0)); WriteData(BYTE0(y0)); WriteData(BYTE1(y1)); WriteData(BYTE0(y1)); tft_write_end(); } static void tft_read_id(uint8_t *buf) { tft_read_id_cmd(0x04); /* dummy clock cycle */ tft_dummy_clock(); buf[0] = tft_spi_getbyte(); buf[1] = tft_spi_getbyte(); buf[2] = tft_spi_getbyte(); tft_write_end(); } void st7789_display_point(uint16_t x1, uint16_t y1, uint16_t color) { TFT_SPI_DATA_EN(); delay_5ms(200); tft_gui_set_window(0, 0, x1, y1); tft_frame_start(); for (int x = 0; x <= x1; x++) { for (int y = 0; y <= y1; y++) { WDT_CLR(); WriteData(color >> 8); WriteData(color); } } tft_write_end(); } static void tft_240_st7789_init(void) { printf("tft_st7789_init\n"); tft_hw_reset(); delay_ms(120); WriteComm(0x11); delay_ms(120); WriteComm(0x36); WriteData(0x00); WriteComm(0x3A); WriteData(0x05); WriteComm(0x35); WriteData(0x00); WriteComm(0xB2); WriteData(0x5C); WriteData(0x5C); WriteData(0x00); WriteData(0x33); WriteData(0x33); WriteComm(0xB7); WriteData(0x57); WriteComm(0xBB); WriteData(0x15); WriteComm(0xC0); WriteData(0x2C); WriteComm(0xC2); WriteData(0x01); WriteComm(0xC3); WriteData(0x14); WriteComm(0xC6); WriteData(0x16); WriteComm(0xD0); WriteData(0xA7); WriteComm(0xD0); WriteData(0xA4); WriteData(0xA1); WriteComm(0xD6); WriteData(0xA1); //sleep in后,gate输出为GND WriteComm(0xE0); WriteData(0x70); WriteData(0x03); WriteData(0x0A); WriteData(0x09); WriteData(0x09); WriteData(0x14); WriteData(0x36); WriteData(0x54); WriteData(0x4C); WriteData(0x3C); WriteData(0x17); WriteData(0x18); WriteData(0x2E); WriteData(0x2E); WriteComm(0xE1); WriteData(0x70); WriteData(0x08); WriteData(0x0E); WriteData(0x0A); WriteData(0x0A); WriteData(0x35); WriteData(0x35); WriteData(0x44); WriteData(0x4C); WriteData(0x3A); WriteData(0x18); WriteData(0x1A); WriteData(0x2C); WriteData(0x2F); WriteComm(0x21); WriteComm(0x29); WriteComm(0x2C); } tft_driver_t tft_driver_240_st7789 = { .id = GUI_TFT_SCREEN_ID, .init = tft_240_st7789_init, .read_id = tft_read_id, .set_window = tft_gui_set_window, };