直接使用GUIBuilder生成的C文件中的Edit,大家会发现里面的数据是不会实时变化的,这样就需要稍微进行改动,使它以我们设定的时间间隔更新数据。
笔者使用的是DHT11传感器,在Edit中实时显示数据。传感器的数据使用全局变量share_resource_u8[],数组中的[0]和[1]分别是温度数据和湿度数据。总共分三步:
第一步:
// 在static void _cbDialog(WM_MESSAGE * pMsg)当中添加 switch (pMsg->MsgId) { case WM_TIMER: // GET_Data_DHT11(); //获得温湿度数据,在其他进程中完成,因此省略此段 DISPLAY_DATA_DHT11(pMsg); //更新Edit中 WM_RestartTimer(pMsg->Data.v, 100); break;
第二步:
/********************************************************************* * * _cbDialog */ void DISPLAY_DATA_DHT11(WM_MESSAGE *pMsg) { char temperature_s[10]; char humidity_s[10]; WM_HWIN hItem; WM_HWIN hWin = pMsg->hWin; /***** 温度数据 *******/ sprintf(temperature_s, "%d", share_resource_u8[0]); hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2); EDIT_SetText(hItem, temperature_s); EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); EDIT_SetFont(hItem, GUI_FONT_32_ASCII); /***** 湿度数据 *******/ sprintf(humidity_s, "%d", share_resource_u8[1]); hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3); EDIT_SetText(hItem, humidity_s); EDIT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER); EDIT_SetFont(hItem, GUI_FONT_32_ASCII); }
第三步:
/********************************************************************* * * ZZ_GUIBuilder */ WM_HWIN ZZ_GUIBuilder(void) { WM_HWIN hWin; hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0); WM_CreateTimer(WM_GetClientWindow(hWin), 0, 100, 0); //添加此段 return hWin; } // USER START (Optionally insert additional public code) // USER END /*************************** End of file ****************************/
第二版。更改了之前bug所添加的其他代码。