教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第50章(2021-10-01) - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

第50章       emWin6.x的AppWizard使用控件经典回调方式

本期教程为大家讲解emWin6.x的GUI开发工具AppWizard使用控件经典回调方式。这样我们就可以emWin的经典回调玩法和AppWizard很好的结合到一起。

目录

50.1 初学者重要提示

50.2 AppWizard创建界面

50.2.1        下载安装AppWizard

50.2.2        创建AppWizard工程

50.2.3 添加控件

50.2.4 设置默认的位图格式

50.2.5 运行AppWizard

50.2.6 导出AppWizard代码

50.3 AppWizard生成的VS工程使用VS2019运行方法

50.4 AppWizard创建的界面添加到工程

50.4.1        添加一批xxxx_Private.h文件到工程

50.4.2        添加AppWizard界面文件到工程

50.4.3        添加工程路径

50.4.4        修改程序

50.4.5        添加按钮回调函数消息

50.5 实验例程说明(RTOS)

50.6 实验例程说明(裸机)

50.7 总结


50.1 初学者重要提示

  1. 本章节主要为大家讲解如何像使用emWin经典回调方式一样玩AppWizard的消息处理。
  2. 使用的AppWizard版本一定要和emWin版本匹配,本章配套例子使用的emWin版本是V6.16。对应的AppWizard版本是V1.20,下载地址。
  3. AppWizard工程路径不支持中文,使用时特别注意。
  4. AppWizard生成的emWin6.x工程可以方便的融合之前的低版本emWin工程代码,在回调函数里面可以方便的添加之前基于窗口或者对话框创建的界面。

50.2 AppWizard创建界面

下面使用AppWizard创建界面,先让大家有个整体认识,方便后面章节的展开。注意,使用经典emWin回调消息处理,不需要使用AppWizard创建回调。

50.2.1        下载安装AppWizard

下载地址:AppWizard升级至V1.20(2021-03-16) - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz!http://www.armbbs.cn/forum.php?mod=viewthread&tid=105049 安装后效果如下:

50.2.2        创建AppWizard工程

选择Create new project:

下面要需要设置配置项,主要是Color format颜色格式别配置错了,要跟开发板emWin工程的颜色格式一致,我们这里设置为16位色,M565。

创建后效果如下:

50.2.3 添加控件

依次点击左上角的控件对象:Screen和Box:

设置背景色:

添加两个按钮控件和一个二维码:

50.2.4 设置默认的位图格式

点击菜单Edit -> Preferences:

由于我们前面设置的M565颜色格式,这里设置GUICC_M565选项即可:

这个设置很重要,否则很容易造成AppWizard生成的工程代码移植到板子上硬件异常。

50.2.5 运行AppWizard

点击下面这个小按钮可以运行设计的界面:

50.2.6 导出AppWizard代码

点击菜单File -> Export & Save即可导出:

导出文件在创建时设置的路径中。

50.3 AppWizard生成的VS工程使用VS2019运行方法

导出的VS工程文件位于如下路径:

运行后效果如下:

50.4 AppWizard创建的界面添加到工程

AppWizard生成界面代码后,将其添加到工程中。这个过程有几个注意事项,在下面步骤中会为大家说明。

50.4.1        添加一批xxxx_Private.h文件到工程

开发板的工程文件里面没有这些文件,需要大家从AppWizard工程路径:Simulation\GUI_Lib 里面复制到开发板工程路径\emWin\Include里面,下面是部分截图,详情看本章节配套的例子即可:

50.4.2        添加AppWizard界面文件到工程

方便起见,将AppWizard所有文件复制到开发板工程里面:

添加到工程的效果如下:

50.4.3        添加工程路径

仅添加一个路径选项即可:

50.4.4        修改程序

主要修改两个地方:

  • bsp.c文件将LCD背光点亮。
void bsp_Init(void)
{/* 省略未写 *//* 延迟200ms再点亮背光,避免瞬间高亮 */bsp_DelayMS(200); LCD_SetBackLight(255);
}
  • APPWConf.c文件

使能三缓冲,关闭文件系统。

/*********************************************************************
*
*       Multibuffering
*/
static U8 _MultibufEnable = 1;/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _InitText
*/
static void _InitText(void) {//// Empty, because application does not contain any text//
}/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       APPW_X_Setup
*/
void APPW_X_Setup(void) {APPW_SetpfInitText(_InitText);//APPW_X_FS_Init();APPW_MULTIBUF_Enable(_MultibufEnable);APPW_SetData(_apRootList, _NumScreens, _aVarList, _NumVars);
}

50.4.5        添加按钮回调函数消息

修改文件ID_SCREEN_00_Slots.c,使用emWin的经典回调方式,我们这里做了简单的LED闪烁和串口打印:

#include "Application.h"
#include "../Generated/Resource.h"
#include "../Generated/ID_SCREEN_00.h"
#include "bsp.h"/*** Begin of user code area ***/
/*** End of user code area ***//*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       cbID_SCREEN_00
*/
void cbID_SCREEN_00(WM_MESSAGE * pMsg) {int NCode, Id;switch (pMsg->MsgId){case WM_NOTIFY_PARENT:Id = WM_GetId(pMsg->hWinSrc);NCode = pMsg->Data.v;        switch (Id){case ID_BUTTON_00: switch(NCode) {case WM_NOTIFICATION_CLICKED:bsp_LedToggle(1);printf("按钮ID_BUTTON_00按下\r\n");break;case WM_NOTIFICATION_RELEASED:break;}break;case ID_BUTTON_01: switch(NCode) {case WM_NOTIFICATION_CLICKED:bsp_LedToggle(1);printf("按钮ID_BUTTON_01按下\r\n");break;case WM_NOTIFICATION_RELEASED:break;}break;}break;       }
}

通过前面这几步就完成了AppWizard的回调消息处理。

50.5 实验例程说明(RTOS)

配套例子:

V7-563_emWin6.x实验_AppWizard使用emWin经典回调(RTOS)

实验目的:

  1. 学习AppWizard控件回调消息。
  2. 点击第1个按钮可以实现LED1反转和串口打印。
  3. 点击第2个按钮也可以实现LED1反转和串口打印。

实验内容:

1、K1按键按下,串口或者RTT打印任务执行情况(串口波特率115200,数据位8,奇偶校验位无,停止位1)。

2、(1) 凡是用到printf函数的全部通过函数App_Printf实现。

(2) App_Printf函数做了信号量的互斥操作,解决资源共享问题。

3、默认上电是通过串口打印信息,如果使用RTT打印信息:

MDK AC5,MDK AC6或IAR通过使能bsp.h文件中的宏定义为1即可

#define Enable_RTTViewer  1

4、各个任务实现的功能如下:

App Task Start   任务 :启动任务,这里用作BSP驱动包处理。

App Task MspPro任务 :消息处理,这里用作LED闪烁。

App Task UserIF  任务 :按键消息处理。

App Task COM   任务 :暂未使用。

App Task GUI    任务 :GUI任务。

μCOS-III任务调试信息(按K1按键,串口打印):

RTT 打印信息方式:

程序设计:

任务栈大小分配:

μCOS-III任务栈大小在app_cfg.h文件中配置:

#define  APP_CFG_TASK_START_STK_SIZE                      512u

#define  APP_CFG_TASK_MsgPro_STK_SIZE                     2048u

#define  APP_CFG_TASK_COM_STK_SIZE                        512u

#define  APP_CFG_TASK_USER_IF_STK_SIZE                    512u

#define  APP_CFG_TASK_GUI_STK_SIZE                        2048u

任务栈大小的单位是4字节,那么每个任务的栈大小如下:

App Task Start   任务 :2048字节。

App Task MspPro任务 :8192字节。

App Task UserIF  任务 :2048字节。

App Task COM   任务 :2048字节。

App Task GUI    任务 :8192字节。

系统栈大小分配:

μCOS-III的系统栈大小在os_cfg_app.h文件中配置:

#define  OS_CFG_ISR_STK_SIZE                      512u

系统栈大小的单位是4字节,那么这里就是配置系统栈大小为2KB

emWin动态内存配置:

GUIConf.c文件中的配置如下:

#define EX_SRAM   1/*1 used extern sram, 0 used internal sram */#if EX_SRAM
#define GUI_NUMBYTES  (1024*1024*24)
#else
#define GUI_NUMBYTES  (100*1024)
#endif

通过宏定义来配置使用内部SRAM还是外部的SDRAM做为emWin的动态内存,当配置:

#define  EX_SRAM     1 表示使用外部SDRAM作为emWin动态内存,大小24MB。

#define  EX_SRAM     0 表示使用内部SRAM作为emWin动态内存,大小100KB。

默认情况下,本教程配套的所有emWin例子都是用外部SDRAM作为emWin动态内存。

emWin界面显示效果:

800*480分辨率界面效果。

50.6 实验例程说明(裸机)

配套例子:

V7-562_emWin6.x实验_AppWizard使用emWin经典回调(裸机)

实验目的:

  1. 学习AppWizard控件回调消息。
  2. 点击第1个按钮可以实现LED1反转和串口打印。
  3. 点击第2个按钮也可以实现LED1反转和串口打印。

emWin界面显示效果:

800*480分辨率界面效果。

emWin动态内存配置:

GUIConf.c文件中的配置如下:

#define EX_SRAM   1/*1 used extern sram, 0 used internal sram */#if EX_SRAM
#define GUI_NUMBYTES  (1024*1024*24)
#else
#define GUI_NUMBYTES  (100*1024)
#endif

通过宏定义来配置使用内部SRAM还是外部的SDRAM做为emWin的动态内存,当配置:

#define  EX_SRAM     1 表示使用外部SDRAM作为emWin动态内存,大小24MB。

#define  EX_SRAM     0 表示使用内部SRAM作为emWin动态内存,大小100KB。

默认情况下,本教程配套的所有emWin例子都是用外部SDRAM作为emWin动态内存。

50.7 总结

本章节主要是为大家讲解了AppWizard控件经典emWin回调消息处理,后续章节将深入为大家说明。

【第3版emWin教程】第50章 emWin6.x的AppWizard使用控件经典回调方式相关推荐

  1. 【第3版emWin教程】第49章 emWin6.x的AppWizard创建控件回调消息

    教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第50章(2021-10-01) - uCOS & uCGUI &am ...

  2. 【第3版emWin教程】第53章 emWin6.x的按钮Button控件

    教程不断更新中:链接 第53章       emWin6.x的按钮Button控件 本章节为大家讲解emWin支持的按钮控件,按钮控件还是非常实用的,实际项目中用到的地方很多,控件的本质就是窗口,或者 ...

  3. 【第3版emWin教程】第51章 emWin6.x的Window窗口控件

    教程不断更新中:链接 第51章       emWin6.x的Window窗口控件 本章节为大家讲解emWin6.x支持的窗口控件,窗口控件和前面讲的窗口本质上面是一样的,只不过这里是以控件的形式存在 ...

  4. 【第3版emWin教程】第48章 emWin6.x对话框基础知识

    教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第48章(2021-09-13) - uCOS & uCGUI &am ...

  5. 【第3版emWin教程】第45章 emWin6.x窗口管理器之定时器使用

    教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第48章(2021-09-13) - uCOS & uCGUI &am ...

  6. 【第3版emWin教程】第55章 emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果

    教程不断更新中:链接 第55章       emWin6.x按钮Button控件自定义回调函数,实现各种按钮效果 本章节为大家讲解按钮控件自定义回调函数,通过其回调函数就可以实现各种按钮效果.这方面的 ...

  7. 【第3版emWin教程】第42章 emWin6.x窗口管理器之回调消息类型

    教程不断更新中:第3版emWin教程和ThreadX GUIX教程开工,双管齐下,GUIX更新至第28章,emWin更新至第48章(2021-09-13) - uCOS & uCGUI &am ...

  8. 【第3版emWin教程】第34章 emWin6.x的AppWizard界面开发工具使用方法

    教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第34章       emWin6.x的AppWizard界面开 ...

  9. 【第3版emWin教程】第35章 emWin6.x的AppWizard中文实现方法

    教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第35章       emWin6.x的AppWizard中文实 ...

最新文章

  1. 列表-列表的排序和反转
  2. 阿里 DataX 增量同步 介绍与使用
  3. 声卡驱动正常但就是没有声音,驱动人生解决方案
  4. 编曲软件FL Studio 20.99中文版2023最新免费下载
  5. ceph osd学习小结
  6. 能测试快充真假的软件,ChargerLAB测试工具使用技巧:一键检测苹果数据线真伪...
  7. Apk脱壳圣战之—如何脱掉“梆梆加固”的保护壳
  8. 微信小程序 如何接入视频激励广告
  9. Python和R的GUI图形化编程与用户界面
  10. STM32与Flash AT45DB321D之间读写数据
  11. RK3568平台开发系列讲解(音视频篇)如何把音视频流进行网络传输?
  12. [问题/解决]Could not chdir to home directory /home/zwj: Permission denied
  13. R 语言 state 数据集的可视化
  14. 如何将手机投屏到windows10上?
  15. 商务通“隐形手机”牛皮轰轰可以休矣!
  16. 感受GSAT,挑战Samsung
  17. Redis深入学习(三)Redis数据类型选择和应用场景
  18. python文件如何打包生成.exe文件?(打包教程)
  19. android安卓平板刷机失败无法开机终极自救方法,【教程】 手机刷机失败无法开机自救方法...
  20. 巩固知识体系!西门子万人裁员:35岁之后找不到工作怎么办

热门文章

  1. 手机mysql数据库app下载安装_MySQL数据库的下载安装
  2. 思维模型 罗森塔尔效应
  3. 自动动锁螺丝机程序采用显控触摸屏加三菱FX3GA或者FX3U , 用PLC变址寄存器做配方,用D1000-D7999存储数据
  4. 企业办公共享文档用哪个软件好?
  5. [FAQ17853]M上默认接入点apn显示
  6. Unity Shader入门精要学习笔记 - 第14章 非真实感渲染
  7. 考研计算机南大和武大难度,全国高校考研录取难度排行榜,浙大第五、南大第十!武大掉出前十...
  8. 吉布斯采样——原理及matlab实现
  9. 用 Python 分析了 6000 款 App,看看哪些神器你还没用过?
  10. USB PD芯片HUSB361实现15W~65W高效低耗的快充电源设计