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所添加的其他代码。


猜你喜欢

转载自blog.csdn.net/freiheit_zz/article/details/71055858