本帖最后由 abner_ma 于 2023-2-27 19:56 编辑
#申请原创# 项目开发,基于STM32+flash做GUI,发现一个比较不错的GUI设计软件:FlyThings Lite,FlyThings Lite 等价于 FlyThings for MCU。它是 FlyThings 为 MCU 提供的无操作系统简化版本。 超低成本界面系统。低于 2K 的 RAM,16KFlash的硬件资源消耗。使用 FlyThingsLite IDE 开发工具快速设计界面。支持 ZKBITMAP 高达 90%压缩率的 BITMAP 编解码算法。Opencpu 的模式,更便于用户使用,相比传统串口屏直接节省一个 MCU。如果用STM32高性能MCU加持FlyThings Lite,GUI更加绚丽!
适配不同MCU平台:
软件接口:
src/logic 目录下的文件每个界面都会对应一个 c 文件如 main.c。
每一个UI文件都会在logic文件夹下生成同名的头文件及.c源文件。 默认实现了所有的回调函数,包括定时器、按键点击动作、进度条的改变事件等。
可以在对应的函数体内,添加自己的逻辑代码,实现各种操作
- #ifndef _LOGIC_MAIN_H_
- #define _LOGIC_MAIN_H_
- #include "context/guicontext.h"
- #define UI_WIDGET_MAIN_ArtText1 ((imagetext_t*)gui_context_find_widget(2))
- void ui_main_on_page_open(uint8_t page);
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] 定时器回调接口
- * @param time 定时器周期,单位 ms
- * @param count 累计次数
- */
- void ui_main_on_timer(uint32_t millisecond, uint32_t count);
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] 按钮点击事件回调接口
- * @param button 按钮控件指针
- * @param type 触摸事件类型
- */
- void ui_main_on_button_touch_event(button_t *button, touch_type_e type);
- /**
- * @brief 进度条回调接口
- * @param progress 进度条控件指针
- * @param val 进度值
- */
- void ui_main_on_progress_changed(progress_t *progress, uint16_t val);
- /**
- * @brief 动画播放结束回调接口
- * @param animation 动画控件指针
- */
- void ui_main_on_animation_play_end(animation_t *animation);
- #endif /*_LOGIC_MAIN_H_*/
- #include "logic/main.h"
- void ui_main_on_page_open(uint8_t page) {
- 页面打开的时候回调用这个页面,其中 page 是页面 id 号。
- 打开页面前的一些初始化可在此操作。
- }
- void ui_main_on_timer(uint32_t millisecond, uint32_t count) {
- 在 flyport/timer.c 中适配的定时器运行的时候这边会产生回调。其中
- millisecond 是间隔时间,count 是回调次数。也就是实际工作时间
- =millisecond*count
- }
- void ui_main_on_button_touch_event(button_t *button,
- touch_type_e type) {
- 触控按键的时候调用,button 是按键对应的控件名,可以通过
- logic/main.h 中的宏定义匹配按键。
- 如下是 main.h 中的内容。
- #define UI_WIDGET_MAIN_Animation1
- ((animation_t*)gui_context_find_widget(2))
- #define UI_WIDGET_MAIN_Button1
- ((button_t*)gui_context_find_widget(3))
- 代码可以描述为:
- if(button == UI_WIDGET_MAIN_Button1)
- 来指示按键按下的是 button1.
UI框架回调接口的实现文件,包含了所有回调函数的实现,有兴趣可以查看,不要修改。
[code]#include "context/guicontext.h"
#include "logic/main.h"
#include "logic/main01.h"
#include "logic/main02.h"
#include "logic/main03.h"
#include "logic/main04.h"
#include "logic/main05.h"
#include "logic/main06.h"
/**
* @brief 定时器回调接口
* @param millisecond 定时器周期,单位 ms
* @param count 累计次数
*/
void on_timer(uint32_t millisecond, uint32_t count) {
typedef void (*Callback)(uint32_t millisecond, uint32_t count);
const Callback callbacks[] = {
ui_main_on_timer,
ui_main01_on_timer,
ui_main02_on_timer,
ui_main03_on_timer,
ui_main04_on_timer,
ui_main05_on_timer,
ui_main06_on_timer
};
(callbacks[gui_context_get_current_page()])(millisecond, count);
}
/**
* @brief 页面打开回调接口
* @param page 页面ID
*/
void on_page_open(uint8_t page) {
typedef void (*Callback)();
const Callback callbacks[] = {
ui_main_on_page_open,
ui_main01_on_page_open,
ui_main02_on_page_open,
ui_main03_on_page_open,
ui_main04_on_page_open,
ui_main05_on_page_open,
ui_main06_on_page_open
};
(callbacks
|