ucGUI3.9版本快速移植构建

2023-11-19


在之前的博客中移植了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 ///<use C compiler
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 ///<end extern c
}
#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 ///<use C compiler
extern "C" {
#endif
/** Includes -----------------------------------------------------------------*/
#include <stdint.h> /**< nedd definition of uint8_t */
#include <stddef.h> /**< need definition of NULL    */
//#include <stdbool.h>/**< need definition of BOOL    */
#include <stdio.h>  /**< if need printf             */
#include <stdlib.h>
#include <string.h>
/** 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 ///<end extern c
}
#endif
#endif
/******************************** End of file *********************************/

打包进工程

三个文件夹:
INCLUDE ucGUI的一堆头文件
LIB 库文件
PORT ucGUI移植接口
在这里插入图片描述
加入工程,图为IAR工程,两个文件即可,接口文件,库文件,其他的头文件路径包含即可
在这里插入图片描述

涉及的资源获取

前往下载

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ucGUI3.9版本快速移植构建 的相关文章

随机推荐

  • 专科程序员与本科程序员的区别大吗?

    不管专科还是本科 我们先说说校园内现状 老师自己的水平是否足够 首先就是老师是否达到了一定的水平 其次就是老师是否有更多的精力教学生 水平好的老师忙着接项目发表论文 有没有更多的时间放在学生身上 再说学生 真正学习的时间有多少 参加学生会
  • 边坡安全监测系统的主要内容

    边坡安全监测系统是边坡安全掌握及其支护结构维护决策系统的支撑条件之一 建立结构健康监测系统的目的在于确定边坡结构的安全性 监测支护结构的承载能力 运营状态和耐久性能等 对边坡稳定性进行有效监控 修正在施工过程中各种影响支护结构的参数误差对支
  • Unet实现眼底图像血管分割(三)

    1 retinaNN training py 模型Model的compile方法 model compile self optimizer loss metrics None loss weights None sample weight
  • 如何在Excel中制作曲线图

    When you create a line graph in Excel the lines are angled and have hard edges by default You can easily change this to
  • 电脑上安装多个JDK版本时如何自由切换

    文章目录 前言 一 安装JDK 二 设置系统变量 2 1 设置JAVA HOME 2 1 1 添加JAVA HOME VERSION 2 2 设置Path 2 2 1 添加Path 三 验证结果 前言 使用java的过程中 难免会遇上JDK
  • JAVA中APIcalendar的用法,Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 java util Calendar 是日历类 在Date后出现 替换掉了许
  • 常用头文件

    常用头文件 cstring cstring对应char 类 1 strlen char a 作用是获得字符串长度 不包括串尾符 比如 abc 0 的长度就是3 2 strcmp char a char b 就是比较两个字符串的字典序 小于返
  • Window.devicePixelRatio(设备像素比)

    Window 接口的devicePixelRatio返回当前显示设备的物理像素分辨率与CSS像素分辨率之比 此值也可以解释为像素大小的比率 一个CSS像素的大小与一个物理像素的大小 简单来说 它告诉浏览器应使用多少屏幕实际像素来绘制单个CS
  • Leetcode646. 最长数对链

    Every day a Leetcode 题目来源 646 最长数对链 解法1 动态规划 定义 dp i 为以 pairs i 为结尾的最长数对链的长度 初始化时 dp 数组需要全部赋值为 1 计算 dp i 时 可以先找出所有的满足 pa
  • 阿里云 linux 的nginx 配置uni-app的H5前端项目vue,后端接口阿里云。

    背景 vue项目调用接口是阿里云的 H5网站也要部署到阿里云 2个不同的服务器 需要做nginx部署与api代理 1 端口配置 首先当然是买个阿里云服务器 这里是配置是linux系统 配置访问的域名 再接着 给网站配置需要的端口 如下 配置
  • Git工具使用全解

    Git工具使用全解 文章目录 Git工具使用全解 1 企业开发中的版本控制器 2 Git工具的使用场景 3 Git工具操作流程 三板斧操作 4 Git工具的安装与常用命令 4 1 Git的安装 4 2 Git基本操作指令 5 Git工具常见
  • 2023/2/14 大数据实习日志

    今日学习内容 一 VMware虚拟机安装部署CentOS7 链接 VMware虚拟机安装部署CentOS7 Moba远程连接 克隆 步骤 二 Docker入门 第一章内容 什么是docker 为什么使用docker docker与虚拟化 牛
  • python: SHA256算法的实现和消息的哈希散列值计算

    目录 1 SHA256 2 实现原理 2 1 消息预处理 2 2 使用的常量和循环移位函数 2 3 主循环 3 结果 4 对中文编码 1 SHA256 SHA256是SHA 2下的一个子算法 与之类似的还有SHA224 SHA384 SHA
  • ChatGPT爆火,对制造业销售增长的AI建议

    北京时间2023年2月8日 微软宣布推出由ChatGPT支持的最新版本人工智能搜索引擎Bing 必应 和Edge浏览器 ChatGPT的问世再次掀起AI热潮 接下来让我们一起试试与ChatGPT对话 看看传说中上知天文下知地理的他是如何回答
  • ChatGPT驱动下,网站AI客服该如何进步和创新

    在ChatGPT这个AI智能的驱动下 网站AI客服在进步和创新方面有很多潜力 由于GPT模型的强大语言处理能力和智能对话技巧 使得网站AI客服能够更准确和流畅地与用户交互 looklook今天总结了一些网站AI客服智能的进步和创新方向 以供
  • PLSQL安装步骤

    1 安装 下载PLSQL安装包 解压 默认安装 选择自己需要的版本安装 一路默认即可 2 添加客户端路径 解压instantclient 11 2 rar 放到自定义目录下 我是放在D盘下的Tools目录 没有配置客户端 是无法登陆的 所以
  • 什么是LLM大语言模型?

    什么是LLM大语言模型 大语言模型 英文 Large Language Model 缩写LLM 也称大型语言模型 是一种人工智能模型 旨在理解和生成人类语言 它们在大量的文本数据上进行训练 可以执行广泛的任务 包括文本总结 翻译 情感分析等
  • 美化你的Typora —— 关于MarkDown文档和newsprint.css的一点折腾

    这篇文章起源于我想美化一下Markdown样式 我在Typora官方的newsprint风格的基础上对其css进行了一系列的微调 提升了美观度和易用性 解决了如图像缩放分辨率降低 中英文字体设置等问题 文章目录 0 美化前后效果对比 1 代
  • [转] 解读IntelliJ IDEA的优缺点

    昨天去TW参加了pre class 就是类似于新员工入职前的培训 有很多很cool的东西 给我印象最深的就是IntelliJ IDEA了 coder么 刚才在网上搜了搜 发现很少有她的介绍资料 所以贴过来一个让大家看看 文章中有一句话值得大
  • ucGUI3.9版本快速移植构建

    ucGUI3 9版本快速移植构建 移植前提条件 涉及文件 移植过程 修改绘制驱动文件 修改配置文件 打包进工程 涉及的资源获取 在之前的博客中移植了STemwin5 32版本的 最近更换了 GD芯片所以STemwin没法用了 只有移植emw