【开源】WeGUI高效多色图形库

博主:旭日财富者旭日财富者 2025-12-31 3851

以下文章内容由CW32生态社区用户口服提供:

https://github.com/KOUFU-DIY/WeGui_RGB

WeGui是以高执行效率为特色以单色驱动为主的高效图形库, 功能与U8G2类似, 支持移植到各个平台, 支持OLED, 同时拓展支持了彩色屏。

本WeGUI已适配了武汉芯源CW32L012C8T6,DMA驱动后续会做增加。

wKgZPGlSDaaABcnqAAEb7gMGKIA045.jpg

WeGui内置高效SPI的TFT驱动, 不仅支持单色, 而且支持多色, 内置了1位色2位色和3位色可选, 颜色主题可以自定义。

wKgZPGlSDaeAa_lmAACX6PJY3Iw184.jpg

WeGui除了支持点线面和文字的支持外, 内置了简易的链表多级菜单demo

WeGui成立于2025年6月份, 起初WeGui只支持OLED屏幕, 随着作者更新, 现已支持各类TFT和灰度OLED, 在.h文件里轻松切换。

wKgZPGlSDaeAN8iAAACMHLJJXb0809.jpgwKgZO2lSDaeAC_rnAADhoDLSZR4122.jpg

展示一下OLED屏幕

wKgZPGlSDaiAek0RAAHNYDtJIjY143.jpg

随着使用屏幕分辨率的增大, 我们其实更关心RAM是否足够

目前 WeGui现已支持"全屏缓存"和"页缓存", 页缓存占用极低, 最低支持设置1行的缓存, 当然缓存越大刷新速度越快, 页缓存功能轻松应对各类大屏TFT, 在.h文件轻松切换xii安村驱动类型。

wKgZO2lSDamAf6W5AABYAInehW4258.jpg

为了快速上手, 作者对市面上CW32L012等几个品牌对各类屏幕做了大量的适配, 真正做到拿来即用, 驱动波形连续高效,有兴趣的可以更深入了解。

为了方便驱动学习, 作者也更新了直驱demo,

驱动代码直观,方便理解运作原理, 若无需菜单demo的也可以手搓直驱

wKgZPGlSDamAbWdXAACEfLzRYNo122.jpg

同时, 作者也制作了上位机, 轻松对UTF8文字进行取模

wKgZO2lSDamALvCXAACwVitKzAI714.jpgwKgZPGlSDaqAHR98AABCXuOvt7M068.jpg

作者悉心呵护的GUI, 也有自己的开发板, 因CW32L012C8与其他主流C8T6芯片都是PIN对PIN的, 可以直接通过锁紧座更换模块。

wKgZO2lSDaqABK03AADNkNHNCJk904.jpg

应网友要求, 现已支持了编码器,

高效的旋转编码器的代码, 只需1ms滴答查询即可, 基本不会有漏识别的问题, 简单高效的编码器代码效果如下

开发板其他芯片版本已经有了蜂鸣器可以播放一首周杰伦的《晴天》

wKgZPGlSDaqAa-WOAABroz9MSiU315.jpg

wKgZO2lSDaqAXxDfAAEP7pEO1ss079.jpg

开发板子上还支持了外挂falsh,作者本意是播放视频, 同时也做了一套视频压缩RLE算法取模工具,压缩后体积极低, 色彩量少的图片体积能压缩至本身的20%以下, 工具目前开源免费,也在逐步完善flash功能中,过后更新到GUI的demo上。

wKgZPGlSDauARLvsAABK5liFDXQ953.jpg

wKgZO2lSDauAH6FHAAGBvBAMMN0093.jpg

下方是粉丝网友的复刻

wKgZPGlSDayAduVmAABWEPwDp1k632.jpg

WeGui名称来源于作者在B站投稿了一些手搓单色屏幕gui的玩法的, 被网友催更开源,本着开源精神,在myGUI,meGUI,yourGUI各类主谓宾定语中选择了WeGui。

作者为爱发电,免费开源,欢迎测试反馈。

https://github.com/KOUFU-DIY/WeGui_RGB

wKgZO2lSDayADOJjAAAk8urjxD4013.jpg

下面介绍一下作者在适配WeGUI中使用CW32L012中发现的“彩蛋”

一般在低端小RAM单片机中,Flash指令读取是需要时间的,如果运行在24MHz以下,FLASH取指令可以做到0等待,在48MHz以下一般需要有1周期等待,72MHz要有2等待,依次类推,包括STM32F103也是需要Flash等待,因此FLASH读指令等待是非常占用运行时。

高端一些的单片机会把Flash读到RAM去运行,而消费级芯片往往没有如此大的RAM空间。

wKgZPGlSDayAIUA9AAAX0NzeMoQ685.jpg

为了解决这个代码运行效率的问题, CW32L012在硬件中内置了“指令预取”的黑科技, 原理是提前往flash后读取一片指令,当指令读连续的时候,运行效率约等于0等待。

wKgZO2lSDayAW9IiAAD9UAj_bm0379.jpg

开启指令预取之后,FPS飙到了123Hz!!有没有细心的玩家发现了该“彩蛋”?

wKgZPGlSDa2AMYFaAAAdovUy3l4397.jpg

审核编辑 黄宇