OpenEdv-开源电子网

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

请问STEmwin显示数值Values是需要不断刷新的温度采集,怎么处理显示?

[复制链接]

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2016-6-23
在线时间
72 小时
发表于 2016-11-21 17:12:40 | 显示全部楼层 |阅读模式
1金钱
请问STEmwin显示数值Values是需要不断刷新的温度采集,怎么处理显示? 看到了官方给出的例程是显示一个变量是固定的值,那么如果温度传感器采集的温度 要求每秒刷新 显示一次 怎么处理呢?

最佳答案

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

[mw_shl_code=c,true]static void _cbStatus(WM_MESSAGE * pMsg) { int xSize, ySize; static uint8_t TempStr[50]; float CPU; RTC_TimeTypeDef RTC_TimeStructure; RTC_DateTypeDef RTC_DateStructure; uint8_t sec, min, hour; static WM_HTIMER hTimerTime; WM_HWIN hWin; hWin = pMsg->hWin; switch (pMsg->MsgId) { case WM_PRE_PAINT: //GUI_MULTIBUF_Begin(); break; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
395
金钱
395
注册时间
2016-8-18
在线时间
147 小时
发表于 2016-11-21 17:12:41 | 显示全部楼层
[mw_shl_code=c,true]static void _cbStatus(WM_MESSAGE * pMsg)
{
        int xSize, ySize;
        static uint8_t TempStr[50];
        float CPU;

        RTC_TimeTypeDef   RTC_TimeStructure;
        RTC_DateTypeDef   RTC_DateStructure;
        uint8_t sec, min, hour;

        static WM_HTIMER hTimerTime;
        WM_HWIN hWin;

        hWin = pMsg->hWin;
        switch (pMsg->MsgId)
        {
                case WM_PRE_PAINT:
                        //GUI_MULTIBUF_Begin();
                        break;
               
                case WM_POST_PAINT:
                        //GUI_MULTIBUF_End();
                        break;
               
                /* 创建窗口后为此窗口创建一个定时器 */
                case WM_CREATE:
                        hTimerTime = WM_CreateTimer(hWin, ID_TIMER_TIME, 1000, 0);
                        break;
               
                /* 窗口被删除的时候同时删除定时器 */
                case WM_DELETE:
                        WM_DeleteTimer(hTimerTime);
                        break;
               
                /* 定时器消息,定时器执行重绘消息 */
                case WM_TIMER:
                        WM_InvalidateWindow(hWin);
                        WM_RestartTimer(pMsg->Data.v, 0);
                        break;

                /* 收到USB插入的消息 */
                case WM_MSG_USB_STATUS_CHANGED:   
                        WM_InvalidateWindow(hWin);
                        break;

                /* 执行重绘 */
                case WM_PAINT:
                        xSize = WM_GetWindowSizeX(hWin);
                        ySize = WM_GetWindowSizeY(hWin);

                        /* 先绘制背景 */
                        GUI_SetColor(0x303030);
                        GUI_FillRect(0, 0, xSize , ySize - 3);
                        GUI_SetColor(0x808080);
                        GUI_DrawHLine(ySize - 2, 0, xSize );
                        GUI_SetColor(0x404040);
                        GUI_DrawHLine(ySize - 1, 0, xSize );

                        /* 显示时间 */
                        GUI_SetTextMode(GUI_TM_TRANS);
                        GUI_SetColor(GUI_WHITE);
                        GUI_SetFont(GUI_FONT_16B_ASCII);

                        RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
                        sec    =  RTC_TimeStructure.RTC_Seconds;
                        min    =  RTC_TimeStructure.RTC_Minutes;
                        hour   =  RTC_TimeStructure.RTC_Hours;

                        RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);

                        sprintf((char *)TempStr, "%02d:%02d:%02d", hour , min, sec);
                        GUI_DispStringAt((char *)TempStr, xSize - 50, 4);

                        /* 绘制闹钟图标 */
                        if (alarm_set == 1)
                        {
                                GUI_DrawBitmap(&_bmAlarm_16x16, xSize - 73, 3);
                        }

                        /* 显示logo  */
                        GUI_DrawBitmap(&bmSTLogo40x20, 5, 1);

                        /* 显示CPU利用率 */
                        CPU = (float)OSStatTaskCPUUsage/100;
                        sprintf((char *)TempStr, "CPU : %5.2f %%", CPU);

                        if(OSStatTaskCPUUsage < 7500 )
                        {
                                GUI_SetColor(GUI_WHITE);
                        }
                        else
                        {
                                GUI_SetColor(GUI_RED);
                        }
                        GUI_DispStringAt( (char *)TempStr, 50, 4);
                        GUI_SetColor(GUI_WHITE);
                        break;

                default:
                        WM_DefaultProc(pMsg);
        }
}

/*
*********************************************************************************************************
*        函 数 名: Demo Main menu
*        功能说明: 主菜单
*        形    参:无
*        返 回 值: 无
*********************************************************************************************************
*/
void DEMO_MainMenu(void)
{
        ICONVIEW_Handle hIcon;
        WM_HWIN hStatusWin;
        int i = 0;

        /* 启用多缓冲 */
        WM_MULTIBUF_Enable(1);

        /* 桌面窗口的回调函数 */
        WM_SetCallback(WM_HBKWIN, _cbBk);

        /* 创建一个状态窗口 */
        hStatusWin = WM_CreateWindowAsChild(
                                                                          0,              /* 父窗口在窗口坐标中的左上X位置 */
                                                                          0,              /* 父窗口在窗口坐标中的左上Y位置 */
                                                                          LCD_GetXSize(), /* 窗口的X尺寸。如果为0,则用父窗口客户区的X尺寸 */
                                                                          31,             /* 窗口的Y尺寸。如果为0,则用父窗口客户区的Y尺寸 */
                                                                          WM_HBKWIN,      /* 父窗口的句柄 */
                                                                          WM_CF_SHOW|WM_CF_MEMDEV,     /* 窗口创建标识 */
                                                                          _cbStatus,      /* 回调例程的指针,或不使用回调时为NULL */
                                                                          0);             /* 要分配的额外字节数,通常为0 */
       
        /* 创建ICON控件 */
        hIcon = ICONVIEW_CreateEx(0,
                                                          32,
                                                          LCD_GetXSize(),
                                                          LCD_GetYSize()- 33,
                                                          WM_HBKWIN,
                                                          WM_CF_SHOW | WM_CF_HASTRANS ,
                                                          ICONVIEW_CF_AUTOSCROLLBAR_V ,
                                                          '0',
                                                          112,
                                                          96);

        /* 设置ICON控件的字体 */
        ICONVIEW_SetFont(hIcon, &GUI_Font13B_ASCII);
       
        /* 设置ICON控件的背景 */
        ICONVIEW_SetBkColor(hIcon, ICONVIEW_CI_SEL, 0x941000 | 0x80404040);

        /* 设置图标的Y轴间距 */
        ICONVIEW_SetSpace(hIcon, GUI_COORD_Y, 3);
       
        /* 设置小工具边框和图标之间的框架大小 */
        ICONVIEW_SetFrame(hIcon, GUI_COORD_Y, 1);

        /* 添加图标 */
        for (i = 0; i < GUI_COUNTOF(_aBitmapItem); i++)
        {
                ICONVIEW_AddBitmapItem(hIcon,_aBitmapItem.pBitmap, _aBitmapItem.pText);
        }

        /* 设置聚焦 */
        WM_SetFocus(hIcon);

        while (1)
        {
                GUI_Delay(100);
        }
}[/mw_shl_code]
回复

使用道具 举报

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2016-6-23
在线时间
72 小时
 楼主| 发表于 2016-11-21 17:28:35 | 显示全部楼层
请问使用了GUIBuilder做界面后,怎么在STemWin里怎么显示数字?
http://www.openedv.com/forum.php ... 9&fromuid=58979
(出处: OpenEdv-开源电子网)
——@zuozhongkai 数字刷新是需要回调函数的,在对话框的回调函数里面根据小控件发送的消息来刷新,如果是主动修改的话就需要自己新建消息了。然后发送给对话框,然后对话框回调函数根据这个用户自建的消息来做处理,直接显示是不行滴
楼主位 有人问了 也没有更新了、、、
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-11-21 18:44:45 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
395
金钱
395
注册时间
2016-8-18
在线时间
147 小时
发表于 2016-11-21 20:04:37 | 显示全部楼层
回调函数 加定时器  即可
回复

使用道具 举报

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2016-6-23
在线时间
72 小时
 楼主| 发表于 2016-11-21 21:25:38 | 显示全部楼层
狂奔的菜鸟 发表于 2016-11-21 20:04
回调函数 加定时器  即可

你有遇到这方面的教程或者 函数例子吗?
回复

使用道具 举报

2

主题

31

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
395
金钱
395
注册时间
2016-8-18
在线时间
147 小时
发表于 2016-11-22 19:47:45 | 显示全部楼层
不忘初心713 发表于 2016-11-21 21:25
你有遇到这方面的教程或者 函数例子吗?

我最近刚好做过这样一个程序,但是现在手头没有程序,程序是在公司写的。我借鉴了安富莱的综合例程。
回复

使用道具 举报

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2016-6-23
在线时间
72 小时
 楼主| 发表于 2016-11-23 11:57:16 | 显示全部楼层
狂奔的菜鸟 发表于 2016-11-22 19:47
我最近刚好做过这样一个程序,但是现在手头没有程序,程序是在公司写的。我借鉴了安富莱的综合例程。

我也是差不多的情况,同事在写界面 我打辅助;也是刚刚接触Emwin;革命尚未成功,自己还需努力
回复

使用道具 举报

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
2016-6-23
在线时间
72 小时
 楼主| 发表于 2016-11-23 11:57:36 | 显示全部楼层
狂奔的菜鸟 发表于 2016-11-22 19:47
我最近刚好做过这样一个程序,但是现在手头没有程序,程序是在公司写的。我借鉴了安富莱的综合例程。

我也是差不多的情况,同事在写界面 我打辅助;也是刚刚接触Emwin;革命尚未成功,自己还需努力
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 06:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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