emwin怎么实时显示自己采集的adc数据,急急急
为啥我的会变成这样呢,有米有大哥教教问题没有描述清楚,刷新数据一般是用定时器来刷的。 方便的话,贴代码看下,仅emWin部分即可。 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_HandlehText1, hText2, hText3,hText4, hText5, hText6;
void UpdateADCValues() {
char buffer;
uint16_t adcValue;
// 对于每个ADC通道,读取数据并更新对应的文本控件
adcValue = AD_value;
sprintf(buffer, "%d", adcValue);
TEXT_SetText(hText1, buffer);
adcValue = AD_value;
sprintf(buffer, "%d", adcValue);
TEXT_SetText(hText2, buffer);
adcValue = AD_value;
sprintf(buffer, " %d", adcValue);
TEXT_SetText(hText3, buffer);
adcValue = AD_value;
sprintf(buffer, "%d", adcValue);
TEXT_SetText(hText4, buffer);
adcValue = AD_value;
sprintf(buffer, "%d", adcValue);
TEXT_SetText(hText5, buffer);
adcValue = AD_value;
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);
}
}
能够定时显示了,但是屏幕闪烁明显 WJWJ 发表于 2024-4-12 09:48
#include "GUI.h"
#include "string.h"
#include "demo.h"
开启窗口存储设备即可。 eric2013 发表于 2024-4-13 09:06
开启窗口存储设备即可。
定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津
WJWJ 发表于 2024-4-13 09:33
定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津
此处应该如下:
GUI_Init();
GUI_UC_SetEncodeUTF8();
WM_HWIN hWin = HWCreateABCDE();
RUN_Timer = WM_CreateTimer(WM_GetClientWindow(hWin), 0, 500, 0); WJWJ 发表于 2024-4-13 09:33
定时器定时更新也可以用存储设备吗但是在哪加呢,可否指点迷津
在GUI_Init前或者后调用WM_SetCreateFlags(WM_CF_MEMDEV)即可。
另外注意上面群友反馈的问题,你的创建了两次。 eric2013 发表于 2024-4-13 14:26
在GUI_Init前或者后调用WM_SetCreateFlags(WM_CF_MEMDEV)即可。
另外注意上面群友反馈的问题,你的创 ...
问题已经解决感谢大佬,大佬遇见过运行remwin导致单片机其他定时器无法发生作用吗。
WJWJ 发表于 2024-4-13 20:40
问题已经解决感谢大佬,大佬遇见过运行remwin导致单片机其他定时器无法发生作用吗。
单片机的硬件定时器吗,如果是硬件定时器那这个不正常。 本帖最后由 WJWJ 于 2024-4-14 21:08 编辑
eric2013 发表于 2024-4-14 10:13
单片机的硬件定时器吗,如果是硬件定时器那这个不正常。
tim4定时器,不知道emwin定时器会与其他定时器发生冲突吗,但是我的代码很简单不应该占据太多 eric2013 发表于 2024-4-14 10:13
单片机的硬件定时器吗,如果是硬件定时器那这个不正常。
不对,他是直接导致主程序其他程序,都不运行,只有外部中断才可以 WJWJ 发表于 2024-4-14 11:41
不对,他是直接导致主程序其他程序,都不运行,只有外部中断才可以
你看下你的程序是不是那里操作全局开关中断了,有这个可能。 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();
}
} eric2013 发表于 2024-4-15 09:57
你看下你的程序是不是那里操作全局开关中断了,有这个可能。
我的是无操作系统,因为只需要看数据 eric2013 发表于 2024-4-15 09:57
你看下你的程序是不是那里操作全局开关中断了,有这个可能。
大佬,我可否代码发你,帮我解决一下问题,有偿的,主要是很急 WJWJ 发表于 2024-4-15 11:04
大佬,我可否代码发你,帮我解决一下问题,有偿的,主要是很急
这个可以全工程检索下全局中断开关的API函数。看看那里调用了。
页:
[1]