ucGUI3.9版本快速移植构建

ucGUI3.9版本快速移植构建ucGUI3 9 版本快速移植构建移植前提条件涉及文件移植过程修改绘制驱动文件修改配置文件打包进工程涉及的资源获取在之前的博客中移植了 STemwin5 32 版本的 最近更换了 GD 芯片所以 STemwin 没法用了 只有移植 emwin 或者是 ucGUI 所有芯片都可以用了 之前都是分散修改 GUIxxx c 文件或者 GUIxxx h 文件 现在打包成一个接口文件和一个库文件 不用再折腾了 累 移植前提条件参考博客 STemwin 的移植涉及文件 emwPort c 修改驱动 emwPort h 修改配置 ucGU

在之前的博客中移植了STemwin5.32版本的,最近更换了 GD芯片所以STemwin没法用了,只有移植emwin或者是ucGUI所有芯片都可以用了!
之前都是分散修改GUIxxx.c文件或者GUIxxx.h文件,现在打包成一个接口文件和一个库文件,不用再折腾了,累。。。

移植前提条件

参考博客STemwin的移植

涉及文件

  • emwPort.c–修改驱动
  • emwPort.h–修改配置
  • ucGUI3.9.a
  • 一堆ucGUI的头文件,无需改

移植过程

修改绘制驱动文件

ucGUI底层将调用以下绘制函数,必须对画点函数进行填充

/ * @file: emwPort.c * * @date: 2020/5/8 * * @author: aron566 * * @brief:emwin 移植接口 * * @version:v1.0 */ #ifdef __cplusplus /// 
      
      extern 
      "C" 
      { 
        
      #endif 
      / Includes -----------------------------------------------------------------*/ 
      /* Private includes ----------------------------------------------------------*/ 
      #include "emwPort.h" 
      #include "GUI.h" 
      / Private typedef ----------------------------------------------------------*/ 
      / Private macros -----------------------------------------------------------*/ 
      / Private constants --------------------------------------------------------*/ 
      / Public variables ---------------------------------------------------------*/ 
      / Private variables --------------------------------------------------------*/ 
      / Private function prototypes ----------------------------------------------*/ 
      / Private user code --------------------------------------------------------*/ 
      / Public application code --------------------------------------------------*/ 
      /* * * Public code * */ 
      / * @brief 读取个某点的颜色值 * @param[in] x,y:坐标 * @return 此点的颜色 / uint32_t 
      EMPORT_LCD_ReadPoint 
      ( 
      int x 
      , 
      int y 
      ) 
      { 
        
      return 
      * 
      (uint16_t 
      * 
      ) 
      ( 
      (uint32_t 
      )ltdc_layer1 
      [ 
      0 
      ] 
      + 
      2 
      * 
      (EMPORT_LCD_X_PIXEL 
      * y 
      + x 
      ) 
      ) 
      ; 
      } 
      / * @brief 画点 * @param[in] x,y:坐标 color:颜色 * @return None / 
      void 
      EMPORT_LCD_DrawPoint 
      ( 
      int x 
      , 
      int y 
      ,uint32_t color 
      ) 
      { 
        uint16_t 
      *TargetAddr 
      = 
      (uint16_t 
      * 
      ) 
      ( 
      (uint32_t 
      )ltdc_layer1 
      [ 
      0 
      ] 
      + 
      2 
      * 
      (EMPORT_LCD_X_PIXEL 
      * y 
      + x 
      ) 
      ) 
      ; 
      *TargetAddr 
      = 
      (uint16_t 
      )color 
      ; 
      } 
      / * @brief 在指定区域内填充单个颜色 * @param[in] (sx,sy),(ex,ey):填充矩形对角坐标,区域大小为:(ex-sx+1)*(ey-sy+1) * @param[in] color:要填充的颜色 * @return None / 
      void 
      EMPORT_LCD_Fill 
      ( 
      int sx 
      , 
      int sy 
      , 
      int ex 
      , 
      int ey 
      ,uint32_t color 
      ) 
      { 
        
      /*NEW Code*/ 
      // LCD_DrawFullRect(sx ,sy, ex+1, ey+1); 
      for 
      ( 
      ; sy 
      <= ey 
      ; sy 
      ++ 
      ) 
      { 
        
      EMPORT_LCD_DrawHLine 
      (sx 
      ,sy 
      ,ex 
      ,color 
      ) 
      ; 
      } 
      } 
      / * @brief 绘制横线 * @param[in] X起点 * @param[in] Y起点 * @param[in] X长度 * @param[in] 颜色 * @retval None * @author aron566 * @version v1.0 * @date 2020/5/9 */ 
      void 
      EMPORT_LCD_DrawHLine 
      ( 
      int x0 
      , 
      int y 
      , 
      int x1 
      ,uint32_t color 
      ) 
      { 
        
      for 
      ( 
      ; x0 
      <= x1 
      ; x0 
      ++ 
      ) 
      { 
        
      EMPORT_LCD_DrawPoint 
      (x0 
      , y 
      , color 
      ) 
      ; 
      } 
      } 
      / * @brief 绘制竖线 * @param[in] X起点 * @param[in] Y起点 * @param[in] Y长度 * @param[in] 颜色 * @retval None * @author aron566 * @version v1.0 * @date 2020/5/9 */ 
      void 
      EMPORT_LCD_DrawVLine 
      ( 
      int x 
      , 
      int y0 
      , 
      int y1 
      ,uint32_t color 
      ) 
      { 
        
      for 
      ( 
      ; y0 
      <= y1 
      ; y0 
      ++ 
      ) 
      { 
        
      EMPORT_LCD_DrawPoint 
      (x 
      , y0 
      , color 
      ) 
      ; 
      } 
      } 
      / * @brief GUI触摸接口 ,获取X坐标 * @param None * @retval X坐标 * @author aron566 * @version v1.0 * @date 2020/5/8 */ 
      int 
      EMPORT_Touch_GetPhyX 
      ( 
      void 
      ) 
      { 
        
      return 
      0 
      ; 
      } 
      / * @brief GUI触摸接口 ,获取Y坐标 * @param None * @retval Y坐标 * @author aron566 * @version v1.0 * @date 2020/5/8 */ 
      int 
      EMPORT_Touch_GetPhyY 
      ( 
      void 
      ) 
      { 
        
      return 
      0 
      ; 
      } 
      / * @brief GUI时基 放入1ms中断 * @param None * @retval None * @author aron566 * @version v1.0 * @date 2020/5/8 */ 
      void 
      EMPORT_GUI_Inc_Ticks_Port 
      ( 
      void 
      ) 
      { 
        
      extern 
      volatile GUI_TIMER_TIME OS_TimeMS 
      ; OS_TimeMS 
      ++ 
      ; 
      } 
      #ifdef __cplusplus  
      /// 
        
        } 
        #endif 
        / End of file */ 
        
     

修改配置文件

emwPort.h

/ * @file: emwPort.h * * @date: 2020/5/8 * * @author: aron566 * * @brief:emwin 移植接口 * * @version:v1.0 */ #ifndef __EMWPORT_H #define __EMWPORT_H #ifdef __cplusplus /// 
      
      extern 
      "C" 
      { 
        
      #endif 
      / Includes -----------------------------------------------------------------*/ 
      #include  
          
      /< nedd definition of uint8_t */ 
      #include  
          
      /< need definition of NULL */ 
      //#include 
       
         /< need definition of BOOL */ 
        
      #include  
          
      /< if need printf */ 
      #include  
         
      #include  
         
      / Private includes ---------------------------------------------------------*/ 
      #include "cmsis_os.h" 
      #include "ipa.h" 
      / Private defines ----------------------------------------------------------*/ 
      / * @name EMWIN移植配置 * @{ */ 
      #define EMPORT_FRAME_BUFF_ADDR ((void*)(LCD_FRAME_BUFFER+BUFFER_OFFSET)) 
      #define EMPORT_BUFF_SIZE (1024*20U) 
      #define EMPORT_BLOCKSIZE (0x80) 
      #define EMPORT_USE_OS (0)  
      /< 启用OS */ 
      #define EMPORT_XSIZE_PHYS (480)  
      /< 配合显示方向的X像素*/ 
      #define EMPORT_YSIZE_PHYS (320)  
      /< 配合显示方向的Y像素*/ 
      #define EMPORT_LCD_X_PIXEL (320)  
      /< 实际X像素 */ 
      #define EMPORT_LCD_Y_PIXEL (480)  
      /< 实际Y像素 */ 
      #define EMPORT_LCD_BITSPERPIXEL (16)  
      /< 像素位大小 */ 
      #define EMPORT_LCD_FIXEDPALETTE (565)  
      /< 颜色格式 */ 
      #define EMPORT_LCD_SWAP_RB (1)  
      /< 红蓝交换 */ 
      #define EMPORT_LCD_CONTROLLER (566)  
      /< 控制器名称 */ 
      #define EMPORT_NUM_LAYERS (1)  
      /< 最大层级 */ 
      #define EMPORT_SUPPORT_TOUCH (0)  
      /< 支持触摸 */ 
      #define EMPORT_SUPPORT_UNICODE (1)  
      /< 支持UNICODE*/ 
      #define EMPORT_SUPPORT_MOUSE (0)  
      /< 支持鼠标 */ 
      #define EMPORT_WINSUPPORT (1) 
      #define EMPORT_SUPPORT_MEMDEV (1) 
      #define EMPORT_SUPPORT_AA (1)  
      /< 支持反锯齿 */ 
      #define EMPORT_SUPPORT_DEVICES (1) 
      #define EMPORT_SUPPORT_NOTIFY_VIS_CHANGED (1) 
      #define EMPORT_DEFAULT_FONT (&GUI_FontD24x32)  
      /< 默认字体大小*/ 
      #define EMPORT_COLOR_CONVERSION GUICC_M565 
      //GUICC_565//GUICC_888 
      #define EMPORT_DISPLAY_DRIVER GUIDRV_WIN32 
      //GUIDRV_TEMPLATE 
      / * @name EMWIN调整显示方向 * @{ */ 
      /* 1 1 0 横竖屏切换 */ 
      #define EMPORT_LCD_SWAP_XY (1)  
      #define EMPORT_LCD_MIRROR_X (1) 
      #define EMPORT_LCD_MIRROR_Y (0) 
      / @}*/ 
      #define EMPORT_TOUCH_SWAP_XY (1) 
      #define EMPORT_TOUCH_MIRROR_X (0) 
      #define EMPORT_TOUCH_MIRROR_Y (1) 
      #define EMPORT_CALIBRATION (4000) 
      #define EMPORT_TOUCH_AD_LEFT (300) 
      #define EMPORT_TOUCH_AD_RIGHT (3700) 
      #define EMPORT_TOUCH_AD_TOP (300) 
      #define EMPORT_TOUCH_AD_BOTTOM (3700) 
      / @}*/ 
      / Exported typedefines -----------------------------------------------------*/ 
      / Exported constants -------------------------------------------------------*/ 
      / Exported macros-----------------------------------------------------------*/ 
      / Exported variables -------------------------------------------------------*/ 
      / Exported functions prototypes --------------------------------------------*/ uint32_t 
      EMPORT_LCD_ReadPoint 
      ( 
      int x 
      , 
      int y 
      ) 
      ; 
      void 
      EMPORT_LCD_DrawPoint 
      ( 
      int x 
      , 
      int y 
      ,uint32_t color 
      ) 
      ; 
      void 
      EMPORT_LCD_Fill 
      ( 
      int sx 
      , 
      int sy 
      , 
      int ex 
      , 
      int ey 
      ,uint32_t color 
      ) 
      ; 
      void 
      EMPORT_LCD_DrawHLine 
      ( 
      int x0 
      , 
      int y 
      , 
      int x1 
      ,uint32_t color 
      ) 
      ; 
      void 
      EMPORT_LCD_DrawVLine 
      ( 
      int x 
      , 
      int y0 
      , 
      int y1 
      ,uint32_t color 
      ) 
      ; 
      void 
      EMPORT_GUI_Inc_Ticks_Port 
      ( 
      void 
      ) 
      ; 
      int 
      EMPORT_Touch_GetPhyX 
      ( 
      void 
      ) 
      ; 
      int 
      EMPORT_Touch_GetPhyY 
      ( 
      void 
      ) 
      ; 
      #ifdef __cplusplus  
      /// 
        
        } 
        #endif 
        #endif 
        / End of file */ 
        
     

打包进工程

涉及的资源获取

前往下载




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220363.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午8:40
下一篇 2026年3月17日 下午8:41


相关推荐

  • 树莓派pico官方网站_树莓派pico参数

    树莓派pico官方网站_树莓派pico参数文章目录1树莓派PICO简介1.1简介1.2配置[^2]1.3引脚图1.4尺寸2安装2.1烧录固件2.2安装IDE(ThonnyIDE)2.3离线运行程序3基础3.01点亮板载LED灯3.02板载LED闪烁3.03LED流水灯3.04按键实验3.05外部中断(改进3.04按键实验)3.06定时器中断(改进3.02板载LED闪烁)3.07PWM脉冲宽度调制(实现板载LED呼吸灯)3.08I2C总线(使用SSD1306OLED屏幕)4传感器程序4.1温度传

    2022年10月14日
    5
  • 破解压缩文件密码rarcrack

    破解压缩文件密码rarcrack破解压缩文件密码rarcrack常见的压缩文件格式有ZIP、RAR和7z。这三种格式都支持使用密码进行加密压缩。前面讲过破解ZIP压缩文件,可以使用fcrackzip。对于RAR和7z格式,可以使用rarcrack。该工具也是一款知名的加密压缩文件破解工具,它支持ZIP、RAR和7z三种格式。它采用暴力破解的模式进行破解。同时,用户可以修改破解配置文件,指定密码所使用的字符集和起始密码。…

    2022年6月5日
    66
  • phpstorm激活码[最新免费获取]

    (phpstorm激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    44
  • java中高级工程师面试汇总

    java中高级工程师面试汇总1接口服务数据被劫包如何防止数据恶意提交1.1:防篡改客户端提交请求之前,先对自己请求的参数全部进行拼接加密得到一个加密字符串sign 请求参数加上sign,然后再发送给服务器 服务器将参数获取后也进行相同的拼接加密得到自己的sign 比较与客户端发来的sign是否相同 不相同则是被第三方修改过的,拒绝执行关键:第三方不知道加密方式和请求参数拼接规则,而客户端与服务器是知道的,因此第三方不知道修改参数后如何生成与服务器生成相同的sign 只要请求修改了一点点加密得到的就是不同的签名

    2022年7月8日
    22
  • 【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5系列与Qwen/DeepSeek/GPT-4横向深度测评报告

    【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5系列与Qwen/DeepSeek/GPT-4横向深度测评报告

    2026年3月12日
    3
  • PAT考试一些注意事项[通俗易懂]

    有除法时,特别处理分母为0的情况 执行后发现卡住了,很有可能是scanf时忘记写&amp;了 if判断语句注意不要把==写成= 程序提交后显示超时,注意检查循环跳出情况,for中的i–是不是写成了i++ 判断素数时,i的取值范围[2,sqrt(a)],其中a是待判断的数 把ID当成int类型时,最后输出记得在前面添加0补齐 当图的节点有&gt;=10000个时,用邻接…

    2022年4月9日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号