没有LCD也能开发嵌入式UI?这个神器让你在电脑上搞定一切!

没有LCD也能开发UI?这个神器让你在电脑上搞定一切!

硬件还没到手,UI界面却要先开发完?别慌!这个开源神器让你在电脑上就能搞定LCD界面开发!

你有没有遇到过这种尴尬的情况:

  • 项目进度紧张,UI界面要先开发,但LCD屏幕还没到货
  • 每次修改界面都要编译烧录到板子上,效率奇低
  • 界面调试需要反复修改参数,浪费大量时间

今天就来分享一个超实用的开源工具——VirtLCD,让你彻底摆脱这些烦恼!

VirtLCD:LCD开发的救星

什么是VirtLCD?

VirtLCD 是一个开源的LCD模拟器,可以在PC上完美模拟真实的LCD显示效果。

核心理念:在PC上开发调试,确认无误后再移植到硬件。

开源地址

https://gitee.com/kerndev/VirtualLCD

为什么要用模拟器?

在嵌入式开发中,有些调试环境特别复杂:

  • Bug需要跑很长流程才能复现
  • 硬件调试时间成本高
  • 界面参数需要反复调整

一个好的仿真环境能让开发效率提升10倍!

VirtLCD的工作原理

开发流程

VirtSTM32工程 → PC调试 → 移植到真实硬件

核心组件

  1. VirtLCD.exe:LCD模拟器主程序
  2. VirtLCD.lib:开发库文件
  3. VirtSTM32工程:PC端开发工程

实战演示

第一步:基础绘制函数封装

就像在STM32上开发LCD一样,我们需要封装基础的绘制函数:

// 画点函数 - 所有绘制的基础
void LCD_DrawPoint(int x, int y, PIXEL color) {
    PIXEL *mem;
    mem = GET_FRAMEBUFFER(x, y);
    *mem = color;
}

// 画水平线 - 界面框架必备
void LCD_DrawHLine(int x1, int y1, int x2, PIXEL color) {
    PIXEL *mem;
    mem = GET_FRAMEBUFFER(x1, y1);
    for(; x1 < x2; x1++) {
        *mem++ = color;
    }
}

// 画垂直线 - 分割线神器
void LCD_DrawVLine(int x1, int y1, int y2, PIXEL color) {
    PIXEL *mem;
    mem = GET_FRAMEBUFFER(x1, y1);
    for(; y1 < y2; y1++) {
        *mem = color;
        mem -= LCD_WIDTH;
    }
}

第二步:字符显示功能

// 显示单个字符
void LCD_ShowChar(int x, int y, int num, int size, int mode) {
    int temp, t1, t;
    int y0 = y;
    int csize = (size/8 + ((size%8) ? 1 : 0)) * (size/2);
    
    num = num - ' '; // 获取字符偏移值
    
    for(t = 0; t < csize; t++) {
        if(size == 12) temp = ascii_1206[num][t];      // 12号字体
        else if(size == 16) temp = ascii_1608[num][t]; // 16号字体  
        else if(size == 24) temp = ascii_2412[num][t]; // 24号字体
        else return;
        
        for(t1 = 0; t1 < 8; t1++) {
            if(temp & 0x80) LCD_DrawPoint(x, y, FRONT_COLOR);
            else if(mode == 0) LCD_DrawPoint(x, y, BACK_COLOR);
            temp <<= 1;
            y++;
            if(y >= LCD_HEIGHT) return;
            if((y - y0) == size) {
                y = y0;
                x++;
                if(x >= LCD_WIDTH) return;
                break;
            }
        }
    }
}

// 显示字符串
void LCD_ShowString(int x, int y, int width, int height, int size, char* p) {
    int x0 = x;
    width += x;
    height += y;
    
    while((*p <= '~') && (*p >= ' ')) {
        if(x >= width) { x = x0; y += size; }
        if(y >= height) break;
        LCD_ShowChar(x, y, *p, size, 0);
        x += size / 2;
        p++;
    }
}

第三步:创建测试程序

int main(void) {
    // 初始化LCD模拟器
    LCD_Init();
    
    printf("VirtLCD演示开始!\n");
    
    // 绘制界面元素
    LCD_DrawHLine(10, 10, 350, WHITE);
    LCD_ShowString(10, 30, LCD_WIDTH, LCD_HEIGHT, 12, "欢迎使用VirtLCD!");
    LCD_ShowString(10, 50, LCD_WIDTH, LCD_HEIGHT, 16, "多种字体大小支持");
    LCD_ShowString(10, 70, LCD_WIDTH, LCD_HEIGHT, 24, "界面开发神器");
    LCD_DrawHLine(10, 110, 350, WHITE);
    
    while(1); // 保持显示
    return 0;
}

运行效果

运行程序后,会弹出一个LCD模拟器窗口,显示我们设计的界面效果:

显示内容

  • 顶部和底部的白色分割线
  • 三行不同字体大小的文字
  • 完美模拟真实LCD效果

高级应用

支持的GUI框架

VirtLCD不仅支持基础绘制,还可以集成各种GUI框架:

  • LVGL:最流行的嵌入式GUI框架
  • emWin:SEGGER公司的商业GUI
  • TouchGFX:ST官方的图形框架
  • 自定义GUI:你自己设计的界面框架

集成示例

// LVGL集成示例
void lv_port_disp_init(void) {
    // 初始化VirtLCD
    LCD_Init();
    
    // 注册LVGL显示驱动
    lv_disp_drv_init(&disp_drv);
    disp_drv.flush_cb = disp_flush;
    disp_drv.buffer = &disp_buf;
    lv_disp_drv_register(&disp_drv);
}

开发效率对比

传统开发流程

编写代码 → 编译 → 烧录 → 观察效果 → 修改代码 → 重复...

单次调试时间:5-10分钟

VirtLCD开发流程

编写代码 → 编译运行 → 实时观察 → 快速修改 → 即时生效

单次调试时间:10-30秒

效率提升10-30倍

使用技巧和注意事项

环境配置

  1. 开发环境:推荐使用Visual Studio
  2. 依赖库:需要链接VirtLCD.lib
  3. 字体资源:准备ASCII字库文件

移植要点

  1. 接口统一:保持与真实硬件相同的API
  2. 像素格式:注意颜色格式的转换
  3. 坐标系统:确保坐标映射正确

调试技巧

  • 鼠标事件:可以模拟触摸操作
  • 键盘事件:模拟按键输入
  • 性能监控:观察绘制性能

其他类似工具推荐

PC端模拟器

  • LVGL PC Simulator:LVGL官方模拟器
  • TouchGFX Simulator:ST官方模拟器
  • Qt Designer:跨平台界面设计工具

在线工具

  • SquareLine Studio:LVGL在线设计工具
  • GUI Guider:NXP的LVGL设计工具

适用场景分析

非常适用

  • 界面原型快速验证
  • 复杂GUI框架集成测试
  • 多人协作的界面开发
  • 客户演示和确认

部分适用

  • 简单的LED控制界面
  • 对实时性要求极高的应用
  • 硬件相关的显示特效

不太适用

  • 纯硬件调试
  • 底层驱动开发
  • 性能极限优化

总结

VirtLCD作为一个开源的LCD模拟器,虽然可能不如商业工具那么完善,但对于嵌入式开发者来说绝对是一个宝藏工具!

核心优势

  • 完全免费开源
  • 开发效率大幅提升
  • 支持多种GUI框架
  • 学习成本低

使用建议

  • 先用VirtLCD快速原型设计
  • 确认效果后再移植到硬件
  • 可以作为客户演示的工具

互动时间

你在嵌入式UI开发中遇到过哪些痛点?

还知道哪些类似的模拟器工具?

你觉得模拟器开发和硬件开发各有什么优缺点?

如果你也被硬件开发的低效率困扰过,一定要试试VirtLCD!

觉得这个工具有用的话,记得点赞收藏,让更多小伙伴看到这个宝藏工具!


关注我,分享更多嵌入式开发效率提升技巧!

原文链接:,转发请注明来源!