当前位置: 首页 > article >正文

【u8g2模拟仿真】windows环境下使用sdl模拟仿真u8g2图形库

github主页:https://github.com/snqx-lqh
本项目github地址:https://github.com/snqx-lqh/u8g2-windows-sdl-simulate
u8g2的开源链接:https://github.com/olikraus/u8g2
SDL地址:https://github.com/libsdl-org/SDL/releases
欢迎交流

项目说明

这个项目是我在Windows环境下使用vscode配置使用SDL和U8G2图形库进行模拟仿真,方便U8G2的调试。项目配置步骤也在B站有上传视频。

【u8g2仿真】配置vscode下模拟仿真u8g2(vscode + u8g2 + sdl)

环境配置

首先我们需要安装mingw编译环境,这个网上有挺多教程,我暂时不做说明,可以直接把我提供的在tools里面mingw64解压。安装完成后就有以下目录

在这里插入图片描述

如果是自己安装的,在bin目录下有一个mingw32-make.exe,将其复制一份,命名为make.exe

在这里插入图片描述

记得添加环境变量,主要把以下路径加入环境变量,实际的路径,根据自己的安装环境定。

E:\Program\mingw64\bin

加入后,可以打开cmd测试gccmake是否配置成功

在这里插入图片描述

然后我们去下载SDL2相关文件,下载路径:https://github.com/libsdl-org/SDL/releases

他的版本已经到3.x了,但是为了不出问题,我们下载2.x的。下载图中文件。

在这里插入图片描述

下载后解压,处理SDL2-devel-2.30.11-mingw.zip,它解压后应该是如下:

在这里插入图片描述

然后把其中的x86_64-w64-mingw32文件夹,复制到我们之前安装的mingw的相同文件目录下,直接覆盖,理论上应该也不会有重复,复制完成后,能发现有一些文件夹多了SDL相关的配置。

在这里插入图片描述

代码处理

为了处理方便,我们建立一个新的文件夹来处理我们的仿真,我这里建立了sdl-sim文件夹,然后把csrc文件夹放在其中,然后将u8g2的sys/sdl/common文件夹中的两个文件u8x8_d_sdl_128x64.cu8x8_sdl_key.c也复制到csrc文件夹中。然后写一个Makefile

Makefile主要记得,需要包含自己的SDL路径,还有链接的路径也要和自己的lib路径一样

# 编译器
CC = gcc
# 编译选项 记得更换自己的SDL2路径,就在你的mingw64路径下   !!!!!!!!!!!!!!记得修改!!!!!!!!!!!!!!!!
CFLAGS = -Wall -Wextra -O2 -Icsrc -IE:/Program/mingw64/x86_64-w64-mingw32/include/SDL2
# 链接选项   !!!!!!!!!!!!!!记得修改!!!!!!!!!!!!!!!!
LDFLAGS = -LE:/Program/mingw64/x86_64-w64-mingw32/lib -lSDL2
# 目标可执行文件
TARGET = main.exe
# 源文件
SRCS = main.c
# u8g2 源文件
U8G2_SRCS = $(wildcard csrc/*.c)
# 所有源文件
ALL_SRCS = $(SRCS) $(U8G2_SRCS)
# 目标文件
OBJS = $(ALL_SRCS:.c=.o)
# 默认目标
all: $(TARGET)
# 生成可执行文件
$(TARGET): $(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)
# 编译规则
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@
# 清理生成的文件
clean:
	rm -f $(OBJS) $(TARGET)
# 伪目标
.PHONY: all clean

并编写一个测试文件main.c。

#include "csrc/u8g2.h"
#include <stdio.h>

u8g2_t u8g2;

int main(void)
{
  int x, y;

  int k;
  int i;

  u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0);
  u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
  u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);

  u8g2_SetFont(&u8g2, u8g2_font_helvB18_tn);

  x = 50;
  y = 30;

  for (;;)
  {
    u8g2_FirstPage(&u8g2);
    i = 0;
    do
    {
      u8g2_SetFontDirection(&u8g2, 0);
      u8g2_DrawStr(&u8g2, x, y, "123");
      u8g2_SetFontDirection(&u8g2, 1);
      u8g2_DrawStr(&u8g2, x, y, "123");
      u8g2_SetFontDirection(&u8g2, 2);
      u8g2_DrawStr(&u8g2, x, y, "123");
      u8g2_SetFontDirection(&u8g2, 3);
      u8g2_DrawStr(&u8g2, x, y, "123");
      if (i == 1)
      {
        u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y0, 1, 0);
        u8g2_DrawHVLine(&u8g2, u8g2.user_x0, u8g2.user_y1 - 1, 1, 0);
        u8g2_DrawHVLine(&u8g2, u8g2.user_x1 - 1, u8g2.user_y1 - 1, 1, 0);
        u8g2_DrawHVLine(&u8g2, u8g2.user_x1 - 1, u8g2.user_y0, 1, 0);
      }

      i++;

    } while (u8g2_NextPage(&u8g2));

    do
    {
      k = u8g_sdl_get_key();
    } while (k < 0);

    if (k == 273)
      y -= 7;
    if (k == 274)
      y += 7;
    if (k == 276)
      x -= 7;
    if (k == 275)
      x += 7;

    if (k == 'e')
      y -= 1;
    if (k == 'x')
      y += 1;
    if (k == 's')
      x -= 1;
    if (k == 'd')
      x += 1;
    if (k == 'q')
      break;
  }
  return 0;
}

然后在终端中make即可

make
./main.exe

字体处理

后续操作中发现无法使用部分字体,然后看源代码,他的font有一个#ifdef U8G2_USE_LARGE_FONTS选项,所以为了能够使用每个字体。我们在两个字体文件前面分别加上#define U8G2_USE_LARGE_FONTS,分别是文件u8g2_fonts.c和文件u8x8_fonts.c。这样,就能使用很多字体了。

在这里插入图片描述


http://www.kler.cn/a/517730.html

相关文章:

  • Ubuntu 顶部状态栏 配置,gnu扩展程序
  • FS飞速创新内推~
  • Windows中本地组策略编辑器gpedit.msc打不开/微软远程桌面无法复制粘贴
  • 【MySQL】我在广州学Mysql 系列——MySQL用户管理详解
  • SpringBoot Test详解
  • MySQL离线安装文档(Linux版)
  • 探索 SolidJS:一款高速的前端框架
  • 二叉树(了解)c++
  • Microsoft Edge 企业策略禁用更新
  • 【设计模式】访问者模式(Visitor Pattern): visitor.visit(), accept()
  • RocketMQ 系列文章
  • 【读书笔记·VLSI电路设计方法解密】问题43:什么是TestBench
  • python http调用视觉模型moondream
  • 配电自动化中的进线监控技术
  • 第十五届蓝桥杯大赛软件赛省赛Java 大学 B 组(1、2题)
  • git Bash通过SSH key 登录github的详细步骤
  • 微服务学习-负载均衡器 LoadBalancer 实战
  • QT QTableWidget控件 全面详解
  • 【阿里云】使用docker安装nginx后可以直接访问
  • 用wordpress搭建跨境电商独立站后没有询盘该怎么办