收藏 分享(赏)

mplab reg harmony 之学习篇(十五)--.pdf

上传人:kuailexingkong 文档编号:1603324 上传时间:2018-08-10 格式:PDF 页数:17 大小:1.34MB
下载 相关 举报
mplab reg harmony 之学习篇(十五)--.pdf_第1页
第1页 / 共17页
mplab reg harmony 之学习篇(十五)--.pdf_第2页
第2页 / 共17页
mplab reg harmony 之学习篇(十五)--.pdf_第3页
第3页 / 共17页
mplab reg harmony 之学习篇(十五)--.pdf_第4页
第4页 / 共17页
mplab reg harmony 之学习篇(十五)--.pdf_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、 1 MPLAB Harmony 之 学习 篇( 十五 )- 创建 基于 Harmony 的 Segger emWin 图形应用 _ Microchip Technology Inc. MCU32 产 品部 资 深应 用工程 师 李 建平 一、 简介: Segger 的 emWin 是嵌 入式系统应用里比较常用的图形开发平台,Microchip 的 MPLAB Harmony 免费提供了 Segger emWin 图形库给用户 ,帮助客户快速开发基于 PIC32 的低 成本图形应用方案。 关于 emWin 的详细信 息,可访问 https:/ 。 二、 硬件工 具和 软件 平台: 硬件: 1.

2、 PIC32MZ EF Starter Kit 2 2. MEB II 软件 : MPLAB-X: :v3.25 或者 更新 XC32 :v1.40 或者更新 Harmony :v1.07 或者更 新 三、 步骤: ( 一) , 建立 基于 Harmony 的 项目,参 考MPLAB Harmony Harmony 之学 习篇 (三 ) 创 建 一个 Harmony 项目 记得根据 PIC32MZ EF Starter Kit 上的芯片在 MPLAB X 中选择项目的芯片。 3 ( 二) ,根 据硬 件配置 在 MHC 中选 择合 适的 BSP ( 三) ,在 MHC 中为 LCD 选择 合适

3、 的驱动 4 ( 四) ,在 MHC 中 选择 合适的 LCD 型号 ( 五) ,在 MHC 选择 I2C 驱动 用于 触摸芯 片数 据读取 。 5 ( 六) ,在 MHC 中 选择 触摸芯 片 。 ( 七) ,在 MHC 的 图形 库中选 择 Segger 库 。 ( 八) ,MHC 的 System Service/Interrupt 中选 择外部中 断 1 (触 摸芯 片的中断 输入 ) 。 6 ( 九) ,在 MHC 的 Pin Table 、Pin Setting 或者 Pin Diagram 里配置 INT1 到 pin23(RE8) 。 ( 十) , 在 MHC 的 System

4、 Service 中选 择触 摸服务。 (十一) , 在 MHC 的第 三方库中 选择 加载 Segger emWin 图形 库和 Segger 包 装。 (十二) , 使用 MHC 中的“Generate Code ” 按钮 产生代 码。 7 (十三) , 使用 GUIBuilder.exe 工 具编 辑要显 示的 页面 。 GUIBuilder.exe 工具已经在 Harmony 自带,它在 Harmony 的地址位于: C:microchipharmonyv1_09utilitiesseggeremwin , 该工具可以增加 需要显示的各种控 件,并对控件进行各种编辑。 (十四) , 使

5、用 GUIBuilder.exe 工 具产 生显示 页面 的 C 语 言文 件。 首先,新建窗口或者对话框 8 然后在编辑窗口点击需要的按键,文本等控件,添加在新建的窗口中。 重命名窗口和控件。 保 存,产 生 C 语言文件 , 产生的 C 语言文件名 是 : 窗口名+DLG.C ,C 语言文件产生的路 径可以通过 GUIBuilder.exe 同目录下的 GUIBuilder.ini 文件进行设置, 默认与 GUIBuilder.exe 路径相同。 9 使用同样的方法 , 可以在新的页面增加滑动块 , 下拉菜单和向前 , 向后按键等控件 , 并 产生 C 语言文件作为第二个页面的显示文件。

6、10 在第三个新建的页面里面增加单选按键和相关的文字注释,并产生 C 语言文件。 (十五) ,将 GUIBuilder.exe 产生 的 C 语 言文 件拷贝 到一 个新 建的目 录 , 并将该 目录 加 入 到工 程中。 11 (十六) , 在 app.h 中 增加 每个页 面的 索引, 用枚 举定义 。 typedef enum /* */ EMWIN_APP_SCREEN_HOME_PAGE = 0, /* */ EMWIN_APP_SCREEN_NUMBER_CHURNING, /* */ EMWIN_APP_SCREEN_TEXT_ALIGNMENT, /* */ EMWIN_APP

7、_SCREEN_END, 12 EMWIN_APP_SCREEN_ID; (十七) ,在 app.h 中 增加 页面初 始化 的申明 。 void APP_ScreenInitialize( void ); (十八) ,在 app.h 中增 加每个页 面创 建函数 的声 明,这 些函 数都是 由 GUIBuilder.exe 产 生的 ,包含 在每 个页面 的 C 语 言文 件中。 WM_HWIN CreateHomePage(void); WM_HWIN CreateNumberChurning(void); WM_HWIN CreateTextAlignment(void); (十九) 在

8、 app.c 中 增加页 面创建 函数 的数组 , 注 意数组 中函 数的顺 序应 该与页 面的 枚 举 索引 保持一 致。 / EMWIN USER START (Mandatory add screens here) EMWIN_GUI_SCREEN_CREATE emWinScreenCreate EMWIN_GUI_NUM_SCREENS = CreateHomePage, CreateNumberChurning, CreateTextAlignment ; / EMWIN USER END ( 二十) 在 app.c 中 增加页 面初始 化函 数 。 void APP_Screen

9、Initialize ( void ) GUI_SetBkColor(GUI_BLACK); GUI_Clear(); ( 二 十一) 在 app.c 中的 增加 Segger 库的 初 始化函 数。 这些函数的功能包括: 1 , 创建触摸消息; emWin_TouchMailBoxCreate(); 2 , 注册页面初始化函数; emWin_GuiScreenInitializeRegister( APP_ScreenInitialize ); 13 3 , 注册页面创建函数; emWin_GuiScreenRegister( screenCount, emWinScreenCreatesc

10、reenCount); 4 , 设置启动页面。 emWin_GuiStartScreenSet( EMWIN_APP_SCREEN_HOME_PAGE ); 将这些函数增加在函数 APP_Initialize 中的位 置如下: void APP_Initialize ( void ) int32_t screenCount = 0; /* Place the App state machine in its initial state. */ appData.state = APP_STATE_INIT; / EMWIN USER START (Mandatory) /* Create Mai

11、lBox for Touch Input */ emWin_TouchMailBoxCreate(); /* Register Screen Initialization */ emWin_GuiScreenInitializeRegister( APP_ScreenInitialize ); /* Register Screens */ for( screenCount = 0; screenCount EMWIN_GUI_NUM_SCREENS; screenCount+ ) emWin_GuiScreenRegister( screenCount, emWinScreenCreatesc

12、reenCount); /* set the start screen */ emWin_GuiStartScreenSet( EMWIN_APP_SCREEN_HOME_PAGE ); / EMWIN USER END 14 ( 二 十二) 在 产生 页面 文件 HomePageDLG.c 等 C 文件中增 加头 文件以 满足 Harmony 代码 编译 条件 。 / USER START (Optionally insert additional includes) #include “system_config.h“ #include “system_definitions.h“ / U

13、SER END 四、 在Segger 文件中增加消息 处理程序 : 在每个生成的页面 C 文件中都有一个 static void _cbDialog(WM_MESSAGE * pMsg) 函数, 这个函数负责显示该页面的内容 , 并对该页面的消息进行处理 , 通过对该函数的修改, 可以处理相应的消息,本文以处理一个触摸按键为例讲解一下如何添加消息函数。 /* * * _cbDialog */ static void _cbDialog(WM_MESSAGE * pMsg) const void * pData; WM_HWIN hItem; U32 FileSize; int NCode; i

14、nt Id; / USER START (Optionally insert additional variables) / USER END switch (pMsg-MsgId) case WM_INIT_DIALOG: / / Initialization of HomePage / hItem = pMsg-hWin; FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); FRAMEWIN_SetText(hItem, “Home“); FRAMEWIN_SetFont(hItem, GUI_FONT_13B_1)

15、; FRAMEWIN_SetTitleHeight(hItem, 20); / / Initialization of HomeNext 15 / hItem = WM_GetDialogItem(pMsg-hWin, ID_BUTTON_0); BUTTON_SetText(hItem, “Next“); BUTTON_SetFont(hItem, GUI_FONT_13B_1); / / Initialization of SEGGERLogo / hItem = WM_GetDialogItem(pMsg-hWin, ID_IMAGE_0); pData = _GetImageById(

16、ID_IMAGE_0_IMAGE_0, IMAGE_SetBMP(hItem, pData, FileSize); / / Initialization of Powered by / hItem = WM_GetDialogItem(pMsg-hWin, ID_TEXT_0); TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); TEXT_SetFont(hItem, GUI_FONT_13B_1); / / Initialization of emWin / hItem = WM_GetDialogItem(pMsg-hWi

17、n, ID_TEXT_1); TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); TEXT_SetFont(hItem, GUI_FONT_13B_1); / / Initialization of HarmonyLogo / hItem = WM_GetDialogItem(pMsg-hWin, ID_IMAGE_1); pData = _GetImageById(ID_IMAGE_1_IMAGE_0, IMAGE_SetBMP(hItem, pData, FileSize); / USER START (Optionally

18、 insert additional code for further widget initialization) / USER END break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg-hWinSrc); NCode = pMsg-Data.v; switch(Id) case ID_BUTTON_0: / Notifications sent by HomeNext switch(NCode) 16 case WM_NOTIFICATION_CLICKED: / USER START (Optionally insert code for

19、reacting on notification message) / USER END break; case WM_NOTIFICATION_RELEASED: / USER START (Optionally insert code for reacting on notification message) emWin_GuiScreenChange(EMWIN_APP_SCREEN_NUMBER_CHURNING); / USER END break; / USER START (Optionally insert additional code for further notific

20、ation handling) / USER END break; / USER START (Optionally insert additional code for further Ids) / USER END break; / USER START (Optionally insert additional message handling) / USER END default: WM_DefaultProc(pMsg); break; 注意:增加用户代码的 时候,需要将代码增加在指定的用户代码位置: / USER START (Optionally insert addition

21、al includes) / USER END 这样就可以保持 GUIBuilder.exe 所需要的文件格式,该 C 语言文件在增加代码以后仍然 可以使用 GUIBuilder.exe 打开和编辑。 五、 总结: 本文介绍了如何基于 Harmony 创建一个 Segger emWin 的图形应用 , 并简单介绍了如何 基于 Segger emWin 配套 的图形库的工具进行窗口创建、添加控件以及生成可集成到 Harmony 框架里的应用 代码 ; 然后应用层简单的添加一些代码即完成一个完整的 emWin 图形应用,包括如何添加图形控件所产生事件的处理程序。 17 六、 附件: MHGC+Segger.zip

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报