s3c2440移植ucGUI

2023-11-03

编译环境:ADS1.2

开发板:TQ2440

主要参考这篇文章:stm32-UCGUI-完美移植

ucGUI版本:3.90    ucGUI3.90下载地址:UCGUI最新3.90版源码

屏幕:联想VGA电脑屏幕,最大分辨率1024x768

(1)解压源码,将Sample/GUI_X/GUI_X.c复制到Start/Config里面,然后将Start/Config和Start/GUI复制到工程文件夹ucGUI里面,然后拖动到ucGUI文件夹到工程里面,文件比较多,加载了十几秒

(2)然后打开GUIConf.h配置

#define GUI_OS                    (0) //没有ucos
#define GUI_SUPPORT_TOUCH         (0) //没有触摸屏
#define GUI_SUPPORT_UNICODE       (0)  //没有中文
#define GUI_DEFAULT_FONT          &GUI_Font8x16//字体宽8高16
#define GUI_ALLOC_SIZE          1024*1024  //动态内存大小1MB,用于WM和Memory设备
#define GUI_WINSUPPORT            1  //窗口管理器要
#define GUI_SUPPORT_MEMDEV        1  //内存设备要
#define GUI_SUPPORT_AA            1 //抗锯齿要

(3)然后打开LCDConf.h配置

#define LCD_XSIZE      (640)   //屏幕宽
#define LCD_YSIZE      (480)   //屏幕高
#define LCD_BITSPERPIXEL (16)  //RGB565
#define LCD_FIXEDPALETTE (565) 
#define LCD_SWAP_RB 1//红蓝色反转
#define LCD_CONTROLLER -1//无控制器
#define LCD_SWAP_BYTE_ORDER 0//为了去掉warning
extern void screen_Init(void);
#define LCD_INIT_CONTROLLER()   screen_Init(); //屏幕初始化函数,需要根据自己的板子写

(4)然后打开GUI/LCDDriver/LCDDummy.c修改

(5)修改LCD_L0_SetPixelIndex函数

void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) {
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Write into hardware ... Adapt to your system */
  {    
      putPixel(x,y,PixelIndex);//就添加这一句,在x,y位置用颜色pixelIndex画像素,需要实现putPixel
  }
}
(6)修改 LCD_L0_GetPixelIndex函数
unsigned int LCD_L0_GetPixelIndex(int x, int y) {
  LCD_PIXELINDEX PixelIndex;
  /* Convert logical into physical coordinates (Dep. on LCDConf.h) */
  #if LCD_SWAP_XY | LCD_MIRROR_X| LCD_MIRROR_Y
    int xPhys = LOG2PHYS_X(x, y);
    int yPhys = LOG2PHYS_Y(x, y);
  #else
    #define xPhys x
    #define yPhys y
  #endif
  /* Read from hardware ... Adapt to your system */
  {
    PixelIndex = getPixel(x,y);/* 就修改这一句,需要实现getPixel*/
  }
  return PixelIndex;
}

(7)还有就是CORE/LCD.h中基本数据类型,注意一下

(8)编译后会出现错误:

Error   : L6218E: Undefined symbol main (referred from kernel.o).

百度了一下,说只需要添加个int main(){}空函数即可,不知道为什么,总之我的板子的汇编是跳到Main()函数的,所以在Main入口函数文件里添加个int main(){}即可

(9)添加测试代码

void Main(void){
  GUI_Init();
  GUI_DispString("hello world!\n");
}
int main(){}  

就可以在屏幕0,0开始处打印hello world

(10)添加对话框测试代码,从别的地方搬来的:

#include "GUI.h"
#include "WM.h"
#include "DIALOG_Intern.h"
#include "FRAMEWIN.h"
#include "TEXT.h"
#include "LISTBOX.h"
/*********************************************************************
*
对话框可以基于阻塞(使用GUI_ExecDialogBox())或非阻塞(使用GUI_CreateDialogBox())
方式创建。必须首先定义一个资源表,以指定在对话框中所要包括的所有小工具。下面的示例说明了创
建资源表的方法:
对话框中所要包括的任何小工具都必须使用<WIDGET>_CreateIndirect()函数来间接创建。
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
    { FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0 },
    { BUTTON_CreateIndirect, "OK", GUI_ID_OK, 100, 5, 60, 20 },
    { BUTTON_CreateIndirect, "Cancel", GUI_ID_CANCEL, 100, 30, 60, 20 },
    { TEXT_CreateIndirect, "LText", 0, 10, 55, 48, 15, TEXT_CF_LEFT },
    { TEXT_CreateIndirect, "RText", 0, 10, 80, 48, 15, TEXT_CF_RIGHT },
    { EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 60, 55, 100, 15, 0, 50 },
    { EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 60, 80, 100, 15, 0, 50 },
    { TEXT_CreateIndirect, "Hex", 0, 10, 100, 48, 15, TEXT_CF_RIGHT },
    { EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, 60, 100, 100, 15, 0, 6 },
    { TEXT_CreateIndirect, "Bin", 0, 10, 120, 48, 15, TEXT_CF_RIGHT },
    { EDIT_CreateIndirect, NULL, GUI_ID_EDIT3, 60, 120, 100, 15 },
    { LISTBOX_CreateIndirect, NULL, GUI_ID_LISTBOX0,10, 10, 48, 40 },
    { CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 10, 140, 0, 0 },
    { CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK1, 30, 140, 0, 0 },
    { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 60, 140, 100, 20 },
    { SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 10, 170, 150, 30 }
};
/*********************************************************************
*
对话框过程函数
上述示例使用如下所示的空白对话框过程函数创建。在创建任何对话框过程函数时,该基本模板都将
作为起始点:
*/
static void _cbCallback(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* MainTask
*/
void Fun(void) {
    //对于该示例,对话框显示时会有下列代码行:
    GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate),&_cbCallback, 0, 0, 0);
}
/*
创建对话框后,所有资源表中的小工具都将可见。尽管这些小工具在上面的屏幕截图中可见,但它们
是以 “空”的形式出现的。这是因为对话框过程函数尚未包含初始化单个元素的代码。小工具的初始
值、由它们所引起的行为以及它们之间的交互作用都需要在对话框过程中进行定义。
*/
void Main(void){
   GUI_Init();
   Fun();
}
int main(){}

(11)效果图:


(12)触摸屏,汉字,鼠标以后再说





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

s3c2440移植ucGUI 的相关文章

  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • unity-3d:打飞碟游戏

    unity 3d 打飞碟游戏 1 编写一个简单的鼠标打飞碟 Hit UFO 游戏 uml类图 Director DiskData DiskFactory FirstController FlyActionManager Interface
  • VMware虚拟机中如何配置静态IP,以及DNS服务器

    参考的是这位同学的博客 写这篇博客是为了自己学习用 到时候忘记了可以翻出来看看 这个是VMware的草图 1 查看网关 以及网段 将VMnet8中 使用本地DHCP服务将IP地址分配给虚拟机 的选项去掉 然后点击NAT设置 记住这上面的NA
  • Nginx具体配置(三)

    一 Nginx配置实例 反向代理 实例一 1 1 实现效果 在Windows浏览器地址栏中输入www 123 com 跳转到Linux系统中的tomcat主页面 访问Nginx 192 168 92 130 80 访问Tomcat 192
  • 在colab上部署novelAI

    目录 一 获取模型 1 使用他人提供的模型链接直接在Google云端硬盘中添加快捷连接 推荐 2 自己上传模型到Google云端硬盘 二 colab上进行操作 第一步 加载Google云盘 第二步 克隆git仓库 第三步 安装依赖 第四步
  • Spring Boot 学习研究笔记(十七) -Spring boot JPA的复杂查询

    Spring boot JPA的复杂查询 一 JpaSpecificationExecutor 接口查询方式 1 JpaSpecificationExecutor接口 JPA 提供动态接口JpaSpecificationExecutor 利
  • JavaScript 算法 -- 贪心算法

    文章目录 贪心算法 例题一 分饼干 例题二 买卖股票的最佳时机 II 贪心算法 贪心算法是算法设计的一种方法 期盼通过每个阶段的局部最优选择 从而达到全局的最优 但最后的结果不一定最优 例题一 分饼干 param number g 胃口 p
  • 【机器学习算法】感知机模型

    文章目录 1 感知机模型 2 收敛性证明 Novikoff定理 3 感知机对偶形式 4 感知机的缺点 5 感知机的几个变形 5 1 投票感知机 5 2 平均感知机 1 感知机模型 感知机模型是一个二分类的模型 它通过形如 y w x
  • 前后端交互之解决跨域问题!!!!

    报错 XMLHttpRequest cannot load http 127 0 0 1 8080 detail all No Access Control Allow Origin header is present on the req
  • 小娜老师的讲义-Docker的管理工具们(Kubernetes)

    Kubernetes k8s 是自动化容器操作的开源平台 这些操作包括部署 调度和节点集群间扩展 如果你曾经用过Docker容器技术部署容器 那么可以将Docker看成Kubernetes内部使用的低级别组件 Kubernetes不仅仅支持
  • Python学习--函数与Lambda表达式

    链接 DataWhale函数与Lambda表达式 目录 1 函数 函数的定义 函数的调用 函数的返回值 函数文档及注解 函数参数 1 位置参数 2 默认参数 3 可变参数 4 关键字参数 5 命名关键字参数 6 参数组合 变量作用域 内嵌函
  • 一个能干掉90%候选人的Kafka面试连环炮!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 写在前面 2 如何保证宕机时数据不丢失 3 多副本冗余的高可用机制 4 多副本之间数据如何同步 5 ISR到底指的什么东西 6 acks参数的含义 7 最后
  • Less 18 (请求头注入--user-agent注入)

    文章目录 1 题目分析 2 构造SQL 3 手工注入 4 使用python进行注入 5 SQLmap注入 1 题目分析 首先我们来分析一下题目 经过尝试 我们知道 当我们输入正确的用户名和密码的时候 后台会将User Agent返回到屏幕上
  • 全国计算机等级考试题库二级C操作题100套(第89套)

    第89套 给定程序中 函数fun的功能是 求出形参ss所指字符串数组中最长字符串的 长度 其余字符串左边用字符 补齐 使其与最长的字符串等长 字符串数组中共 有M个字符串 且串长
  • 正点STM32F407核心板+ESP8266实现简单通信(详细讲解)

    1 ESP8266固件库的烧录 如果用串口助手连上板子 给8266发送AT指令发现老是报错error 可以重新烧录一下固件库 正点的ESP8266资料下载网址 http www openedv com thread 308397 1 1 h
  • tcp连接多久会自动断开_K8s 节点断开连接后,本在运行的 Pod 会如何?

    在工作节点与主节点断开连接后 工作节点上的 Pod 是什么状态 是否在继续运行 Kubernetes 控制器又在做什么 本文对此进行了实例研究 一一解答 作者 Bhargav Bhikkaji 翻译 Bach 才云 校对 星空下的文仔 才云
  • 微信小程序云开发之初体验(详细教程)

    微信小程序云开发之初体验 小程序云开发是微信最近推出的新的一项能力 它弱化了后端以及运维的概念 开发者无需搭建服务器 使用微信平台提供的api即可完成核心的业务开发 目前提供三大基础能力支持 云函数 在云端运行的代码 微信私有协议天然鉴权
  • 刷脸支付普及逐渐攀升产业生态逐渐形成

    刷脸让支付生态重返硬件年代 刷脸支付机具的生产 销售 铺设 维护涉及大量成本 客观存在压货风险大 后期服务难 地推成本高等问题 模式重而受益低 导致银行和大多数中小支付机构入局刷脸支付的意愿则整体薄弱得多 银联高调入局之际 2019 也是支
  • 《啊哈算法》学习——桶排序

    学习啊哈算法第一天 第一章第一节最快最简单的桶排序 问题描述 班级五名同学的分数排序 十分制 问题分析及思路 借助大小为10的一维数组 初始化为0 意味该分数没有人得 接下来处理分数 如有两个人得5分 即将a 5 2 记录下分数即出现次数后
  • Spring Validation 接口入参校验

    一 前言 JSR 是 Java Specification Requests 的缩写 含义为 JAVA 规范提案 JSR 303 Bean Validation 规范 正是一套基于 JavaBean 参数校验的标准 Hibernate Va
  • s3c2440移植ucGUI

    编译环境 ADS1 2 开发板 TQ2440 主要参考这篇文章 stm32 UCGUI 完美移植 ucGUI版本 3 90 ucGUI3 90下载地址 UCGUI最新3 90版源码 屏幕 联想VGA电脑屏幕 最大分辨率1024x768 1