{"id":23113212,"url":"https://github.com/erbws/easy-ui","last_synced_at":"2025-07-07T06:38:31.245Z","repository":{"id":153839855,"uuid":"481136670","full_name":"ErBWs/Easy-UI","owner":"ErBWs","description":"An embedded menu framework based on linked list, with easy item registration method 链表式嵌入式菜单框架，具有极简的条目注册方法","archived":false,"fork":false,"pushed_at":"2024-11-26T08:29:18.000Z","size":516,"stargazers_count":178,"open_issues_count":1,"forks_count":38,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-24T17:04:28.662Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.bilibili.com/video/BV1pT411y7gc/","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ErBWs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-13T08:37:43.000Z","updated_at":"2025-05-23T12:34:28.000Z","dependencies_parsed_at":"2024-11-26T09:24:35.700Z","dependency_job_id":"30c2ebcf-166a-49bf-9f5f-6ecb521586fd","html_url":"https://github.com/ErBWs/Easy-UI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ErBWs/Easy-UI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErBWs%2FEasy-UI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErBWs%2FEasy-UI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErBWs%2FEasy-UI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErBWs%2FEasy-UI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ErBWs","download_url":"https://codeload.github.com/ErBWs/Easy-UI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ErBWs%2FEasy-UI/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264029608,"owners_count":23546501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-17T02:45:26.136Z","updated_at":"2025-07-07T06:38:31.225Z","avatar_url":"https://github.com/ErBWs.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Easy-UI v1.5b\n\n基于魔改的逐飞屏幕驱动，拙劣地模仿了稚晖君的 [MonoUI](https://www.youtube.com/watch?v=44RmDMXcU9s\u0026ab_channel=%E7%A8%9A%E6%99%96%E5%90%9B) 实现方式，参考了 [createskyblue](https://gitee.com/createskyblue) / [OpenT12 ](https://gitee.com/createskyblue/OpenT12)项目UI所编写的一个UI。其中的按键库参考了 [Zhewana](https://github.com/Zhewana) / [CommonKey](https://github.com/Zhewana/CommonKey) 开源按键库，该按键库的链表结构给了我很大的启发。\n\n\u003e 本来想重构一下做个v1.6，可惜我太懒了，v1.5b大概率是最终版本了orz\n\n# Easy-UI v1.5se\n\n基于逐飞屏幕库，不再需要魔改屏幕库；删去所有动画，仅保留框架，专为智能车竞赛设计的通用版本。\n\n目的是为了解决正常菜单开发中需要为每个条目单独写很多代码，删减菜单内容会非常耗时。\n\n推荐使用 6x8 字体大小获得更好的体验。\n\n## 样例(20240414更新：现已完全开源！)\n\n[点这里](./3.Example/menu.c)\n\n抱歉过了这么久才完整开源，总之开源了！\n\n使用IPS096屏幕，参考逐飞库修改而来，同时更新UI使用的CH32V307VCT6芯片掉电存储方案。\n\n实际菜单应用可见[十八届智能车单车开源库](https://github.com/ErBWs/CH32-Bike-Overland)\n\n## 实现方式浅析\n\n### 框架实现\n\n菜单页面、项目、按键实现均采用**链表**方式，理论可无限扩展；\n\n`AddItem` / `AddPage` 采用**可变参数函数**实现，实现输入不同`func`时获取不同的后续参数以初始化菜单。\n\n### 屏幕驱动魔改 / 掉电存储\n\n在逐飞的IPS114屏幕驱动基础上增加**缓冲区**，删除断言函数改为`break`处理；\n\n参照`u8g2`增加部分显示函数，如`绘制圆角方框`等；\n\n增加可设置颜色模式，支持正常与异或绘制，用以绘制反色指示器等；\n\n每次系统初始化时判断`flash`内相应区域是否为空，若非空则读取一次数据。\n\n\u003e ‼️每次增减菜单结构请先**擦除全片**再进行烧录\n\n## 相对MonoUI的一些更改\n\n### 进度条\n\n为了实现变量值修改时可**更改步长**，适配不同数量按键时统一的一套**保存/放弃修改**操作，我放弃了进度条的实现，更改后界面如下：\n\n![](4.Photos/6.ChangeValue.jpg)\n\n### 导航条\n\n导航条原来是显示该页面所具有的**栏目数量及当前所在栏目**，但若**栏目众多**或**屏幕像素高度 / 栏目数量**的结果不为整数时出来的效果我感觉不尽如人意，因此我将其更改为与反色指示器具有相同的位置计算，仅显示**当前屏幕上指示器所在位置**，也在一定程度上方便了在宽屏上，使用者一一对应左侧标题右侧状态的难易度。\n\n## 部分菜单界面一览\n\n### 初始界面\n\n![](4.Photos/1.Welcome.jpg)\n\n### 主界面\n\n![](4.Photos/2.Main.jpg)\n\n### 多选框界面\n\n![](4.Photos/3.Checkbox.jpg)\n\n### 单选框界面（同一时刻只有一个能被选中）\n\n![](4.Photos/4.RadioButton.jpg)\n\n### 开关界面\n\n![](4.Photos/5.Switch.jpg)\n\n### 消息框绘制\n\n![](4.Photos/7.MessageBox.jpg)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferbws%2Feasy-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferbws%2Feasy-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferbws%2Feasy-ui/lists"}