You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
/*
|
|
* Copyright (c) 2006-2021, RT-Thread Development Team
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Change Logs:
|
|
* Date Author Notes
|
|
* 2025-10-27 Administrator the first version
|
|
*/
|
|
|
|
#include "lvgl.h"
|
|
#include "lv_port_disp.h"
|
|
#include "ssd1963.h"
|
|
|
|
// 屏幕分辨率(请根据实际 LCD 调整)
|
|
#define LCD_WIDTH 480
|
|
#define LCD_HEIGHT 272
|
|
|
|
// 绘图缓冲区:建议为屏幕宽度 * 10 行
|
|
static lv_color_t draw_buf1[LCD_WIDTH * 10]; // 前缓冲
|
|
static lv_color_t draw_buf2[LCD_WIDTH * 10]; // 后缓冲(可选,用于双缓冲)
|
|
|
|
// LVGL 绘图缓冲区描述符
|
|
static lv_disp_draw_buf_t draw_buf;
|
|
|
|
// 刷屏完成回调
|
|
static void disp_flush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
|
|
{
|
|
// 设置 SSD1963 显示窗口
|
|
ssd1963_set_window(area->x1, area->y1, area->x2, area->y2);
|
|
|
|
// 写入像素数据
|
|
uint32_t size = (area->x2 - area->x1 + 1) * (area->y2 - area->y1 + 1);
|
|
for (uint32_t i = 0; i < size; i++) {
|
|
SSD1963_DATA_ADDR = color_p[i].full; // 使用 FSMC 写入
|
|
}
|
|
|
|
// ✅ 必须调用!通知 LVGL 刷屏已完成
|
|
lv_disp_flush_ready(disp_drv);
|
|
}
|
|
|
|
/**
|
|
* @brief 初始化 LVGL 显示驱动
|
|
*/
|
|
void lv_port_disp_init(void)
|
|
{
|
|
// 1. 初始化 FSMC 总线(由 STM32CubeMX 生成)
|
|
// MX_FSMC_Init();
|
|
|
|
// 2. 初始化 SSD1963 控制器
|
|
ssd1963_init(); // ✅ 使用 ssd1963.h 中的初始化函数
|
|
|
|
// 注释掉重复的 lcd_init()
|
|
// lcd_init(); // ❌ 删除:与 ssd1963_init() 重复或冲突
|
|
|
|
// 3. 初始化 LVGL 的绘图缓冲区
|
|
// 参数:缓冲区结构体、第一个缓冲区、第二个缓冲区(可选)、总大小(像素数)
|
|
lv_disp_draw_buf_init(&draw_buf, draw_buf1, draw_buf2, LCD_WIDTH * 10);
|
|
|
|
// 4. 初始化显示驱动
|
|
static lv_disp_drv_t disp_drv;
|
|
lv_disp_drv_init(&disp_drv);
|
|
|
|
disp_drv.hor_res = LCD_WIDTH; // 水平分辨率
|
|
disp_drv.ver_res = LCD_HEIGHT; // 垂直分辨率
|
|
disp_drv.flush_cb = disp_flush; // 刷屏回调
|
|
disp_drv.draw_buf = &draw_buf; // 绑定缓冲区 ✅ 必须赋值!
|
|
|
|
// 5. 注册显示设备到 LVGL
|
|
lv_disp_drv_register(&disp_drv);
|
|
}
|
|
|