返回列表 发新帖我要提问本帖赏金: 10.00元(功能说明)

[嵌入式linux] 基于STM32G0的低成本UI设计软件

[复制链接]
2811|0
 楼主| abner_ma 发表于 2023-2-27 19:55 | 显示全部楼层 |阅读模式
本帖最后由 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源文件。 默认实现了所有的回调函数,包括定时器、按键点击动作、进度条的改变事件等。
可以在对应的函数体内,添加自己的逻辑代码,实现各种操作




  1. #ifndef _LOGIC_MAIN_H_
  2. #define _LOGIC_MAIN_H_

  3. #include "context/guicontext.h"

  4. #define UI_WIDGET_MAIN_ArtText1             ((imagetext_t*)gui_context_find_widget(2))

  5. void ui_main_on_page_open(uint8_t page);

  6. /**
  7. * [url=home.php?mod=space&uid=247401]@brief[/url] 定时器回调接口
  8. * @param time   定时器周期,单位 ms
  9. * @param count  累计次数
  10. */
  11. void ui_main_on_timer(uint32_t millisecond, uint32_t count);

  12. /**
  13. * [url=home.php?mod=space&uid=247401]@brief[/url] 按钮点击事件回调接口
  14. * @param button   按钮控件指针
  15. * @param type     触摸事件类型
  16. */
  17. void ui_main_on_button_touch_event(button_t *button, touch_type_e type);

  18. /**
  19. * @brief 进度条回调接口
  20. * @param progress  进度条控件指针
  21. * @param val       进度值
  22. */
  23. void ui_main_on_progress_changed(progress_t *progress, uint16_t val);

  24. /**
  25. * @brief 动画播放结束回调接口
  26. * @param animation  动画控件指针
  27. */
  28. void ui_main_on_animation_play_end(animation_t *animation);

  29. #endif /*_LOGIC_MAIN_H_*/



  1. #include "logic/main.h"
  2. void ui_main_on_page_open(uint8_t page) {
  3. 页面打开的时候回调用这个页面,其中 page 是页面 id 号。
  4. 打开页面前的一些初始化可在此操作。
  5. }
  6. void ui_main_on_timer(uint32_t millisecond, uint32_t count) {
  7. 在 flyport/timer.c 中适配的定时器运行的时候这边会产生回调。其中
  8. millisecond 是间隔时间,count 是回调次数。也就是实际工作时间
  9. =millisecond*count
  10. }
  11. void ui_main_on_button_touch_event(button_t *button,
  12. touch_type_e type) {
  13. 触控按键的时候调用,button 是按键对应的控件名,可以通过
  14. logic/main.h 中的宏定义匹配按键。
  15. 如下是 main.h 中的内容。
  16. #define UI_WIDGET_MAIN_Animation1
  17. ((animation_t*)gui_context_find_widget(2))
  18. #define UI_WIDGET_MAIN_Button1
  19. ((button_t*)gui_context_find_widget(3))
  20. 代码可以描述为:
  21. if(button == UI_WIDGET_MAIN_Button1)
  22. 来指示按键按下的是 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

21ic小管家 打赏了 10.00 元 2023-03-13
理由:签约作者奖励

您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:项目经理
简介:资深嵌入式开发工程师

104

主题

191

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部