完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在发这贴之前是搜索了的 ,但是遇到这个问题的基本都没有解决的。所以我再发帖求助。就是我使用ucgui的创建一个全屏的窗口,其中有一个edit控件是来用于获取ad采集的数据的(ad采集部分已经做了一个任务执行的)。界面由一个触摸的按钮来触发采集ad数据,但是现在做出来的效果是需要按一下它才会显示一次数据,指导下次再按才会有新的数据显示。。我想做的是按一次就可以开始实时的显示ad采集的数据。这个要怎么做?
|
|
相关推荐
30个回答
|
|
我自己想到办法解决了,你的根本就行不通。不过还是谢谢回复。需要实现的可以找我
|
|
|
|
帮顶....
|
|
|
|
发一个重绘edit的消息
|
|
|
|
我试过这个方法 但是还是不行的
|
|
|
|
|
|
|
|
你说的采样是直接重绘窗口么?使用WM_Paint() ? 但是我测试后是不行的,很早就验证过的了。我是 使用任务不断改变数据的
|
|
|
|
获取Edit的句柄,然后调用API设置新的数据。
|
|
|
|
就还是那个消息里面? 在case WM_PAINT: hObj = WM_GetDialogItem(hWin, GUI_ID_EDIT6); 不就是这样么? 结果是不行的
EDIT_SetText(hObj,allcount); |
|
|
|
你有用WM_InvalidateWindow(hObj);让EDIT重绘么
|
|
|
|
没有先让其无效化。。
|
|
|
|
那就是还要在case WM_PAINT:的消息中,先让其无效化?
|
|
|
|
重绘EDIT不用无效了吧
|
|
|
|
首先我也是新手,这里分享下我的经验,本来是可以通过这两行函数来刷新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,方便下一次接收,不然下次接收不了。 同样是新手,方知经验来之不易,贵在分享,希望能帮到你。 |
|
|
|
呵呵,用定时器啊!
|
|
|
|
|
|
|
|
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); } |
|
|
|
switch (pMsg->MsgId) {
case WM_TIMER: GY953_Data(); Caculate_GY953(pMsg); WM_RestartTimer(pMsg->Data.v, 100); break; |
|
|
|
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 */ |
|
|
|
视屏传不上,发个图片给你吧。
|
|
|
|
只有小组成员才能发言,加入小组>>
771 浏览 0 评论
1146 浏览 1 评论
2527 浏览 5 评论
2858 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1057浏览 3评论
189浏览 2评论
453浏览 2评论
365浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
449浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 03:54 , Processed in 1.749740 second(s), Total 117, Slave 96 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号