第28章emWin(ucgui)STemWin多任务设计(模拟器)
SIMPL Windows基础教程 - 最终版
快思聪SIMPL Windows编程语言初级教程目录第一章快思聪SIMPL WINDOWS (5)概览 (5)关于初级教程 (5)快思聪开发软件 (6)SIMPL Windows (6)快思聪VisionTool Pro-e (6)DEAL TM for Windows (6)Media Manager TM System Builder (6)D3 Pro TM (7)数据库(Database) (7)产品目录光盘 (7)快思聪控制系统 (9)为什么对控制系统编程? (9)控制系统组件 (9)主机 (9)网络控制模块 (10)Plug-in控制卡 (10)用户界面 (10)触摸屏 (10)键盘(按键面板) (10)无线摇控界面 (10)用户设备 (10)控制方式 (11)继电器控制 (11)串口通信控制 (11)红外 (11)自定义串量 (13)RS232,RS422,RS485 (13)MIDI(数字音乐设备接口) (14)模拟电压 (14)自定义快思聪接口界面 (14)Cresnet (14)第二章SIMPL WINDOWS编程 (16)SIMPL介绍 (16)函数库 (16)设备函数 (16)逻辑函数 (16)函数属性 (16)输入 (17)输出 (17)信号类型 (18)数字量 (18)模拟信号量 (18)串量 (19)特殊信号0和1 (19)逻辑波跟逻辑解决方案 (19)用户界面编程 (21)按钮动作 (21)按钮反馈 (21)子页(仅用于触摸屏) (23)模拟显示(仅用于触摸屏) (23)间接文本(仅用于触摸屏) (24)用SIMPL W INDOWS来创建一个程序 (25)编程步骤 (25)基本编程规则 (25)建立一个系统 (25)网络硬件 (28)控制插卡 (29)串口设备 (29)用户设备 (30)网络ID (30)配置设备 (31)快思聪网络设备 (31)以太网设备 (32)串口设备 (33)触摸屏 (33)连接信号 (34)定义用户界面信号 (34)使用逻辑函数 (35)第三章逻辑函数编程 (37)概述 (37)逻辑函数的类型 (37)基本逻辑 (38)NOT函数 (38)OR函数 (38)AND函数 (40)Buffer函数 (41)状态逻辑 (46)Set/Reset Latch函数 (46)Toggle函数 (47)Interlock函数 (49)基于时间的逻辑 (52)One Shot 系列 (52)Multiple One Shot (53)Retriggerable One Shot (53)Delay Symbol (54)Oscillator Symbol (55)模拟逻辑 (57)Analog Ramp函数 (57)Analog Initialize (58)Analog Preset函数 (59)Serial/Analog One-Shot (61)Modules模块 (61)Communication Settings (62)Compiling and Uploading Programs (64)第一章快思聪SIMPL Windows概览关于初级教程编写本教程的目的在于向程序设计人员介绍SIMPL windows编程技术以及如何应用快思聪控制系统,这包括对控制系统如何利用触摸屏和按钮作为用户界面的理解,通过这些界面,使用者可以发送一个信号(主要是逻辑函数)给控制系统处理后输出用以最终控制一个设备。
emwin快速设计界面的方法
emwin快速设计界面的方法EMWIN是一种基于嵌入式系统的快速设计界面的方法。
EMWIN为开发者提供了一套易用的图形用户界面(GUI)开发工具,使他们能够轻松创建具有高度可视化效果的应用程序。
要快速设计EMWIN界面,下面是一些方法和步骤可以帮助你:1. 熟悉EMWIN库和其官方文档:首先,你需要了解EMWIN库的基本知识和功能。
通过阅读EMWIN的官方文档,你将了解到EMWIN所提供的API和函数,并且可以学习如何使用它们来创建界面元素。
2. 设计界面布局:在开始编写代码之前,你应该先考虑和规划你的界面布局。
确定你的界面有哪些不同的区域和元素,例如按钮、文本框、图像等。
然后,决定它们的位置、大小和排列方式。
3. 使用EMWIN绘图函数:EMWIN提供了一系列的绘图函数,用于在屏幕上绘制不同的图形和界面元素。
你可以使用这些函数来绘制按钮、文本框、图像等。
根据你的设计,使用合适的绘图函数创建你的界面元素。
4. 添加交互和反馈:一个好的界面应该能够与用户进行交互,并给予相应的反馈。
EMWIN提供了事件处理机制,可以让你识别和响应用户的操作,例如点击按钮或者输入文本。
添加适当的事件处理代码,以便在用户与界面进行交互时产生正确和实时的反馈。
5. 进行测试和优化:在完成设计和编码后,进行测试是非常重要的。
确保你的界面能够正常工作,并且符合你的设计预期。
如果需要,优化代码和界面,以提高其性能和用户体验。
通过实践和不断的学习,你会逐渐熟悉EMWIN的开发流程和技巧,并能够快速设计出高效的界面。
记住,练习是提高的关键,不断尝试并改进你的设计方法,你将成为一个优秀的EMWIN界面设计师。
第一章:emwin介绍
第1章e m W i n介绍本期教程开始带领大家了解一下STemWin的基本知识,其实确切的讲应该叫emWin基础知识,由于教程使用的开发板是ST的微控制器,所以就把名字统一命名成STemWin(为什么叫STemWin,在下面会有详细的讲解)。
1.1 STemWin,emWin,μCGUI之间的关系1.2 SEGGER公司介绍1.3 STemWin介绍1.4 STM32F103和407跑STemWin性能测试1.5 STemWin论坛1.6 总结1.1S T e m W i n,e m W i n,μC G U I之间的关系这个放在最开头进行说明,因为很多的初学者比较的迷惑。
对于一些刚学GUI的用户来说,知道μCGUI的比较多,而不知道所谓的emWin或者STemWin。
这个并不奇怪,主要是因为大部分人只知道SEGGER公司的做的JLINK,而不知道他们还有RTOS和相关的中间件(中间件的意思就是基于RTOS的文件系统,GUI,USB主机和设备协议栈等)。
1.1.1μCGUI在国内比较火的原因μCGUI在国内前几年比较火的原因有三点:●一个是μCOS-II在国内的推广,自从Micrum公司出的那本《嵌入式实时操作系统μCOS-II》发布之后,国内关于μCOS-II的资料就是普天盖起,再加上各种培训机构和开发板的推广,μCOS-II就在国内火起来了。
μCOS-II火的同时,它配套的中间件,特别是μCGUI就跟着在国内火了起来。
●前几年国内有一个μCGUI的论坛,这个论坛在国内的μCGUI方面应该算是做得最好的,特别是那个站长在μCGUI方面的研究,这位站长对于μCGUI在国内的发展功不可没。
●还有一个原因就是μCGUI是带有源码的,很多时候可以通过修改部分的源码实现一些特殊的功能,现在网上流传的μCGUI的源码已经不知道经过多少人的手被修改过,最原始的的代码已经在官网上面找不到了。
1.1.2emWin和μCGUI的关系首先要明白,这两个GUI是一个东西。
Windows任务管理器的设计与实现
Windows任务管理器的设计与实现毕业设计(作业)毕业指导学生学院系专业学生要求交199windows任务管理器设计与实现年12月19日XXXX::::::::摘要据国外研究公司统计随着个人电脑进入千家万户,电脑操作系统中的任务管理器也越来越为越来越多的用户所熟悉和使用。
任务管理器是一个在视窗系统中管理应用程序和进程的工具。
它通常由视窗操作系统提供,并有提供增强功能的第三方软件。
通过任务管理器,用户可以轻松查看当前运行的程序、进程、用户、网络连接以及系统对内存和CPU资源的使用情况,并可以强制结束一些程序和进程。
此外,用户可以监控系统资源的使用。
视窗任务管理器首次出现在微软公司1998年发布的视窗98操作系统中。
从那以后,微软视窗操作系统的所有版本都集成了任务管理器。
任务管理器不是视窗系统的专利。
它广泛用于各种操作系统。
苹果的苹果操作系统中有一个类似的活动监视器,基于Linux的ubuntu操作系统中有一个类似的功能系统监视器窗口任务管理器提供有关计算机性能的信息,并显示有关计算机上运行的程序和进程的详细信息。
如果您连接到网络,您还可以查看网络状态,并快速了解网络如何工作。
它的用户界面提供了六个菜单项,包括文件、选项、视图、窗口、关机、帮助,以及五个选项卡,包括应用程序、进程、性能、网络和用户项目的设计是一个模拟视窗任务管理器开发的视窗过程管理软件。
主要设计是一个基于窗体的C#程序。
标签控件放置在主对话框上,创建了应用程序、过程和性能的三个页面。
标签控件用于选择和显示页面。
这三个页面分别用于显示当前运行的窗口程序、进程和进程模块以及系统资源使用情况该程序还实现了结束任务和管理流程的基本功能。
在的设计过程中,任务、进程、线程模块和系统资源使用等信息可以通过调用窗口应用编程接口函数来获得最后,在Windows10系统上对系统进行了测试,实现了流程管理的基本功能。
关键词:任务经理;螺纹;过程;API条目1目录摘要.................................................................................................................. .. (i)第一章简介 (1)1.1项目背景:.............................................1 1.2国内外研究现状;................................1 1.3研究意义.............................的主要研究内容.................1 1.4的论文简要介绍了MicrosoftVisualStudio的开发环境.............................2 1.5。
emWin522(uCGUI)图形用户接口移植详细实例_STM32_2013_12_30
emWin 5.22 (uCGUI) 图形用户接口移植实例——STM32作者:Ach日期:2013年12月29日联系方式:ox000008@1.概要移植图形用户接口的好处是不言而喻的。
本文图文并茂地介绍了一个emWin 5.22(uCGUI)的移植实例。
文章具体分为emWin简介,硬件平台简介,开发环境及项目简介,移植过程以及总结几个部分。
2.emWin简介emWin是一种高效的而图形用户界面,是我们能够摆脱处理器和显示控制器而更专注于GUI的设计。
这里借用STemWin的一幅图来说明emWin的作用和结构。
它通过LCD及GUI的配置来驱动底层硬件,而应用程序又是通过调用emWin来实现各种GUI。
5.22版的emWin带有许多常用的显示控制器的驱动(在参考手册Display Driver一章中有详细介绍),因此为我们移植带来了诸多方便。
emWin的更详细的内容可参照它的参考手册。
图1. emWin在项目中的结构3.硬件平台简介笔者使用的是一块以STM32F103VET6为核心的ARM开发板,没有外部的SRAM及Flash。
显示屏为2.8”320*240的彩色液晶屏,屏的驱动芯片为ILI9341(emWin 5.22带有它的驱动)。
屏与CPU 的连接方式为该ARM核心所特有的FSMC_SRAM方式,访问LCD内容时操作就如同读写SRAM一样方便。
如果你想使用其它硬件平台来移植emWin,本文亦有一定的参考价值。
希望本文能助你成功移植emWin。
图2. 硬件平台4.开发环境简介笔者所使用的开发软件为MDK-ARM 4.70。
项目模板使用的是STemWin库中的(可从ST官方下载)。
图3. 项目截图如图,项目下面有3个文件夹,其中Appli存放的是应用层的程序,第二个文件夹就如文件名,存放了emWin5.22所有部件,第三个文件夹存放了一些STM32及其它的库。
具体见附件。
5.移植过程有了MDK-ARM以及STemWin库,整个移植过程应该比较简单。
[STemWin教程入门篇]第一期:emWin介绍
[STemWin教程⼊门篇]第⼀期:emWin介绍特别说明:原创教程,未经许可禁⽌转载,教程采⽤回复可见的形式,谢谢⼤家的⽀持。
armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin⼯程已经全部建⽴,链接如下:SEGGER公司介绍了解emWin之前,先了解⼀下SEGGER这家公司,了解⽣产商才能对emWin有更加全⾯的认识。
SEGGER公司成⽴于1997年,到现在的2013年,有差不多16年的历史了,这家公司主要有两个office,⼀个是在德国的Hilden,另个在美国的 Massachusetts。
官⽹还有⼀个他们⼯作地⽅的照⽚,看着很不错,我这⾥也把这个照⽚贴上这家公司的产品主要有三个⼤的⽅向,下⾯分别的说⼀下:RTOS和中间件embOS (Real Time Operating System)embOS/IP (TCP/IP Stack)emWin (Graphic Software & GUI)emFile (File System)emUSB Device (USB Device Stack)emUSB Host (USB Host Stack)J-Link Debug ProbesJ - Link PROJ - Link ULTRA+J - Link PLUSJ - LinkJ - Trace Cortex-M3J - Trace ARMProduction ProgrammersFlasher ARMFlasher RXFlasher STM8Flasher ST7Flasher 5Flasher 5 PRO官⽹上⾯也有⼀个论坛,不过论坛的打开速度⽐较的慢,⽽且是英⽂的,问个问题也不太⽅便Energy Micro获得了SEGGER的授权,可以免费的使⽤,想了解其他信息的可以去官⽹查看,这⾥有⼏个官⽹张贴的,客户设计界⾯,设计的的确很好看。
其实话说回来,要想设计⽐较好的界⾯还是得⼿⼯设计,⽤控件很难做出这种效果,除⾮有这种效果的控件。
代码大全
本书简介本书精选了《代码大全(第2版)》中的精华内容,包括各章“要点(Key Points)”以及“核对表(CHECKLIST)”的全部内容,便于读者在工作学习中随时查阅,极具参考价值。
另外,本书还附有《深入解析Windows操作系统,第4版——Microsoft Windows Server 2003/Windows XP/Windows 2000技术内幕》第14章的内容,供广大读者试读。
本书适合计算机相关专业学生和教师、软件开发人员、IT专业人员以及计算专业知识爱好者阅读和参考。
目录第1章 欢迎进入软件构建的世界第2章 用隐喻来更充分地理解软件开发第3章 三思而后行:前期准备第4章 关键的“构建”决策第5章 软件构建中的设计第6章 可以工作的类第7章 高质量的子程序第8章 防御式编程第9章 伪代码编程过程第10章 使用变量的一般事项第11章 变量名的力量第12章 基本数据类型第13章 不常见的数据类型第14章 组织直线型代码第15章 使用条件语句第16章 控制循环第17章 不常见的控制结构第18章 表驱动法第19章 一般控制问题第20章 软件质量概述第21章 协同构建第22章 开发者测试第23章 调试第24章 重构第25章 代码调整策略第26章 代码调整技术第27章 程序规模对构建的影响第28章 管理构建第29章 集成第30章 编程工具第31章 布局与风格第32章 自说明代码第33章 个人性格第34章 软件工艺的话题第35章 何处有更多信息下载后 点击此处查看完整内容。
第1章 STemWin介绍
第1章S T e m W i n介绍本期教程开始带领大家了解一下STemWin的基本知识,其实确切的讲应该叫emWin基础知识,由于教程使用的开发板是ST的微控制器,所以就把名字统一命名成STemWin(为什么叫STemWin,在下面会有详细的讲解)。
1.1 STemWin,emWin,μCGUI之间的关系1.2 SEGGER公司介绍1.3 STemWin介绍1.4 STM32F103和407跑STemWin性能测试1.5 STemWin论坛1.6 总结1.1S T e m W i n,e m W i n,μC G U I之间的关系这个放在最开头进行说明,因为很多的初学者比较的迷惑。
对于一些刚学GUI的用户来说,知道μCGUI的比较多,而不知道所谓的emWin或者STemWin。
这个并不奇怪,主要是因为大部分人只知道SEGGER公司的做的JLINK,而不知道他们还有RTOS和相关的中间件(中间件的意思就是基于RTOS的文件系统,GUI,USB主机和设备协议栈等)。
1.1.1μCGUI在国内比较火的原因μCGUI在国内前几年比较火的原因有三点:●一个是μCOS-II在国内的推广,自从Micrum公司出的那本《嵌入式实时操作系统μCOS-II》发布之后,国内关于μCOS-II的资料就是普天盖起,再加上各种培训机构和开发板的推广,μCOS-II就在国内火起来了。
μCOS-II火的同时,它配套的中间件,特别是μCGUI就跟着在国内火了起来。
●前几年国内有一个μCGUI的论坛,这个论坛在国内的μCGUI方面应该算是做得最好的,特别是那个站长在μCGUI方面的研究,这位站长对于μCGUI在国内的发展功不可没。
●还有一个原因就是μCGUI是带有源码的,很多时候可以通过修改部分的源码实现一些特殊的功能,现在网上流传的μCGUI的源码已经不知道经过多少人的手被修改过,最原始的的代码已经在官网上面找不到了。
1.1.2emWin和μCGUI的关系首先要明白,这两个GUI是一个东西。
STM32F4 EMWIN开发手册介绍
图 1.1.1 STM32F4xx 库下载 下载解压后打开 Libraries 文件,打开后如图 1.1.2 所示,里面包含有 STM32F4xx 的标准外 设库和 DSP 库,DSP 库在 CMSIS 文件中,我们将 CMSIS 复制到我们基础工程的 FWLIB 文件 中。CMSIS 文件大概有 133M,里面包含有一些我们用不到的文件,而我们只用到 DSP 库,所 以在这里将这些不用的文件删除,最终只留下 Include 和 Lib 这两个文件。Include 为头文件, Lib 为针对不同的编译环境而做的 DSP 库,有 ARM,G++,GCC。因为我们使用的是 KEIL 所 以只留 ARM 这个文件,其他两个也删除掉,如果使用的是 IAR 就保留 GCC 这个文件。
333121886alientek探索者stemwin开发教程stm32f4emwin开发手册目录第一章stemwin无操作系统移植11移植准备工作12向工程添加文件13修改工程文件14触摸屏移植1215综合测试程序编写1716下载验证19第二章stemwin带操作系统移植2021移植准备工作2122向工程添加以及修改相应文件2123编写综合测试程序2424下载验证24alientek探索者stemwin开发教程stm32f4emwin开发手册第一章stemwin无操作系统移植我们在使用m3内核mcu的时候会移植ucgui来制作精美的uiucgui的高级版本就是emwin而stemwin是segger授权给st的emwin版本st的芯片可以免费使用stemwin而且stemwin针对st的芯片做了优化
图 1.1.3 设置 FPU 从图 1.1.3 中我们可以看出如果要使用 FPU 的话__FPU_PRESENT 和__FPU_USED 要为 1, 根据 arm_math.h 中的要求, 如果要使用 DSP 库的话还要定义 ARM_MATH_CM4 和__CC_ARM, 因此我们按图 1.1.4 所示添加__FPU_PRESENT,__FPU_USED,ARM_MATH_CM4 和 __CC_ARM 的定义。
第31章emWin(UCGUI)键盘输入(实体按键操作控件)
/* K3 键按下 实现 CANCEL 的功能 */
GUI_SendKeyMsg(GUI_KEY_ESCAPE, 1);
break;
(3)
case JOY_DOWN_U:
/* 摇杆 UP 键按下 实现删除字符功能,注意和 BACKSPACE 回格的区别*/
GUI_SendKeyMsg(GUI_KEY_DELETE, 1);
int i; int NCode; int Id; WM_HWIN hDlg; WM_HWIN hItem;
hDlg = pMsg->hWin; switch (pMsg->MsgId) {
case WM_INIT_DIALOG: FRAMEWIN_SetFont(pMsg->hWin, &GUI_Font13_ASCII); FRAMEWIN_SetTextAlign(pMsg->hWin, GUI_TA_HCENTER); for (i = 0; i < 2; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_EDIT0 + i);
/* K1 键按下 实现截图*/
BSP_OS_SemPost(&SEM_SYNCH);
break;
(1)
case KEY_DOWN_K2:
/* K2 键按下 实现 TAB 按键的功能*/
GUI_SendKeyMsg(GUI_KEY_TAB, 1);
break;
(2)
(4)
case KEY_DOWN_K3:
键盘输入设备使用 ASCII 字符编码,以便区分不同的字符。例如,键盘上只有一个“A”键,但大写的 “A”与小写的“a”拥有不同的 ASCII 编码 (分别为 0x41 和 0x61) STemWin 预定义字符编码
第29章emWin(ucgui)STemWin多任务(uCOS-III)
*/ int main(void) {
STM32-V5 开发板 STemWin 教程
bsp_Init(); /* 为了是 main 函数看起来更简洁些,我们将硬件初始化的代码封装到这个函数 */
MainTask(); }
在文件 MainTask.c
/* ********************************************************************************************************* * 函 数 名: main * 功能说明: c 程序入口 * 形 参:无 * 返 回 值: 错误代码(无需处理) ********************************************************************************************************* */ void MainTask(void) {
1. 时间基准全局变量,这个变量在 bsp_timer.c 文件里面进行了定义,由嘀嗒定时器中断进行调用,每 1ms
调用一次。
/* 全局运行时间,单位 1ms 最长可以表示 24.85 天,如果你的产品连续运行时间超过这个数,则必须考虑溢出问题
*/ __IO int32_t g_iRunTime = 0; /* ********************************************************************************************************* * 函 数 名: SysTick_ISR * 功能说明: SysTick 中断服务程序,每隔 1ms 进入 1 次 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void SysTick_ISR(void) {
基于ucGUI多任务系统的图形用户界面开发
基于ucGUI多任务系统的图形用户界面开发吴建鲁江苏自动化研究所,江苏连云港 (222006)E-mail:wujianlucool2006@摘要:图形用户界面是人与计算机进行交互的一种操作方式,它的质量直接影响着产品的推广和用户的使用效率。
针对嵌入式系统中图形用户界面应用的广泛需求,本文介绍ucos-II 和ucGUI在S1C33209上的移植过程,并在此基础上实现了ucGUI多任务系统中图形用户界面的开发。
关键词:ucos-II; ucGUI; 移植;图形用户界面1 引言与命令式用户界面(Command Line Iser Interface)不同,图形用户界面(Graphical User Interface,GUI)不需要用户通过输入专业性很强的抽象命令来操作计算机,而代之以窗口、图标、菜单等直观的图形或图标,再加上可以控制光标移动的指示装置来完成数据和控制命令的输入,从而实现对计算机的交互式操作。
由于这样的用户界面不需要记忆专门性很强的控制命令并且非常直观易懂,图形用户界面受到了普遍的欢迎[1]。
ucGUI是Micrium公司出品的一款针对嵌入式系统的开放源代码的优秀图形软件,它为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口。
适用于单任务或是多任务系统环境,并适用于任意LCD控制器和CPU下任何尺寸的真实显示与虚拟显示。
架构基于模块化设计,由不同的模块中的不同层组成。
采用100%的标准C代码编写,由一个LCD驱动层来包含所有对LCD的具体图形操作,ucGUI可以在任何CPU上运行。
在ucGUI单任务系统中,程序顺序的执行,一个软件单元的反应时间依赖于这个系统中所有其他单元的执行时间,实时行为变得极为有限。
为了增强实时性,采用ucGUI多任务系统,使用开放源代码ucos-II实时内核,把应用程序分割成不同的部分运行在不同的任务中,具有不同的优先级。
这样,任务的实时行为只受运行在更高优先级的任务影响,系统的实时性得到极大的改善。
第30章emWin(ucgui)指针输入设备(摇杆)
STM32-V5 开发板 STemWin 教程
30.3 五向摇杆操作游标
下面给大家演示一下通过开发板上面带的五向摇杆来操作屏幕上的游标。五向摇杆的驱动请看安富莱
STM32-V5 开发板_用户手册的第 20 章:按键 FIFO 教程。五项摇杆操作游标的程序主要分为两部分:
摇杆任务
STemWin 主任务
存储 PID 的当前状态。
上面两个函数的参数都是 GUI_PID_STATE * pState。GUI_PID_STATE 结构的定义如下:
typedef stPressed; U8 Layer; } GUI_PID_STATE; 各个参数表示的意义如下:
第1页 共5页
优 先 级:2 ********************************************************************************************************* */
static void AppTaskUserIF(void *p_arg)
#include "includes.h" #include "MainTask.h"
第3页 共5页
STM32-V5 开发板 STemWin 教程
int i; char acText[] = " Eric2013"; GUI_RECT Rect = {10, 10, 59, 59}; GUI_WRAPMODE aWm[] = {GUI_WRAPMODE_NONE,
State.y = Max; }
(7)
State.Pressed = (uKeyCode == JOY_DOWN_OK ) ? 1: 0;(8)
第31章emWin(UCGUI)键盘输入(实体按键操作控件)
// Get the handle of the edit widget
} break;
case WM_KEY: switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) { case GUI_KEY_ESCAPE: GUI_EndDialog(hDlg, 1); break;
STemWin 主任务:
#include "includes.h" #include "MainTask.h"
/*
********************************************************************************************************
case GUI_KEY_ENTER:
GUI_EndDialog(hDlg, 0);
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
// Id of widget
NCode = pMsg->Data.v;
// Notification code
uint8_t ucKeyCode;
(void)p_arg;
/* 避免编译器报警 */
while (1) {
bsp_KeyScan();
ucKeyCode = bsp_GetKey();
if(ucKeyCode != KEY_NONE)
{
switch (ucKeyCode)
{
case KEY_DOWN_K1:
数据存储至输入缓冲器之中。该函数不可从中断服务程序调用。该函数的参数和上面函数的参数是一样的。
第32章emWin(ucgui)窗口管理器之回调机制
} } 请注意,WM_PRE_PAINT 和 WM_POST_PAINT 消息在 WM_PAINT 消息发送前和后立即处理。
32.2 回调机制,无效化和渲染
WM 可在有或无回调例程时使用。大多数情况下,最好使用回调。 STemWin 为窗口和窗口对象 (小工具)提供回调机制的根本概念是一个事件驱动系统。因为在大多 数窗口式系统中,其原理是控制流不仅仅是从用户程序到图形系统,而且还从用户程序到图形系统,然后再 通过用户程序提供的回调例程返回用户程序。此机制通常称为 “好莱坞原则”(“不要打电话给我们,我们 会给你打电话的!”),窗口管理器需要它的主要目的是触发窗口重绘。这与传统编程相反,但是它能利用窗 口管理器的无效化逻辑。
第1页 共6页
STM32-V5 开发板 STemWin 教程
始终完全包含在其父窗口中,并在必要时会被裁剪。具有相同父窗口的多个子窗口被视为 “同属”窗口。 客户区
窗口的客户区就是其可用区域。如果窗口包含边框或标题栏,则客户区是内部的矩形区域。如果没有 这种边框,则客户区的坐标与窗口自身的坐标相同。 裁剪, 裁剪区域
32.2.3 背景窗口重绘和回调
初始化窗口管理器期间,会创建一个包含整个 LCD 区域的窗口作为背景窗口。此窗口的句柄为 WM_HBKWIN。WM 不会自动重绘背景窗口的区域,因为没有默认的背景颜色。也就是说如果创建了另一 个窗口然后将其删除,则删除的窗口仍然可见。需要指定例程 WM_SetDesktopColor()以便为重绘背景窗 口设置颜色。也可设置回调函数来处理此问题。如果如前所述创建然后删除了一个窗口,则回调例程将触发 WM 来确认背景窗口不再有效,并自动重绘它。后面会专门的做个例子给大家讲解这个问题。
STM32F4 EMWIN开发手册介绍
2
STM32F4 EMWIN 开发手册
ALIENTEK 探索者 STemWin 开发教程
第一章 STemWin 无操作系统移植
我们在使用 M3 内核 MCU 的时候会移植 UCGUI 来制作精美的 UI,UCGUI 的高级版本就 是 emWin, 而 STemWin 是 SEGGER 授权给 ST 的 emWin 版本, ST 的芯片可以免费使用 STemWin, 而且 STemWin 针对 ST 的芯片做了优化。本章我们将向大家介绍如何在 STM32F407 开发板上 移植 STemWin,在本章的移植过程中适配我们公司的 2.8 寸,3.5 寸,4.3 寸这三种不同尺寸的 屏幕。本章分为如下几个部分: 1.1 移植准备工作 1.2 向工程添加文件 1.3 修改工程文件 1.4 触摸屏移植 1.5 综合测试程序编写 1.6 下载验证
STM32F4 EMWIN 开发手册
ALIENTEK 探索者 STemWin 开发教程
EMWIN 开发手册
V1.0
−ALIENTEK STM32F4 EMWIN 开发教程
官方店铺: 技术论坛: 技术交流群: 333121886
第二章 STemWin 带操作系统移植 ............................................... 20
2.1 移植准备工作 .................................................................................................... 21 2.2 向工程添加以及修改相应文件 ......................................................................... 21 2.3 编写综合测试程序 ............................................................................................ 24 2.4 下载验证 ...........................................................................................ቤተ መጻሕፍቲ ባይዱ................ 24
emWin使用文档
目录一、emWin介绍------------------------------------------------------------------------------------------------ 11.1 emWin简介 ------------------------------------------------------------------------------------------- 11.2 emWin应用的软件架构--------------------------------------------------------------------------- 2二、《emWin用户手册》介绍及使用------------------------------------------------------------------- 22.1 《emWin用户手册》简介----------------------------------------------------------------------- 22.2 根据函数名查找库函数说明 -------------------------------------------------------------------- 32.3 根据功能查找库函数 ------------------------------------------------------------------------------ 3三、emWin开发过程中调用API及功能---------------------------------------------------------------- 43.1 通用小工具API -------------------------------------------------------------------------------------- 43.2 BUTTON API -------------------------------------------------------------------------------------------- 53.3 EDIT API ------------------------------------------------------------------------------------------------- 6四、搭建emWin的Windows仿真环境----------------------------------------------------------------- 74.1 仿真版本emWin文件介绍---------------------------------------------------------------------- 74.2 使用VS2010 仿真emWin ---------------------------------------------------------------------- 84.3 emWin仿真工程概览 ------------------------------------------------------------------------------ 9五、GUI_Builder --------------------------------------------------------------------------------------------- 185.1 简介--------------------------------------------------------------------------------------------------- 185.2 创建对话框----------------------------------------------------------------------------------------- 195.3 GUI_Builder的输出 ------------------------------------------------------------------------------- 205.4 如何使用C文件 -------------------------------------------------------- 错误!未定义书签。
emWin中文字体显示教程
emWin中文字体显示概述:本文档要紧介绍STemWin显示中文汉字的步骤,分为以下部份:汉字C文件字库的制作,显示文字UTF-8码的制作,程序实现。
一,汉字C文件字库的制作第一步:安装字体函数生成软件:如下安装完成后:电脑桌面显示图标如下第二步:创建自己想要的字体库:1、开始创建一个TXT格式的文本文件2、打开文本文件输入想要在VS2021中调试EMWIN界面显示的所需中文文字3、文字输入完成后,另存TXT文件为Unicode格式文件注意:另存文件名最好不要利用中文(建议取字体类型:如宋体:songFont),保留编码选项必然要选Unicode,最后保留在自己创建的文件夹中,文件夹最好不用中文(建议:保留字库的文件夹放在工程项目文件夹中)4、另存好文件后,打开第一步安装好的软件,初始界面如下字体类型选择以下教程只做国际标准字体显示,其他字体类型相信步骤一样,因此选择Standard点击OK,进入字体选项界面一、字体选择2字形3字体大小5、黄色圆框(字体显示方式:Pixels:像素点;Points:点),其被选中Points才能够选择字体大小,设置完成点击确信。
显现界面6、接下来:禁止所有字符然后读取(添加)前面所创建另存为Unicode编码格式的文件添加自己的文件后,另存文件保留文件在第二步-3的文件夹中,也能够从头创建,但前提是不用利用中文文件夹名,保留的.c文件也不用中文。
保留后在文件夹中会生成一个c_file(.c文件)打开大体上是:(显现很多XXX组成的实际中文字)致此,汉字C文件字库的制作完成。
二,显示文字UTF-8码的制作Step1:创建一个TXT格式的文本文件,把要显示的汉字写入其中。
Step2:文字输入完成后,另存TXT文件为UTF-8格式的文件,文件名为数字或英文字母。
Step3:打开软件:界面如下:点击A,进入文件选择,要选择的文件是Step2:中保留的文件,然后点击B进行转换,这时,在同一文件夹中会显现与Step2同名的c_file(即.c文件),此文件确实是接下来复制到模拟器工程中需要显示的中文汉字UTF-8码,(格式如:)注:此步骤的转化方式多样:还能够在线网页等。
基于.NET的记事本设计
电子设计工程Electronic Design Engineering第28卷Vol.28第24期No.242020年12月Dec.2020收稿日期:2020-02-03稿件编号:202002006作者简介:孟令增(1997—),男,山东潍坊人,硕士研究生。
研究方向:MES 系统开发。
Notepad ——记事本,是Windows 系统中自带的一款小巧的纯文本编辑器,具有打开速度快,占用内存小,工作效率高等特点,在只记录纯文本文字时,记事本成为最好用的软件之一,是现代电脑办公的得力助手[1]。
在相同的文本情况下,使用微软OneNote [2]、World 和Notpad 保存的文件大小就不相同。
因此,在只记录文本的情况下,应尽量选择记事本保存。
本次开发的目的是创建一个文本编辑器,同时介绍Winform 中的属性、事件以及各种控件的使用场景。
开发的文本编辑器能够满足文字的编辑、修改、保存等基本操作,并且使用多文档界面开发,能同时记录多个事件,较为方便。
开发使用的软件是Visual Studio 2019专业版本,开发语言为C#。
1开发环境和语言VS 是Microsoft Visual Studio 的简称,是美国Microsoft 公司推出的开发工具包。
VS 基本包含了整个软件开发周期中所需要的工具,是一个基本完整基于.NET 的记事本设计孟令增,王中训(烟台大学光电信息科学技术学院,山东烟台264005)摘要:记事本作为一款纯文本编辑器,以其小巧灵活获得了人们的青睐。
为编写一款记事本程序,基于.NET 框架,结合Visal Studio 2019编程软件中的Winform 窗体程序,采用输入输出流、事件处理等方法,编写了一个记事本程序并通过了运行。
该记事本有打开、新建、保存、修改字号和字体、另存为等主要功能。
最后,还对该程序进行了改进,加入了更符合人性化的对话框提示,可以判断用户是否修改过文本再进行关闭保存、另存为操作,使其更符合逻辑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第28章STemWin多任务设计(模拟器)本期教程主要是跟大家讲一下STemWin多任务的设计,官方手册对于这部分内容在开头的时候讲的非常好,本期教程主要是把这部分内容给大家做个介绍,并在模拟器上跑一下多任务。
28. 1 单任务系统(超级循环)28. 2 多任务系统:一个任务调用emWin28. 3 多任务系统:多个任务调用emWin28. 4 官方推荐运行方式28. 5 运行多任务(模拟器)28. 6 总结28.1单任务系统(超级循环)STemWin可以配置为不使用RTOS,这时就是整个程序在一个超循环中运行。
通常,软件的所有组件都进行周期性调用。
因为未使用实时内核,所以软件的实时部分必须使用中断。
此类型系统主要用于小型系统,或者实时操作特性无关紧要时。
平时大家写裸机程序的时候基本都是下面这种方式:void main (void){/* 初始化硬件 */HARDWARE_Init();/* 初始化软件组件 */XXX_Init();YYY_Init();/* 超级循环: 规则的调用所以软件组件*/while (1){/* Exec all compontents of the software */XXX_Exec();YYY_Exec();}}加入了STemWin的初始化函数后就是下面这样:void main (void){/* 初始化硬件 */HARDWARE_Init();/* 初始化软件组件 */XXX_Init();YYY_Init();GUI_Init(); //初始化emWin/* 超级循环: 规则的调用所以软件组件*/while (1){/* Exec all compontents of the software */XXX_Exec();YYY_Exec();GUI_Exec(); //调用刷新函数}}关于emWin的使用没有实际的限定。
照例,需要在调用GUI_Init()之后才能使用该软件。
之后,任何API 函数都可使用。
如果使用了窗口管理器的回调机制,则必须定期调用emWin更新函数。
这通常通过从超循环内调用GUI_Exec()来完成。
各种模块化函数,如GUI_Delay()和GUI_ExecDialog()不应在循环中使用,因为它们会阻断其它软件模块。
可使用不支持多任务(#define GUI_OS 0)的默认配置;不需要内核接口例程。
●优点因为未使用实时内核 (->较小的ROM大小,仅一个堆栈->用于堆栈的RAM较少),所以不存在使用RTOS中的抢先/同步问题。
●缺点超循环类型程序的大小如果超出某个值,会变得很难维护。
实时特性较差,因为一个软件组件无法被 任何其它组件中断 (只能通过中断)。
这意味着一个软件组件的反应时间取决于系统中所有其它组件的执行时间。
28.2多任务系统:一个任务调用emWin使用了实时内核(RTOS)。
用户程序分成不同部分,在不同的任务中执行,这些任务通常具有不同的优先级。
通常,实时关键任务 (需要一定的反应时间)将具有最高优先级。
一个单任务用于用户界面,它调用emWin函数。
此任务在系统中通常具有最低优先级,或至少是最低优先级任务中的一个(一些统计任务或简单的空闲时间处理可能具有更低的优先级)。
中断可以但不是必须用于软件的实时部分。
如果使用了窗口管理器的回调机制,则必须从调用emWin的任务定期调用emWin更新函数(通常为GUI_Exec()、GUI_Delay())。
由 于emWin仅由一个任务调用,所以对于emWin而言,它与在单任务系统中的使用是相同的。
可使用不支持多任务(#define GUI_OS 0)的默认配置;不需要内核接口例程。
可使用任何实时内核,商用的或专用的。
●优点该系统的实时特性非常优秀。
任务的实时特性仅受以较高优先级运行的任务的影响。
这意味着对在低 优先级任务中运行的程序组件的更改完全不会影响实时特性。
如果从低优先级任务执行用户界面,则意味着用户界面的更改不影响实时特性。
因此,使用这种系统可轻松将软件的不同组件分配给开发团队的不同成员,成员彼此间可以高度独立地工作。
●缺点用户需要拥有实时内核(RTOS),这需要资金并会耗费ROM和RAM(用于堆栈)。
此外,还必须考虑任务的同步,以及如何将信息从一个任务传输到另一个任务。
28.3多任务系统:多个任务调用emWin使用了实时内核(RTOS)。
用户程序分成不同部分,在不同任务中执行,这些任务通常具有不同的优先级。
通常,实时关键任务 (需要一定的反应时间)将具有最高优先级。
多个任务用于用户界面,调用emWin 函数。
这些任务在系统中通常具有低优先级,所以它们不影响系统的实时特性。
中断可以但不是必须用于软件的实时部分。
如果使用了窗口管理器的回调机制,则必须从调用emWin的一个或多个任务定期调用emWin更新 函数 (通常为GUI_Exec()、GUI_Delay())。
不可使用不支持多任务(#define GUI_OS 0)的默认配置。
配置需要启用多任务支持并定义从中调用emWin的任务的最大数目 (摘自GUIConf.h): #define GUI_OS 1 // Enable multitasking support#define GUI_MAX_TASK 5 // Max. number of tasks that may call emWin内核接口例程是必需的,并需要与正在使用的内核匹配。
可使用任何实时内核,商用的或专用的。
●优点该系统的实时特性非常优秀。
任务的实时特性仅受以较高优先级运行的任务的影响。
这意味着对在低 优先级任务中运行的程序组件的更改完全不会影响实时特性。
如果从低优先级任务执行用户界面,则意味着用户界面的更改不影响实时特性。
因此,使用这种系统可轻松将软件的不同组件分配给开发团队的不同成员,成员彼此间可以高度独立地工作。
●缺点用户必须拥有实时内核(RTOS),这需要资金并会耗费部分ROM和RAM(用于堆栈)。
此外,还必须考虑任务的同步,以及如何将信息从一个任务传输到另一个任务。
28.4官方推荐运行方式上面介绍了三种STemWin的运行方式,下面介绍下官方推荐的运行方式:●仅从一个任务调用emWin更新函数(即GUI_Exec()、GUI_Delay()),这有助于保持程序结构清晰。
如果在您的系统中有足够的RAM,则指定一个任务 (具有最低优先级)来更新emWin。
如下面示例所示,此任务将不断调用GUI_Exec(),且不进行任何其它操作。
●保持实时任务 (它们确定I/O、接口、网络等方面的系统特性)与调用emWin的任务分开,这有助于确保最佳的实时性能。
●如果可能,仅为用户界面使用一个任务,这有助于保持程序结构简单并简化调试工作。
(当然,这不是必须的,而且可能在一些系统中不适合。
)官方推荐的这几点比较的笼统,后面我会在教程中再跟大家详细讲解。
28.5运行多任务(模拟器)这个例子在模拟器中的位置:实际运行效果如下:下面把相关的代码跟大家解释下:#ifndef SKIP_TEST#include <stddef.h>#include "GUI.h"#include "FRAMEWIN.h"#if GUI_OS == 0#error Multitasking sample requires task awareness (#define GUI_OS 1)#endif/********************************************************************* Define how to create a task and start multitasking**********************************************************************/#ifndef WIN32#include "RTOS.h" /* Definitions for embOS */#define CREATE_TASK(pTCB, pName, pFunc, Priority, pStack) OS_CREATETASK(pTCB, pName, pFunc, Priority, pStack) #define START_MT() OS_Terminate(0)#define Delay(t) OS_Delay(t)#else#include "SIM.h" /* Definitions for the Win32 simulation */#define CREATE_TASK(pTCB, pName, pFunc, Priority, pStack) SIM_CreateTask(pName, pFunc)#define START_MT() SIM_Start()#define Delay(t) SIM_Delay(t)#endif/********************************************************************* Static data**********************************************************************/#ifndef WIN32//// Stacks//static OS_STACKPTR int Stack_0[600];static OS_STACKPTR int Stack_1[600];static OS_STACKPTR int Stack_2[600];static OS_TASK aTCB[3]; // Task control blocks#endif/********************************************************************* Static code**********************************************************************//********************************************************************* _cbCallbackT0*/static int XPos;static const char aText[] = "Moving text...";static void _cbCallbackT0(WM_MESSAGE * pMsg) {(1)switch (pMsg->MsgId) {case WM_PAINT://// Handle the paint message//GUI_SetBkColor(GUI_RED);GUI_SetColor(GUI_BLACK);GUI_SetFont(&GUI_FontComic24B_ASCII);GUI_Clear();GUI_DispStringAt(aText, XPos, 0);break;default:WM_DefaultProc(pMsg);}}/********************************************************************* _cbCallbackT1*/static void _cbCallbackT1(WM_MESSAGE * pMsg) {(2)WM_HWIN hWin = (FRAMEWIN_Handle)(pMsg->hWin);switch (pMsg->MsgId) {case WM_PAINT://// Handle the paint message//GUI_SetBkColor(GUI_BLUE);GUI_SetColor(GUI_WHITE);GUI_SetFont(&GUI_FontComic24B_ASCII);GUI_SetTextAlign(GUI_TA_HCENTER | GUI_TA_VCENTER);GUI_Clear();GUI_DispStringHCenterAt("Moving window...",WM_GetWindowSizeX(hWin) / 2,WM_GetWindowSizeY(hWin) / 2);break;default:WM_DefaultProc(pMsg);}}/********************************************************************* _cbBackgroundWin*/static void _cbBackgroundWin(WM_MESSAGE* pMsg) {(3)switch (pMsg->MsgId) {case WM_PAINT://// Handle only the paint message//GUI_SetBkColor(0x00CC00);GUI_Clear();GUI_SetFont(&GUI_Font24_ASCII);GUI_DispStringHCenterAt("emWin - multitasking demo\n", 160, 5);GUI_SetFont(&GUI_Font13_1);GUI_DispStringAt("Scrolling text and moving windows without flickering", 5, 35); default:WM_DefaultProc(pMsg);}}/********************************************************************* _Task_0*/static void _Task_0(void) {(4)//// Create frame window//FRAMEWIN_Handle hFrameWin = FRAMEWIN_Create("Task 0", NULL, WM_CF_SHOW | WM_CF_STAYONTOP, 0, 70, 200, 40); //// Create child window//WM_HWIN hChildWin = WM_CreateWindowAsChild(0, 0, 0, 0, WM_GetClientWindow(hFrameWin),WM_CF_SHOW | WM_CF_MEMDEV, _cbCallbackT0, 0);FRAMEWIN_SetActive(hFrameWin, 0);//// Make sure the right window is active...//WM_SelectWindow(hChildWin);//// ...and the right font is selected//GUI_SetFont(&GUI_FontComic24B_ASCII);while(1) {GUI_RECT Rect;int XLen;XLen = GUI_GetStringDistX(aText); // Get the length of the stringWM_GetClientRect(&Rect); // Get the size of the window//// Show moving text//for (XPos = 0; XPos < (Rect.x1 - Rect.x0) - XLen; XPos++) {WM_InvalidateWindow(hChildWin);Delay(50);}for (; XPos >= 0; XPos--) {WM_InvalidateWindow(hChildWin);Delay(100);}}}/********************************************************************* _Task_1*/static void _Task_1(void) {(5)//// Create frame window//FRAMEWIN_Handle hFrameWin = FRAMEWIN_Create("Task 1", NULL, WM_CF_SHOW | WM_CF_STAYONTOP,20, 170, 200, 40);//// Create child window//WM_HWIN hChildWin = WM_CreateWindowAsChild(0, 0, 0, 0, WM_GetClientWindow(hFrameWin), WM_CF_SHOW |WM_CF_MEMDEV,_cbCallbackT1, 0);FRAMEWIN_SetActive(hFrameWin, 0);while(1) {int i;int nx = 80;int ny = 90;//// Move window continously//for (i = 0; i < ny; i++) {WM_MoveWindow(hFrameWin, 0, -2);Delay(50);}for (i = 0; i < nx; i++) {WM_MoveWindow(hFrameWin, 2, 0);Delay(50);}for (i = 0; i < ny; i++) {WM_MoveWindow(hFrameWin, 0, 2);Delay(50);}for (i = 0; i < nx; i++) {WM_MoveWindow(hFrameWin, -2, 0);Delay(50);}}}/********************************************************************* _GUI_Task** This task does the background processing.* The MainTask job is to update invalid windows, but other things such as* evaluating mouse or touch input may also be done.*/static void _GUI_Task(void) {(6)while(1) {GUI_Exec(); // Do the background work ... Update windows etc.)GUI_X_ExecIdle(); // Nothing left to do for the moment ... Idle processing}}/*********************************************************************** Public code************************************************************************//*********************************************************************** MainTask*/void MainTask(void) {//// Init GUI//GUI_Init();WM_SetCreateFlags(WM_CF_MEMDEV); // Use memory devices on all windows to avoid flicker WM_SetCallback(WM_HBKWIN, _cbBackgroundWin); // Set callback for background window//// Create tasks//CREATE_TASK(&aTCB[0], "Task_0", _Task_0, 80, Stack_0);(7)CREATE_TASK(&aTCB[1], "Task_1", _Task_1, 60, Stack_1);CREATE_TASK(&aTCB[2], "GUI_TASK", _GUI_Task, 1, Stack_2);//// Start multitasking//START_MT();}#endif跟大家讲这个DEMO,主要是想让大家对emWin的多任务框架有个了解,对于初学者可以不必了解主要是实现了什么功能。