OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7355|回复: 5

ucgui的edit控件怎么实时显示数据?

[复制链接]

11

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-3-15
在线时间
0 小时
发表于 2014-4-23 08:54:33 | 显示全部楼层 |阅读模式
用UCGUI的EDIT控件怎么实时的显示数据,求指点?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

101

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1007
金钱
1007
注册时间
2015-7-26
在线时间
108 小时
发表于 2016-1-16 14:38:37 | 显示全部楼层
回复 支持 0 反对 1

使用道具 举报

11

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-3-15
在线时间
0 小时
 楼主| 发表于 2014-4-23 09:03:29 | 显示全部楼层
回复【楼主位】躺在天使的翅膀上:
---------------------------------
static void _cbCallback4(WM_MESSAGE * pMsg) { int NCode, Id; WM_HWIN hWin = pMsg->hWin; switch (pMsg->MsgId) {
 case WM_PAINT: break; 
case WM_INIT_DIALOG: InitDialog4(pMsg); break;
 case WM_TIMER:
EDIT_SetDecMode(WM_GetDialogI tem(hWin,GUI_ID_EDIT3),100,0,6553 6,2,0);//设置编辑框的十进制模式
EDIT_SetValue(WM_GetDialogItem( hWin,GUI_ID_EDIT3),(U32)DATA.aY ++);//设置编辑区当前的数值 break; case WM_KEY: switch(((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hWin, 1); break; case GUI_KEY_ENTER: GUI_EndDialog(hWin, 0); break; } break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); NCode = pMsg->Data.v;switch (NCode) { case WM_NOTIFICATION_RELEASED: //仅仅释放时才有反应 switch(Id) { case GUI_ID_BUTTON0:

FRAMEWIN_Delete(hWin); //删 除界面

GUI_CreateDialogBox(_aDialogCreat e1,GUI_COUNTOF(_aDialogCreate1) ,&_cbCallback1,0,0,0);//创建一个对话主界面) } // break; //case WM_NOTIFICATION_VALUE_CHAN GED: /* Value has changed */

// break;

} break; default: WM_DefaultProc(pMsg); } }我是将EDIT放在了WM_TIMER机制 下绘制。。但是不行,原来放在 WM_PAINT下也不行。。太痛苦了。
回复 支持 反对

使用道具 举报

16

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2013-11-23
在线时间
6 小时
发表于 2014-12-28 14:01:22 | 显示全部楼层
哥们,你问题解决了么
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-2-20
在线时间
0 小时
发表于 2015-5-6 20:53:08 | 显示全部楼层
首先我也是新手,这里分享下我的经验,本来是可以通过这两行函数来刷新EDIT框里的数值:
    EDIT_SetDecMode(WM_GetDialogItem(hWin,GUI_ID_EDIT0),100,0,65536,0,0);//设置十进制模式
     EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT0),320);//设置EDIT框里的数值,320可以使任意变量,我这里是常数320;
但是由于我的情况是ucgui通过UCGUIBUILDER建立了maintask();后程序会一直停留在GUI_ExecDialogBox这里面,等待触发动作即点击控件等动作来GUI_Exec;至于具体原理我也是模模糊糊的;所以没有触发是不会重绘敞口的(刷新数据的);
用硬件仿真器观察,程序进入GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0)后就再也没出来,
跟踪进入 GUI_ExecDialogBox发现程序在GUI_ExecCreatedDialog里没出来,再进入GUI_ExecCreatedDialog里发现程序在
  while (!DialogStatus.Done) {
    if (!GUI_Exec()) {
      GUI_X_WAIT_EVENT();      /* Wait for event (keyboard, mouse or whatever) */
    }
  }
程序在这里一直循环,不知道为什么。
所以重点解决方法来了:
我猜想可以通过单片机本身的中断来进入更新数据;可以使定时中断或者串口中断或其他中断,我这里用的是串口中断,串口中断usart.c(原子哥战舰板源程序)接受完数据后(我自己的任务需要)接受完标志USART_RX_STA|=0x8000后;调用这两个函数(要在usart.c用这两个函数就要在usart.h头文件包含gui和edit相关头文件),其中这个句柄WM_GetDialogItem(hWin,GUI_ID_EDIT0),我通过在maintask.c文件里先定义变量I16 jubing=0;jubing=WM_GetDialogItem(hWin,GUI_ID_EDIT0);来保存edit编辑框句柄,再在maintask.h头文件申明为外部共享变量extern I16 jubing;最后再包含在usar.h头文件中包含,那么就可以在usart.c串口中断里调用了。  
    EDIT_SetDecMode(jubing,100,0,65536,0,0);//对比上式,由于
     EDIT_SetValue(jubing,adate[0]*10+adate[1]);// 
    USART_RX_STA=0;//注意这一句在原子哥这里是用来表示接收状态标志被清除,本应该在主函数中调用,但由于我主函数中因为上述原因进不去,所以就再接收中断里接收完数据保存在adate【】数组中后并更新edit框后就将接收状态标志USART_RX_STA清0,方便下一次接收,不然下次接收不了。



回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-8-7
在线时间
4 小时
发表于 2019-8-22 16:37:38 | 显示全部楼层
111111111111111111111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-13 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表