mcu_ab568x/app/platform/gui/tft/tft_240_st7789.c
2025-05-30 18:03:10 +08:00

162 lines
3.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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,
};