EmWin中Edit工具实时更新数据方法
直接使用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所添加的其他代码。
仅供参考,学习使用。
链接:https://pan.baidu.com/s/1tAS7_z49cZH4vIlZRsuRag 提取码:13bq
