新手上路
- 积分
- 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,方便下一次接收,不然下次接收不了。
同样是新手,方知经验来之不易,贵在分享,希望能帮到你。 |
|