ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[应用相关] 关于EMWIN的移植简要说明

[复制链接]
62|0
 楼主 | 2019-2-12 08:35 | 显示全部楼层 |阅读模式
MWIN的移植具体步骤可以参考《emWin5中文手册》配置章节,里面有比较详细的步骤。

            移植有两种方法,一种是EMWIN提供了驱动接口,用户只需要提供读写显示RAM寄存器的函数即可,主要的函数是:

void LCD_X_Config(void) {
       
        unsigned short lcd_width,lcd_height;
        unsigned char  dir_flag;
       
                GUI_DEVICE * pDevice;
                CONFIG_FLEXCOLOR Config = {0};
                GUI_PORT_API PortAPI = {0};
               
                dir_flag = 1;                //横竖屏幕切换标志
               
                if(dir_flag == 0)
                {
                        lcd_width = XSIZE_PHYS;
                        lcd_height = YSIZE_PHYS;
                }
                else
                {
                        lcd_width = YSIZE_PHYS;
                        lcd_height = XSIZE_PHYS;
                }
               
                pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);        //GUIDRV_FLEXCOLOR表示使用标准接口
                GUIDRV_FlexColor_SetReadFunc66720_B16(pDevice, GUIDRV_FLEXCOLOR_READ_FUNC_II); //使用EMWIN提供的SS1963驱动
               
                LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
                LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS);

                       
                if(dir_flag==1)
                {
                  GUI_TOUCH_SetOrientation(GUI_SWAP_XY|GUI_MIRROR_X);       
                }
                GUI_TOUCH_Calibrate(GUI_COORD_X, 0, lcd_width, TOUCH_LEFT, TOUCH_RIGHT);
                GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, lcd_height, TOUCH_TOP, TOUCH_BOTTOM);
               
               
                //Config.FirstCOM = 0; //modify by fire
    //Config.FirstSEG = 0; //modify by fire
                //Config.NumDummyReads = 2;                //²»¼ÓÕâÒ»Ò»¾ä£¬¹â±êÏÔʾ»áÓÐÍÏÓ°ÎÊÌâ
               
                if(dir_flag==1)
                {
                  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_X;
                }
                GUIDRV_FlexColor_Config(pDevice, &Config);
               
                    //用户需要提供的4个函数
                PortAPI.pfWrite16_A0  = LCD_WR_REG;
                PortAPI.pfWrite16_A1  = LCD_WR_Data;
                PortAPI.pfWriteM16_A1 = LCD_WR_M_Data;
                PortAPI.pfReadM16_A1  = LCD_RD_M_Data;
                GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66720, GUIDRV_FLEXCOLOR_M16C0B16);
}

可以看到这个函数主要设置,屏幕尺寸,根据用户LCD型号选择对应的驱动,提供4个最基础的读写寄存器以及读写数据的函数。


第二种方法是自己写驱动,主要 区别是:

GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);

其中:
#define DISPLAY_DRIVER  &GUIDRV_Template_API

const GUI_DEVICE_API GUIDRV_Template_API = {

  DEVICE_CLASS_DRIVER,

  _DrawBitmap,
  _DrawHLine,
  _DrawVLine,
  _FillRect,
  _GetPixelIndex,
  _SetPixelIndex,
  _XorPixel,
  
  _SetOrg,

  _GetDevFunc,
  _GetDevProp,
  _GetDevData,
  _GetRect,
};
由用户自己提供了一些 _DrawBitmap,。。。。_GetPixelIndex,_SetPixelIndex,_XorPixel函数.
据网络资料上说,只提供打点函数也可!!

这种移植以安富莱为代表,有一点要注意,安富莱的移植,把触摸部分也移植了,由用户自己提GUI_PID_StoreState(&State); 函数的State数据,搞得太复杂了,有点不让用户自己消化的意思,好让用户绑定到他的平台中。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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