OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 625|回复: 1

emwin 界面刷新慢,请大神赐教

[复制链接]

  离线 

6

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2017-7-25
在线时间
14 小时
发表于 2018-1-4 12:24:39 | 显示全部楼层 |阅读模式
1金钱
大神们帮我分析一下。谢谢
视频上传不了。麻烦教下上传视频 。
硬件是STM32F103VC +SSD1963
emwin内存是40*1024.驱动也优化了
在主界面有几张图片,开启 WM_SetCreateFlags(WM_CF_MEMDEV)后刷新慢,但是又要必须开启,要不然有闪烁感.
在wm_paint下要显示几张位图。

GUI_CONST_STORAGE GUI_BITMAP bmwaterfull = {
  95, // xSize
  170, // ySize
  190, // BytesPerLine
  16, // BitsPerPixel
  (unsigned char *)_acwaterfull,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMP565
};
这种大小的图片有两张,是相互替换用。
GUI_CONST_STORAGE GUI_BITMAP bmredpump = {
  45, // xSize
  120, // ySize
  90, // BytesPerLine
  16, // BitsPerPixel
  (unsigned char *)_acredpump,  // Pointer to picture data
  NULL,  // Pointer to palette
  GUI_DRAW_BMP565
};
这种大小的图片要显示8张。
还有几张小图标。

我试了一下,如果在wm_paint不放这些图片,刷新还是可以的,看不到刷新感。但是显示这些图片就很明显。
下面附这些图片的显示方式。
void pump_display(void)
{
    u8 i;
     GUI_SetPenSize(6);      
         GUI_SetFont(&GUI_Font24_ASCII);
     for(i=0;i<8;i++)
             {      
               if (SysParameterCur.PumpUseFlag==UseState)
               {   
                 GUI_DrawLine(225+i*75,170,760,170);//最上面线条
                 GUI_DrawLine(165+i*75,318,165+i*75,370);//竖线
                   GUI_DrawLine(165+i*75,318,225+i*75,318);//上横
                 GUI_DrawLine(225+i*75,170,225+i*75,318);//上竖线
                 GUI_DrawLine(140,370,165+i*75,370);//底部线条
                 GUI_GotoXY(180+i*75,335);
                 GUI_DispDec(i+1,1);
                 GUI_DispStringAt("#",192+i*75,335);

                if (PumpState==RunState)
                {
                    GUI_DrawBitmap(&bmbluepump,170+75*i,212);
                }
                else if (PumpState==StopState)
                {
                    GUI_DrawBitmap(&bmredpump,170+75*i,212);
                }
                else if (PumpState==ErroState)
                {
                    GUI_DrawBitmap(&bmgradpump,170+75*i,212);
                }


               }
               else if (SysParameterCur.PumpUseFlag==NoUseState)
               {
                   __NOP();
               }
           }
}

void waterbox_check(void)
{
     //水箱缺水信号显示
       if (SysParameterCur.PumpUseFlag[10] ==UseState )
       {           
       if ((input_buf[0]&0x10)==0x10)
       {
       GUI_DrawBitmap(&bmwaterlow,45,220);
        }
        else
        {
        GUI_DrawBitmap(&bmwaterfull,45,220);
        }   
       }
       else
       {
       if ((input_buf[0]&0x10)==0x10)
       {
           GUI_DrawBitmap(&bmwaterfull,45,220);

        }
        else
        {
            GUI_DrawBitmap(&bmwaterlow,45,220);

        }  
       }
}

我现在个人感觉是认为内存不够,我试着调整,用10*1024时,刷新很慢,但是我最大也只能放大到40*1024了,比10*1024要快一些。

大神们有什么好的方法。给个思路也行。

回复

使用道具 举报

  离线 

485

主题

9万

帖子

30

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
120495
金钱
120495
注册时间
2010-12-1
在线时间
963 小时
发表于 2018-1-5 01:12:55 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-1-21 02:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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