OpenEdv-开源电子网

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

我搜索了相关的有,但是都没有解决的---关于使用ucgui的edit控件实时显示数据的问题?

[复制链接]

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
发表于 2015-2-9 16:49:33 | 显示全部楼层 |阅读模式
5金钱
我在发这贴之前是搜索了的 ,但是遇到这个问题的基本都没有解决的。所以我再发帖求助。就是我使用ucgui的创建一个全屏的窗口,其中有一个edit控件是来用于获取ad采集的数据的(ad采集部分已经做了一个任务执行的)。界面由一个触摸的按钮来触发采集ad数据,但是现在做出来的效果是需要按一下它才会显示一次数据,指导下次再按才会有新的数据显示。。我想做的是按一次就可以开始实时的显示ad采集的数据。这个要怎么做?

最佳答案

查看完整内容[请看2#楼]

回复【12楼】wupaul2001: --------------------------------- 我自己想到办法解决了,你的根本就行不通。不过还是谢谢回复。需要实现的可以找我
希望与更多的电子爱好者交朋友
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-2-9 16:49:34 | 显示全部楼层
回复【12楼】wupaul2001:
---------------------------------
我自己想到办法解决了,你的根本就行不通。不过还是谢谢回复。需要实现的可以找我
希望与更多的电子爱好者交朋友
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-2-9 22:26:58 | 显示全部楼层
帮顶....
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-4-17
在线时间
3 小时
发表于 2015-2-11 01:19:38 | 显示全部楼层
发一个重绘edit的消息
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-2-25 14:55:58 | 显示全部楼层
回复【3楼】wupaul2001:
---------------------------------
我试过这个方法 但是还是不行的
希望与更多的电子爱好者交朋友
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-2-27 09:08:17 | 显示全部楼层
此问题已回答过多次,给你2种建议:

1、窗口定时器刷新;
2、带系统则跨任务更新数据,前后台则在窗口回调中采样。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-3-2 11:57:49 | 显示全部楼层
回复【5楼】styleno1:
---------------------------------
你说的采样是直接重绘窗口么?使用WM_Paint() ? 但是我测试后是不行的,很早就验证过的了。我是 使用任务不断改变数据的
希望与更多的电子爱好者交朋友
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-2 16:01:01 | 显示全部楼层
回复【6楼】pergon:
---------------------------------
获取Edit的句柄,然后调用API设置新的数据。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-3-5 15:05:02 | 显示全部楼层
回复【7楼】styleno1:
---------------------------------
就还是那个消息里面? 在case WM_PAINT:    hObj = WM_GetDialogItem(hWin, GUI_ID_EDIT6);  不就是这样么?  结果是不行的
         EDIT_SetText(hObj,allcount);
希望与更多的电子爱好者交朋友
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-4-17
在线时间
3 小时
发表于 2015-3-5 18:54:40 | 显示全部楼层
你有用WM_InvalidateWindow(hObj);让EDIT重绘么
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-3-6 10:07:16 | 显示全部楼层
回复【9楼】wupaul2001:
---------------------------------
没有先让其无效化。。
希望与更多的电子爱好者交朋友
回复

使用道具 举报

9

主题

66

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2014-8-19
在线时间
13 小时
 楼主| 发表于 2015-3-6 10:08:14 | 显示全部楼层
回复【9楼】wupaul2001:
---------------------------------
那就是还要在case WM_PAINT:的消息中,先让其无效化?
希望与更多的电子爱好者交朋友
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-4-17
在线时间
3 小时
发表于 2015-3-6 17:14:07 | 显示全部楼层
重绘EDIT不用无效了吧
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-2-20
在线时间
0 小时
发表于 2015-5-6 20:57:49 | 显示全部楼层
首先我也是新手,这里分享下我的经验,本来是可以通过这两行函数来刷新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);//对比上式,jubing=WM_GetDialogItem(hWin,GUI_ID_EDIT0);
     EDIT_SetValue(jubing,adate[0]*10+adate[1]);// adate是我自己定义的数组用来保存串口接收的数据
    USART_RX_STA=0;//注意这一句在原子哥这里是用来表示接收状态标志被清除,本应该在主函数中调用,但由于我主函数中因为上述原因进不去,所以就再接收中断里接收完数据保存在adate【】数组中后并更新edit框后就将接收状态标志USART_RX_STA清0,方便下一次接收,不然下次接收不了。
同样是新手,方知经验来之不易,贵在分享,希望能帮到你。
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:09:25 | 显示全部楼层
呵呵,用定时器啊!
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:09:45 | 显示全部楼层
发个视屏给你看看。
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:17:24 | 显示全部楼层
oid Caculate_GY953(WM_MESSAGE * pMsg)
{
  char buf[10];
  WM_HWIN hWin = pMsg->hWin;

  sprintf(buf, 
          "%5.2f", (float)((ROLL*360)/65535));
  Xvalues = (float)((ROLL*360)/65535) ;
  EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0), buf);
    
  sprintf(buf, 
          "%5.2f", (float)((PITCH*360)/65535));
  Yvalues = (float)((PITCH*360)/65535) ;
  EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT1), buf); 

    sprintf(buf, 
          "%5.2f", (float)((YAW*360)/65535));
  Zvalues = (float)((YAW*360)/65535) ;
  EDIT_SetText(WM_GetDialogItem(hWin,GUI_ID_EDIT2), buf);
}
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:17:43 | 显示全部楼层
switch (pMsg->MsgId) {
case WM_TIMER:
           GY953_Data();
           Caculate_GY953(pMsg);
           WM_RestartTimer(pMsg->Data.v, 100);
         break;
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:23:03 | 显示全部楼层
hPage0 = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_UNATTACHED, 0, 0);
  MULTIPAGE_AddPage(hWin, hPage0, "功能窗口");
  hPage1 = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), _cbDialog2, WM_UNATTACHED, 0, 0);
  MULTIPAGE_AddPage(hWin, hPage1, "设置窗口");
MULTIPAGE_SetFont(hWin,&GUI_FontHZ16);
MULTIPAGE_SetTextColor(hWin,GUI_MAGENTA,1);
 WM_CreateTimer(WM_GetClientWindow(hPage0),    /* 接受信息的窗口的句柄 */
 0,                          /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
 100,                         /* 周期,此周期过后指定窗口应收到消息*/
 0);                         /* 留待将来使用,应为0 */
回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:51:15 | 显示全部楼层
视屏传不上,发个图片给你吧。

回复

使用道具 举报

14

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2014-1-14
在线时间
18 小时
发表于 2015-5-6 21:52:39 | 显示全部楼层
图片反了,三个EDIT窗口动态显示三轴传感器的值,时间窗口显示时间和日期。
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-6-30
在线时间
5 小时
发表于 2016-7-16 17:10:13 | 显示全部楼层
physh 发表于 2015-5-6 21:52
图片反了,三个EDIT窗口动态显示三轴传感器的值,时间窗口显示时间和日期。

求程序啊
回复

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2016-8-17
在线时间
24 小时
发表于 2016-10-9 14:15:37 | 显示全部楼层
求解,怎么实现的数据更新
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-7-19
在线时间
3 小时
发表于 2016-10-9 17:16:05 | 显示全部楼层
楼主最后是怎么解决的,请赐教,谢谢!
回复

使用道具 举报

4

主题

66

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3324
金钱
3324
注册时间
2016-11-9
在线时间
296 小时
发表于 2017-4-11 09:12:47 | 显示全部楼层
可以,正好遇到,
回复

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-4-14 11:17:44 | 显示全部楼层
获取句柄,让其无效化,这样就能重绘了。
本人交流群:136045527,欢迎各位大佬和萌新
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2016-5-31
在线时间
30 小时
发表于 2017-4-14 22:22:26 | 显示全部楼层
physh 发表于 2015-5-6 21:51
视屏传不上,发个图片给你吧。

求大神赐给程序
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2016-5-31
在线时间
30 小时
发表于 2017-4-15 15:41:40 | 显示全部楼层
楼主请问你怎么解决的呢,能否赐教一下,本人菜鸟一个
回复

使用道具 举报

7

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-12-27
在线时间
38 小时
发表于 2017-4-19 14:45:59 | 显示全部楼层
请问怎样才能让edit实时显示数据呢?你是怎么解决的?
回复

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-6-13
在线时间
10 小时
发表于 2017-6-29 16:11:11 | 显示全部楼层
本帖最后由 976657271 于 2017-6-30 10:48 编辑

http://bbs.elecfans.com/jishu_1111836_2_1.html#comment_top  用定时器解决看这个帖子
回复

使用道具 举报

41

主题

96

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2017-12-4
在线时间
208 小时
发表于 2018-4-12 16:03:51 | 显示全部楼层
physh 发表于 2015-5-6 21:17
switch (pMsg->MsgId) {
                case WM_TIMER:
       & ...

兄弟,我用的是UC/GUI3.90,本来也是想像你那样做一个定时器处理的,但是我的源码里根本就没有WM_RestartTimer()这个函数。你用的是UC/GUI?
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-8-8
在线时间
15 小时
发表于 2019-12-18 09:06:58 | 显示全部楼层
pergon 发表于 2015-2-9 16:49
回复【12楼】wupaul2001:
---------------------------------
我自己想到办法解决了,你的根本就行不通。不 ...

我想请教您一下,现在我想将ds18b20采集的数据显示在edit控件上,是加了操作系统了的,也能采集到数据,但是就是不能在edit控件上显示出来,请问您有好的建议吗
回复

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-10-17
在线时间
16 小时
发表于 2020-2-18 15:15:43 | 显示全部楼层
wupaul2001 发表于 2015-2-11 01:19
发一个重绘edit的消息

我直接用的WM_Paint();可是没反应怎么回事呀??
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2020-9-8
在线时间
27 小时
发表于 2021-10-25 16:06:28 | 显示全部楼层
physh 发表于 2015-5-6 21:52
图片反了,三个EDIT窗口动态显示三轴传感器的值,时间窗口显示时间和日期。

大佬你这个程序还有吗,新手想学习一下
回复

使用道具 举报

1

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2020-9-8
在线时间
27 小时
发表于 2021-11-15 10:23:36 | 显示全部楼层
physh 发表于 2015-5-6 21:52
图片反了,三个EDIT窗口动态显示三轴传感器的值,时间窗口显示时间和日期。

还能联系到大佬吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 17:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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