硬汉嵌入式论坛

 找回密码
 立即注册
查看: 387|回复: 16
收起左侧

[emWin] emwin怎么实时显示自己采集的adc数据,急急急

[复制链接]

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-4-11 18:32:46 | 显示全部楼层 |阅读模式
为啥我的会变成这样呢,有米有大哥教教
IMG_20240411_153046.jpg
回复

使用道具 举报

44

主题

562

回帖

699

积分

金牌会员

积分
699
发表于 2024-4-12 09:16:47 | 显示全部楼层
问题没有描述清楚,刷新数据一般是用定时器来刷的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-12 09:25:09 | 显示全部楼层
方便的话,贴代码看下,仅emWin部分即可。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-12 09:48:24 | 显示全部楼层
eric2013 发表于 2024-4-12 09:25
方便的话,贴代码看下,仅emWin部分即可。

#include "GUI.h"
#include "string.h"
#include "demo.h"
#include "stdlib.h"
#include "stdio.h"
#include "math.h"
///*****************************************************************************************************/
///*EMWIN*/
#include "GUI.h"
//#include "WM.h"
#include "DIALOG.h"
#include "ADC.h"
WM_HTIMER RUN_Timer;
uint16_t adcValue1,adcValue2,adcValue3,adcValue4,adcValue5 = 0;
TEXT_Handle  hText1, hText2, hText3,hText4, hText5, hText6;
  void UpdateADCValues() {
    char buffer[20];
    uint16_t adcValue;

    // 对于每个ADC通道,读取数据并更新对应的文本控件
    adcValue = AD_value[0];
    sprintf(buffer, "%d", adcValue);
    TEXT_SetText(hText1, buffer);

    adcValue = AD_value[1];
    sprintf(buffer, "%d", adcValue);
    TEXT_SetText(hText2, buffer);

    adcValue = AD_value[2];
    sprintf(buffer, " %d", adcValue);
    TEXT_SetText(hText3, buffer);

    adcValue = AD_value[3];
    sprintf(buffer, "%d", adcValue);
    TEXT_SetText(hText4, buffer);

    adcValue = AD_value[4];
    sprintf(buffer, "%d", adcValue);
    TEXT_SetText(hText5, buffer);

    adcValue = AD_value[5];
    sprintf(buffer, "%d", adcValue);
    TEXT_SetText(hText6, buffer);
}

static void emwin_draw(void)
{
       
    GUI_SetBkColor(GUI_WHITE);
    GUI_Clear();

        GUI_SetColor(GUI_DARKMAGENTA);
    GUI_SetTextMode(GUI_TM_TRANS);
        GUI_FillRoundedRect(10, 10, 90, 60, 5);
        GUI_FillRoundedRect(10, 80, 90, 130, 5);
        GUI_FillRoundedRect(10, 150, 90, 200, 5);
        GUI_FillRoundedRect(230, 10, 310, 60, 5);
        GUI_FillRoundedRect(230, 80, 310, 130, 5);
        GUI_FillRoundedRect(230, 150,310, 200, 5);
        GUI_FillRoundedRect(100, 10, 220, 150, 5);
        GUI_SetColor(GUI_WHITE);
        GUI_SetFont(GUI_FONT_8_ASCII);
        GUI_DispStringAt("Pa", 75, 45);
        GUI_DispStringAt("Pa", 75, 115);
        GUI_DispStringAt("Pa", 75, 185);
        GUI_DispStringAt("m^3/s", 280, 45);
        GUI_DispStringAt("m^3/s", 280, 115);
        GUI_DispStringAt("m^3/s", 280, 185);
        GUI_SetFont(GUI_FONT_13_ASCII);
        GUI_DispStringAt("Q1", 12, 42);
        GUI_DispStringAt("Q2", 12, 112);
        GUI_DispStringAt("Q3", 12, 182);
        GUI_DispStringAt("P1", 232, 43);
        GUI_DispStringAt("P2", 232, 113);
        GUI_DispStringAt("P3", 232, 183);
        GUI_DispStringAt("%", 200, 130);
        GUI_SetFont(GUI_FONT_20_ASCII);
        GUI_DispStringAt("effiency", 100, 10);
}
static void _cbDialog(WM_MESSAGE * pMsg) {
        WM_HWIN hItem;
        switch (pMsg->MsgId) {
       
        case WM_CREATE:
           hText1=TEXT_CreateEx(38, 10, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 0, "");
               TEXT_SetFont(hText1,GUI_FONT_24_ASCII);
               TEXT_SetTextColor(hText1,GUI_WHITE);
                hText2=TEXT_CreateEx(40, 80, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 1, " ");
                TEXT_SetFont(hText2,GUI_FONT_24_ASCII);
                TEXT_SetTextColor(hText2,GUI_WHITE);
                 hText3=TEXT_CreateEx(40, 150, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 2, "");
                 TEXT_SetFont(hText3,GUI_FONT_24_ASCII);
                  TEXT_SetTextColor(hText3,GUI_WHITE);
                  hText4=TEXT_CreateEx(260, 10, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 3, "");
                  TEXT_SetFont(hText4,GUI_FONT_24_ASCII);
                 TEXT_SetTextColor(hText4,GUI_WHITE);
                 hText5=TEXT_CreateEx(260, 80, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 4, "");
                TEXT_SetFont(hText5,GUI_FONT_24_ASCII);
               TEXT_SetTextColor(hText5,GUI_WHITE);
               hText6=TEXT_CreateEx(260, 150, 100, 20, WM_HBKWIN, WM_CF_SHOW, TEXT_CF_LEFT, 5, "");
               TEXT_SetFont(hText6,GUI_FONT_24_ASCII);
               TEXT_SetTextColor(hText6,GUI_WHITE);
       
                break;
                 case WM_PAINT:  
            emwin_draw();
    break;
        case WM_TIMER:
                UpdateADCValues();
        WM_RestartTimer(pMsg->Data.v, 1000);  // 重新启动定时器
    break;
        default:
             WM_DefaultProc(pMsg);
        break;
       
        }
}

WM_HWIN CreateABCDE(void) {
        WM_HWIN hWin;
         hWin = WM_CreateWindow(0, 0, 320, 240, WM_CF_SHOW, _cbDialog, 0);
        return hWin;
}

void MainTask(void)
        {
    GUI_Init();
    GUI_UC_SetEncodeUTF8();
    CreateABCDE();
    RUN_Timer = WM_CreateTimer(WM_GetClientWindow(CreateABCDE()), 0, 500, 0);

    while (1) {
        GUI_Delay(200);
    }
}
能够定时显示了,但是屏幕闪烁明显
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-13 09:06:51 | 显示全部楼层
WJWJ 发表于 2024-4-12 09:48
#include "GUI.h"
#include "string.h"
#include "demo.h"

开启窗口存储设备即可。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-13 09:33:11 | 显示全部楼层
eric2013 发表于 2024-4-13 09:06
开启窗口存储设备即可。

定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津
回复

使用道具 举报

3

主题

335

回帖

344

积分

高级会员

积分
344
发表于 2024-4-13 14:00:15 | 显示全部楼层
WJWJ 发表于 2024-4-13 09:33
定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津

此处应该如下:
[C] 纯文本查看 复制代码
    GUI_Init();
    GUI_UC_SetEncodeUTF8();
    WM_HWIN hWin = HWCreateABCDE();
    RUN_Timer = WM_CreateTimer(WM_GetClientWindow(hWin), 0, 500, 0);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-13 14:26:53 | 显示全部楼层
WJWJ 发表于 2024-4-13 09:33
定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津

在GUI_Init前或者后调用WM_SetCreateFlags(WM_CF_MEMDEV)即可。

另外注意上面群友反馈的问题,你的创建了两次。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-13 20:40:37 | 显示全部楼层
eric2013 发表于 2024-4-13 14:26
在GUI_Init前或者后调用WM_SetCreateFlags(WM_CF_MEMDEV)即可。

另外注意上面群友反馈的问题,你的创 ...

问题已经解决感谢大佬,大佬遇见过运行remwin导致单片机其他定时器无法发生作用吗。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-14 10:13:28 | 显示全部楼层
WJWJ 发表于 2024-4-13 20:40
问题已经解决感谢大佬,大佬遇见过运行remwin导致单片机其他定时器无法发生作用吗。

单片机的硬件定时器吗,如果是硬件定时器那这个不正常。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-14 10:56:30 | 显示全部楼层
本帖最后由 WJWJ 于 2024-4-14 21:08 编辑
eric2013 发表于 2024-4-14 10:13
单片机的硬件定时器吗,如果是硬件定时器那这个不正常。

tim4定时器,不知道emwin定时器会与其他定时器发生冲突吗,但是我的代码很简单不应该占据太多
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-14 11:41:03 | 显示全部楼层
eric2013 发表于 2024-4-14 10:13
单片机的硬件定时器吗,如果是硬件定时器那这个不正常。

不对,他是直接导致主程序其他程序,都不运行,只有外部中断才可以
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-15 09:57:36 | 显示全部楼层
WJWJ 发表于 2024-4-14 11:41
不对,他是直接导致主程序其他程序,都不运行,只有外部中断才可以

你看下你的程序是不是那里操作全局开关中断了,有这个可能。
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-15 10:57:15 | 显示全部楼层
eric2013 发表于 2024-4-15 09:57
你看下你的程序是不是那里操作全局开关中断了,有这个可能。

我去调试了一下,他会一直运行在下面这个whil里面
  GUI_Init();
        WM_SetCreateFlags(WM_CF_MEMDEV);
        hWin = WM_CreateWindow(0, 0, 320, 240, WM_CF_SHOW, _cbDialog, 0);
    RUN_Timer = WM_CreateTimer(WM_GetClientWindow(hWin), 0, 1000, 0);

    while (1)
                {
                        GUI_Delay(1); // 短延时,保持响应性
                        GUI_Exec();
   WM_Exec();
}

}
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-15 11:00:47 | 显示全部楼层
eric2013 发表于 2024-4-15 09:57
你看下你的程序是不是那里操作全局开关中断了,有这个可能。

我的是无操作系统,因为只需要看数据
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2024-4-15 11:04:00 | 显示全部楼层
eric2013 发表于 2024-4-15 09:57
你看下你的程序是不是那里操作全局开关中断了,有这个可能。

大佬,我可否代码发你,帮我解决一下问题,有偿的,主要是很急
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2024-4-16 08:32:49 | 显示全部楼层
WJWJ 发表于 2024-4-15 11:04
大佬,我可否代码发你,帮我解决一下问题,有偿的,主要是很急

这个可以全工程检索下全局中断开关的API函数。看看那里调用了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 11:34 , Processed in 0.222700 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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