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

U8G2在PC端模拟(C语言版本)

前提:
电脑已经准备好mingw编译器环境,已经加入环境变量.
测试方法: window下打开cmd,输入gcc -v 会有信息打印.

u8g2

u8g2官方支持sdl2接口,已经做好了适配. 所以只需要在使用的开发环境配置好SDL2路径即可.

sdl2和u8g2的适配主要在两个文件内,分别是u8x8_d_sdl_128x64.c, u8x8_sdl_key.c.主要看第一个文件.
下面主要是u8x8_d_sdl_128x64.c的部分内容.

int u8g_sdl_multiple = 3;  static void u8g_sdl_init(int width, int height)
{// 省略部分内容u8g_sdl_color[0] = SDL_MapRGB( u8g_sdl_screen->format, 0, 0, 0 );u8g_sdl_color[1] = SDL_MapRGB( u8g_sdl_screen->format, 255, 255, 0);u8g_sdl_color[2] = SDL_MapRGB( u8g_sdl_screen->format, 100, 100, 100 );u8g_sdl_color[3] = SDL_MapRGB( u8g_sdl_screen->format, 255, 255, 255 );u8g_sdl_color[4] = SDL_MapRGB( u8g_sdl_screen->format, 0, 0, 0 );// 省略部分内容}

经过实际测试 u8g_sdl_color[0]为背景色,u8g_sdl_color[3]为前景色.其他暂时没发现作用.

SDL2

在这里插入图片描述
下载SDL2压缩包,解压后把内部的x86_64-w64-mingw32直接粘贴到mingw文件夹内,注意mingw文件夹内也有一个x86_64-w64-mingw32文件夹,但是粘贴时不会覆盖任何文件。

下载U8G2源码,然后把CSRC文件夹拖入到新的工程,创建main.c,输入如下内容.
例子是参考:u8g2电脑模拟器里面的

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

然后我用的是vscode + mingw.

c_cpp_properties.json

c_cpp_properties.json文件如下所示

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\x86_64-w64-mingw32\\include\\**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.19041.0","compilerPath": "C:/x86_64-8.1.0-release-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe","cStandard": "c99","cppStandard": "c++11","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}

要把配置中的"C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\x86_64-w64-mingw32\\include\\**"替换为你自己的路径.该文件夹如下所示.
在这里插入图片描述

launch.json

文件内容如下所示

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "C/C++: gcc.exe 生成活动文件","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "gdb","miDebuggerPath": "C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe","logging": {"engineLogging": true,"trace": true,"traceResponse": true,},"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Force breakpoint sync","text": "set breakpoint pending on",  // 允许挂起断点"ignoreFailures": false}],"preLaunchTask": "C/C++: gcc.exe 生成活动文件",}]
}

同样的把上述关于路径相关的都替换为自己的路径.

task.json

{"tasks": [{"type": "cppbuild","label": "C/C++: gcc.exe 生成活动文件","command": "C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe","args": ["-fdiagnostics-color=always","-g","${fileDirname}\\*.c","${fileDirname}\\csrc\\*.c","-IC:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\include\\SDL2","-L",  // 在库文件的搜索路径列表中添加dir目录,"C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\x86_64-w64-mingw32\\bin","-lSDL2","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {// "cwd": "C:\\x86_64-8.1.0-release-posix-seh-rt_v6-rev0\\mingw64\\bin""cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "调试器生成的任务。"}],"version": "2.0.0"
}

同样的把上述关于路径相关的都替换为自己的路径.

上面的配置文件和参考中的makefile编译参数基本一致.

配置后效果如下所示

在这里插入图片描述

相关文章:

  • 【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
  • Swift闭包(Closure)深入解析与底层原理
  • Java—— 常见API介绍 第五期
  • 什么是非关系型数据库
  • Redis的主从模式和哨兵模式
  • 【网络】MQTT协议
  • NLP系列【自然语言处理的深度学习模型综述】
  • 水池水位自动控制器如何征服污水水池?
  • c#加密证件号的中间部分,改为*号
  • Redis高频面试题——String对象
  • [ESP-IDF]:esp32-camera 使用指南 ESP32S3-OV2640 用例测试
  • 优化非线性复杂系统的参数
  • Linux基础IO(十一)之动态库(基础IO的最后一篇啦!)
  • CentOS系统防火墙服务介绍
  • 发放优惠券
  • 初窥Java内存模型(JMM)
  • 精益数据分析(24/126):聚焦第一关键指标,驱动创业成功
  • 边界凸台建模与实例
  • PGSql查看表结构以及注释信息
  • NAT穿透
  • 识味顺德︱顺德菜的醉系列与火滋味
  • 大家聊中国式现代化|邓智团:践行人民城市理念,开创人民城市建设新局面
  • 税务部门曝光3起通过拆分经营骗享小规模纳税人税费优惠偷税案件
  • 美施压拉美国家选边站队,外交部:搞阵营对抗注定失败
  • 央行研究局局长答澎湃:持续优化跨境金融服务政策工具箱,有效支持企业走出去
  • 美国那点事|特朗普的“刀”砍向国务院,美国霸权迎来历史拐点?