硬汉嵌入式论坛

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

[emWin] 页面切换会闪烁

[复制链接]

100

主题

94

回帖

394

积分

高级会员

积分
394
发表于 2021-7-24 14:47:59 | 显示全部楼层 |阅读模式
stm32f429    MCU接口,FMC驱动LCD,按钮切换窗口会有闪烁,怎么解决,谢谢


static const GUI_WIDGET_CREATE_INFO _aDialogCreate0[] =
{
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 240, 320,   WM_CF_MEMDEV_ON_REDRAW, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 17, 45, 97, 70,   0, 0x0, 0 },  //乳酸
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 122, 45,97, 70,   0, 0x0, 0 },    //血酮
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 17, 125, 97, 70,  0, 0x0, 0 }, //总胆固醇
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 122, 125, 97, 70, 0, 0x0, 0 },//尿酸
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_4, 17, 205, 202, 66, 0, 0x0, 0 },//血糖

  { BUTTON_CreateIndirect, "Button", ID_BUTTON_5, 0,   292, 79, 28, 0, 0x0, 0 },//知识百科
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_6, 80,  292, 79, 28, 0, 0x0, 0 },//健康档案
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_7, 160, 292, 80, 28, 0, 0x0, 0 },//设置

  // USER START (Optionally insert additional widgets)
  // USER END
};

static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] =
{
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 240, 320,   WM_CF_MEMDEV_ON_REDRAW, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 17, 45, 97, 70,   0, 0x0, 0 },  //乳酸
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 122, 45,97, 70,   0, 0x0, 0 },    //血酮
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 17, 125, 97, 70,  0, 0x0, 0 }, //总胆固醇
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 122, 125, 97, 70, 0, 0x0, 0 },//尿酸
};


void main_task()
{


GUI_Init();
WM_MULTIBUF_Enable(1);
WM_MOTION_Enable(0);   //不使能滑动;
GUI_UC_SetEncodeUTF8();   //GUI直接调用汉字字符串
GUI_SetBkColor(GUI_WHITE);
GUI_Clear();
GUI_DrawBitmap(&bmlogo, 62, 107);
GUI_Delay(300);
Win0(WM_HBKWIN);
while(1)
{
  GUI_TOUCH_Exec();
  GUI_Delay(15);
}
}


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117568
QQ
发表于 2021-7-24 15:23:53 | 显示全部楼层
有可能是三缓冲WM_MULTIBUF_Enable(1);没有正常开始。

使能这个函数的同时,你的底层也要正常配置了三缓冲。
回复

使用道具 举报

3

主题

115

回帖

124

积分

初级会员

积分
124
发表于 2021-7-24 18:11:23 | 显示全部楼层
我也有用这种MCU接口的屏。特别是第一个按钮和最后一个按钮之间的切换的时候闪烁的最明显。这是正常的。解决办法我是写了一个小状态机,分两步,先把第一个按钮去掉按下状态,延时几个GUI循环之后,再把第二个按钮设为按下状态。这样就不会闪烁了。当然我用的是实体按键,没有用触摸屏。
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2021-7-27 09:25:31 | 显示全部楼层
eric2013 发表于 2021-7-24 15:23
有可能是三缓冲WM_MULTIBUF_Enable(1);没有正常开始。

使能这个函数的同时,你的底层也要正常配置了三缓 ...

我的用的是mcu 接口,这时底层代码,GUI_MULTIBUF_ConfigEx(0,3); 是我才加的,也是不行。
  1. void LCD_X_Config(void) {

  2.         GUI_MULTIBUF_ConfigEx(0,3);

  3.         GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API,GUICC_M565,0,0); //创建显示驱动器件
  4.         LCD_SetSizeEx(0,lcddev.width,lcddev.height);
  5.         LCD_SetVSizeEx(0,lcddev.width,lcddev.height);
  6.         if((lcddev.id == 0X5510)||(lcddev.id == 0X1963)||(lcddev.id==0X7084)||(lcddev.id==0X4342)||(lcddev.id==0X7016)) //电容屏
  7.         {
  8.         GUI_TOUCH_Calibrate(GUI_COORD_X,0,lcddev.width,0,lcddev.width-1);   
  9.         GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,0,lcddev.height-1);
  10.         }else if(lcddev.id == 0X5310||lcddev.id == 0X6804) //0X5510 0X6804为3.5寸 320x480
  11.         {
  12.                 if(lcddev.dir == 0) //竖屏        
  13.                 {                                                       
  14.                         GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226);
  15.                         GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196);
  16.                 }else //横屏
  17.                 {
  18.                         GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y);
  19.                         GUI_TOUCH_Calibrate(GUI_COORD_X,0,320,3931,226);
  20.                         GUI_TOUCH_Calibrate(GUI_COORD_Y,0,480,3812,196);        
  21.                 }
  22.         }
  23.         else             //其他屏幕全部默认为2.8寸 320X240
  24.         {
  25.                 if(lcddev.dir == 0) //竖屏
  26.                 {                                       
  27.                         GUI_TOUCH_Calibrate(GUI_COORD_X,0,lcddev.width,155,3903);
  28. //                        GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,188,3935);
  29.                         GUI_TOUCH_Calibrate(GUI_COORD_Y,0,lcddev.height,188,3900);
  30.                 }else //横屏
  31.                 {
  32.                         GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_Y);
  33.                         GUI_TOUCH_Calibrate(GUI_COORD_X,0,240,155,3903);        
  34.                         //GUI_TOUCH_Calibrate(GUI_COORD_Y,0,320,188,3935);
  35.                         GUI_TOUCH_Calibrate(GUI_COORD_Y,0,320,168,3915);
  36.                 }
  37.         }
  38. }
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117568
QQ
发表于 2021-7-28 08:54:38 | 显示全部楼层
wen 发表于 2021-7-27 09:25
我的用的是mcu 接口,这时底层代码,GUI_MULTIBUF_ConfigEx(0,3); 是我才加的,也是不行。

你这种的,玩不了三缓冲的,三缓冲需要三个你显示屏大小的显存空间
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2021-7-28 15:30:01 | 显示全部楼层
eric2013 发表于 2021-7-28 08:54
你这种的,玩不了三缓冲的,三缓冲需要三个你显示屏大小的显存空间

那有什么好办法解决这闪屏的问题了么
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2021-7-28 15:44:51 | 显示全部楼层
萌军总司令 发表于 2021-7-24 18:11
我也有用这种MCU接口的屏。特别是第一个按钮和最后一个按钮之间的切换的时候闪烁的最明显。这是正常的。解 ...

大佬,没听太明白,去掉按钮状态,和设置按钮状态 是什么意思,用的是什么GUI 接口?谢谢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117568
QQ
发表于 2021-7-28 16:37:06 | 显示全部楼层
wen 发表于 2021-7-28 15:30
那有什么好办法解决这闪屏的问题了么

你这种只能玩窗口使能存储设备。
回复

使用道具 举报

100

主题

94

回帖

394

积分

高级会员

积分
394
 楼主| 发表于 2021-8-4 10:50:52 | 显示全部楼层
eric2013 发表于 2021-7-28 16:37
你这种只能玩窗口使能存储设备。

玩不了三缓冲的,gif 动图显示,应该怎么玩,我的动图显示有点瑕疵。
                                GUI_MULTIBUF_Begin();//应该无效,不支持
                                GUI_GIF_DrawSub(_acBuffer,uiFileSize,uiX,uiY,i++);
                                GUI_MULTIBUF_End();//应该无效,不支持
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117568
QQ
发表于 2021-8-5 08:40:07 | 显示全部楼层
wen 发表于 2021-8-4 10:50
玩不了三缓冲的,gif 动图显示,应该怎么玩,我的动图显示有点瑕疵。
                                GUI_MULTIBUF_Begin();//应该 ...

直接绘制。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 18:06 , Processed in 0.050218 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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