#ifndef _DZBJ_LCD_H_ #define _DZBJ_LCD_H_ #include "dzbj_gpio.h" #include "esp_lvgl_port.h" #include "esp_lcd_st77916.h" #include void lcd_init(void); void lvgl_lcd_init(void); void lcd_clear_screen_black(void); // 直接 DMA 填充全屏纯色(绕过 LVGL,约 26ms) // buf: 调用者预分配的 DMA 缓冲区,大小 >= LCD_WID * strip_h * 2 字节 // buf 中的数据必须已填充好目标颜色的 RGB565 值 // strip_h: 每条带高度(推荐 40) void lcd_fill_color_with_buf(uint16_t *buf, int strip_h); // VSYNC 同步(防撕裂) // 读取当前 LCD 扫描行号,成功返回 ESP_OK esp_err_t lcd_read_scanline(uint16_t *scanline); // 等待进入 VBLANK 消隐期,timeout_us 建议 17000(1帧) // 返回 true=成功等到 VBLANK,false=超时或读取失败 bool lcd_wait_vsync_timeout(uint32_t timeout_us); // I2C 总线共享:传入主项目的 I2C 总线句柄,供触摸控制器使用 void lcd_set_i2c_bus(i2c_master_bus_handle_t bus); #if DZBJ_ENABLE_TOUCH void touch_init(void); void get_touch(uint16_t* touchx, uint16_t* touchy); #endif #endif // _DZBJ_LCD_H_