STemWIN入门.doc_第1页
STemWIN入门.doc_第2页
STemWIN入门.doc_第3页
STemWIN入门.doc_第4页
STemWIN入门.doc_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/ 账号:gmj790,密码: STemWin教程入门篇 第一期:emWin介绍特别说明:原创教程,未经许可禁止转载,教程采用回复可见的形式,谢谢大家的支持。armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:/read.php?tid=1830 SEGGER公司介绍 了解emWin之前,先了解一下SEGGER这家公司,了解生产商才能对emWin有更加全面的认识。 SEGGER公司成立于1997年,到现在的2013年,有差不多16年的历史了,这家公司主要有两个office,一个是在德国的Hilden,另个在美国的 Massachusetts。官网还有一个他们工作地方的照片,看着很不错,我这里也把这个照片贴上图片:2.png这家公司的产品主要有三个大的方向,下面分别的说一下: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 Probes J - Link PROJ - Link ULTRA+J - Link PLUSJ - LinkJ - Trace Cortex-M3J - Trace ARMProduction Programmers FlasherARMFlasherRXFlasherSTM8FlasherST7Flasher5Flasher5 PRO 官网上面也有一个论坛,不过论坛的打开速度比较的慢,而且是英文的,问个问题也不太方便/有兴趣的可以去看看。 想了解价格和授权的可以看看这里/pricing.html,现在了解的NXP, ST, Energy Micro获得了SEGGER的授权,可以免费的使用,想了解其他信息的可以去官网查看,这里有几个官网张贴的,客户设计界面,设计的的确很好看。图片:3.png图片:4.png图片:5.png其实话说回来,要想设计比较好的界面还是得手工设计,用控件很难做出这种效果,除非有这种效果的控件。本部分设定了隐藏,您已回复过了,以下是隐藏的内容emWin5.xx的简介1.目标系统(硬件)目标系统必须具有: 一个CPU(8/16/32/64位) 一个具有最小内存的RAM和ROM 一个完整图形显示器 (任何类型和任何分辨率)存储器要求取决于使用的是软件的哪部分以及目标编译器的效率。因此不可能指定精确的值,但是以下值适用于典型的系统。小系统 (无窗口管理器) RAM:100字节 堆栈:600字节ROM:10-25 kb(取决于所使用的功能)大系统 (包含窗口管理器和小工具) RAM:2-6 kb(取决于所需的窗口数) 堆栈:1200-1800字节 (取决于所使用的功能)ROM:30-60 kb(取决于所使用的功能)请注意,如果应用程序使用了很多字体,则对ROM的要求会提高。上述所有值都是粗略估算值,不保证能正常使用。2.特性emWin设计用于提供高效且独立于处理器和显示控制器的图形用户界面,用于任何使用图形显示进行操作的应用。它与单任务和多任务环境、专用操作系统或具有任何商业RTOS兼容,emWin的发货形式为C语言源代码。它可适用于任何尺寸的、具有任何显示控制器和CPU的物理和虚拟显示器。其特性包括:一般特性 支持使用任何控制器的任何 (单色、灰度或彩色)显示器 (如果有正确的驱动)。 在较小显示器上无显示控制器也可运行。 使用配置宏可支持任何接口。 显示尺寸可配置。 可在显示器上的任何点 (而不仅仅是在偶数位字节地址)上写入字符和位图。 已针对尺寸和速度优化了各种例程。 利用编译时间切换可进行不同优化。 对于较慢的显示控制器,可在存储器中缓存显示,将存取操作减到最少,从而获得非常高的速度。 结构清晰。 支持虚拟显示;虚拟显示可大于实际显示。图形库 支持不同色深的位图。 可使用位图转换器。 绝对无浮点使用。 快速线/点绘制 (不使用浮点)。 圆形/多边形绘制非常快速。 不同的绘图模式。字体 基本软件配备多种不同的字体:4*6、6*8、6*9、8*8、8*9、8*16、8*17、8*18、24*32以及像素高度为8、10、13、16的比例字体。有关详细信息,请参阅字体一章。 可以定义新的字体并只需简单链接。 只有应用程序使用的字体才实际链接到生成的可执行程序,从而使ROM使用最小。 字体可分别在X和Y方向完全缩放。 可使用字体转换器;主机系统 (即Microsoft Windows)上有的任何字体都可以转换。 字符串/值输出例程 例程可以十进制、二进制、十六进制、任何字体形式显示值。 例程可以十进制、二进制、十六进制、任何字体形式编辑值。 窗口管理器(WM) 完整的窗口管理操作,包括裁剪。窗口的客户区以外的区域不可能被覆盖。 窗口可以移动和调整大小。 支持回调例程 (可选择是否使用)。 WM使用最小的RAM(每个窗口大约50字节)。PC界面外观的可选小工具 提供各种小工具 (窗口对象,也称为控件)。它们通常自动操作并且简单易用。 支持触摸屏和鼠标 对于按钮小工具等窗口对象,emWin提供触摸屏和鼠标支持。PC工具 模拟脉冲查看器。 位图转换器。 字体转换器。3.RTOS对emWin的支持 官方的GUI_X文件里面有各种RTOS对emWin多任务的支持,没有的话,移植一个也非常的方便,里面没有UCOS - III和FreeRTOS的移植,后面现成的添加进去就可以的。图片:6.pngemWin的简单介绍先说这么多,后面开始讲详细的入门。4.基本的内存需求ExampleHello worldWindow applicationROMGUI core5.9 kB43 kBFonts1.8 kB12.5 kBApplication38 B2.7 kBStartup code300 B300 BLibrary0.1 kB1.5 kBTotal8.1 kB60 kBRAMGUI core62 B5.2 kBApplication-40 BStack272 B1.4 kBTotal334 B6.6 kB5.控件预览NameScreenshot (classic)Screenshot (skinned)Descriptionbuttonbutton which can be pressed. text or bitmaps may be displayed on a button.checkboxcheck box which may be checked or unchecked.dropdowndropdown listbox, opens a listbox when pressed.editsingle-line edit field which prompts the user to type a number or text.framewinframe window. creates the typical gui look.graphgraph widget, used to show curves or measured values.headerheader control, used to manage columns.iconviewicon view widget. useful for icon based plat- forms as found in common hand held devices.imageimage widget. displays several image formats automatically.listboxlistbox which highlights items as they are selected by the user.listviewlistview widgets are used to creates tables.listwheellistwheel widget. the data can be moved and accelerated via pointer input device.menumenu widgets are used to create horizontal and vertical menus.multieditmultiedit widgets are used to edit multiple lines of text.multipagemultipage widgets are used to create dialogs with multiple gbarprogress bar used for visualization.radioradio button which may be selected. only one button may be selected at a time.scrollbarscrollbar which may be horizontal or vertical.sliderslider bar used for changing values.spinboxspinning box to display and adjust a specific value.textimg/wp-content/uploads/2012/07/text_classic.png/imgstatic text controls typically used in dialogs.treeviewimg/wp-content/uploads/2012/07/treeview_classic.png/imgtreeview widget for managing hierarchical lists.第二期:emWin5.xx的详细移植步骤(添加视频演示3.0,4.37寸)特别说明:原创教程,未经许可禁止转载,教程采用回复可见的形式,谢谢大家的支持。armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:/read.php?tid=1830 重要说明:(0)由于这个移植教程是去年过年的时候做的,用的是5.16,这就不再做个5.20的移植了,方法是一样的。(1)emWin手册里面有这样一句话:“驱动接口的改变始于emWin V5。不再支持针对emWin V4 或更早版本开发的老显示驱动”。(2)如果不使用V5以后版本的新特性,基本和以前的版本使用是一样的,也就是说,大家用V5以前版本实现的功能,直接升级到现有的版本,基本可以正常运行。(3)尽管emWin提供了大部分屏的驱动,但是不能包含所有,这篇移植文档就因此而生。不管是emWin已经支持的,还是没有提供支持的,均可采用这种方法。(4)提供了一个非常好的触摸滤波方法,此方法可以有效的滤除飞点。一移植前的准备工作(1)MDK4.54版本里面的有emWin5.16的库,大家注意一下这个文件夹里面的emWin库。图片:1.jpg可以看到支持M4的GUI库,所有就用这个库,大家都知道M4相对于M3,主要是增加了浮点运算,但是emWin手册里面有这样一个说明。图片:2.jpg手册里面明确的说明了emWin的库,绝对无浮点使用。所有如果使用M3的emWin库也是没有问题的。(2)MDK要添加下面的LICENSE, 如果不添加是不能用emWin的库。图片:3.jpg添加方法也很简单,用大家注册MDK时的-注-册-机就可以的,不贴全图了。图片:4.jpg(3)要添加MDK对M4的浮点支持,添加方法也很简单,提供的例程里面就有,看一下就会了,这里不再做说明了。二现在就可以开始移植工作了。主要添加下图所示的几个文件图片:5.jpg下面就对这些文件进行详细的说明(1) bsp_touch.c这个文件主要提供触摸的驱动函数,以便emWin中GUI_TOUCH_X_MeasureX GUI_TOUCH_X_MeasureY两个函数的调用。特别注意,这里改变触摸的滤波方法,以前用去点前几个点和后几个点,然后中间数值取平均的方法,效果并不理想,不用有效的滤除飞点,这里使用一个新的方法。1.1、在emWin里面使用使用触摸的中断方式,效果并不好,所以这里使用查询,查询此引脚的电平,这样可以避免不必要的调用GUI_TOUCH_X_MeasureXGUI_TOUCH_X_MeasureY 两个函数。1.2、触摸滤波,主要是滤的是飞点,就应为这些飞点的存在,才使得触摸很不稳定。下面的这个函数,大家应该很熟悉,就是滤除前几个点和后面几个点,然后中间几个点取平均/* 读取次数根据实际情况修改 */#define XPT2046_READ_TIMES5 /* 丢弃值*/#define XPT2046_LOST_VAL1uint16_t TOUCH_DataFilter(uint8_t _ucCh)uint16_t i, j;uint16_t bufXPT2046_READ_TIMES;uint16_t usSum;uint16_t usTemp;/* 读取READ_TIMES次数据 */for(i=0; i XPT2046_READ_TIMES; i+)if (g_ChipID = IC_8875)if(_ucCh = ADC_CH_X)buf = RA8875_TouchReadX();elsebuf = RA8875_TouchReadY();elsebuf = TSC2046_ReadAdc(_ucCh); /* 升序排列 */ for(i = 0; i XPT2046_READ_TIMES - 1; i+)for(j = i + 1; j bufj)usTemp = buf;buf = bufj;bufj = usTemp;usSum = 0;/*求和 */for(i = XPT2046_LOST_VAL; i XPT2046_READ_TIMES - XPT2046_LOST_VAL; i+)usSum += buf;/*求平均 */usTemp = usSum / (XPT2046_READ_TIMES - 2 * XPT2046_LOST_VAL);return usTemp; 下面的这个函数就很重要了,要滤除飞点,就全靠它了。/* 误差范围 根据实际情况调节误差范围 */uint8_t ADC_ERR_RANGE = 5; uint8_t TOUCH_ReadAdcXY(int16_t *_usX, int16_t *_usY) uint16_t iX1, iY1;uint16_t iX2, iY2;uint16_t iX, iY;iX1 = TOUCH_DataFilter(ADC_CH_X);iY1 = TOUCH_DataFilter(ADC_CH_Y);iX2 = TOUCH_DataFilter(ADC_CH_X);iY2 = TOUCH_DataFilter(ADC_CH_Y);iX = TOUCH_Abs(iX1 - iX2);iY = TOUCH_Abs(iY1 - iY2); /* 前后两次采样在+-ERR_RANGE内 */if (iX = ADC_ERR_RANGE) & (iY = ADC_ERR_RANGE) if(g_ucGPIX = 1)*_usY = (iX1 + iX2) / 2;*_usX = (iY1 + iY2) / 2;else*_usX = (iX1 + iX2) / 2;*_usY = (iY1 + iY2) / 2;return 1;else return 0;触摸的驱动就这些东西,详细的使用看例程级可以,然后在文件GUI_X_Touch_Analog.c里面调用就可以了。intGUI_TOUCH_X_MeasureX(void) TOUCH_SCAN();return(g_tTP.usAdcNowX);intGUI_TOUCH_X_MeasureY(void) return(g_tTP.usAdcNowY);(2) 下面的说明就很重要了,这个是实现emWin移植成功的关键。在文件夹DisplayDriver有这三个文件,这里我们使用第一个。图片:6.jpg打开这个文件,会发现里面的函数很面熟,是的,基本和UCGUI3.98里面的差不多,但是这个里面的功能更加全面。2.1、如果不使用优化,直接提供一个打点和读点的函数就可以了,如果想优化一下,就继续往下看。优化需要修改的函数有下面几个。/* _DrawHLine*/static void _DrawHLine(GUI_DEVICE * pDevice, int x0, int y,int x1) if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) for (; x0 = x1; x0+) _XorPixel(pDevice, x0, y); else #if emWin_Optimize /这里使用了一个宏定义,是否使用优化/LCD8875_DrawHLine(x0, y, x1, LCD_COLORINDEX);s_ucRA8875BusyNow = 1;LCD_DrawLineH(x0, y, x1, LCD_COLORINDEX);s_ucRA8875BusyNow = 0;#elseLCD_PIXELINDEX ColorIndex;ColorIndex = LCD_GetColorIndex();for (; x0 = x1; x0+) _SetPixelIndex(pDevice, x0, y, ColorIndex);#endif/* _DrawVLine, not optimized*/static void _DrawVLine(GUI_DEVICE * pDevice, int x, int y0,int y1) if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) for (; y0 = y1; y0+) _XorPixel(pDevice, x, y0); else #if emWin_Optimize/LCD8875_DrawVLine(x, y0, y1, LCD_COLORINDEX);s_ucRA8875BusyNow = 1;LCD_DrawLineV(x, y0, y1, LCD_COLORINDEX);s_ucRA8875BusyNow = 0;#elseLCD_PIXELINDEX ColorIndex;ColorIndex = LCD_GetColorIndex();for (; y0 = y1; y0+) _SetPixelIndex(pDevice, x, y0, ColorIndex);#endif/* _FillRect*/static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) #if emWin_Optimizeif (g_ChipID = IC_8875)s_ucRA8875BusyNow = 1;BTE_SetTarBlock(x0, y0, y1-y0+1, x1-x0+1, 0);/* 设置BTE位置和宽度高度 */BTE_SetOperateCode(0x0C); /* 设定BTE 操作码和光栅运算码REG51h Bit3:0 = 0Ch */RA8875_SetFrontColor(LCD_COLORINDEX);/* 设置BTE前景色 */BTE_Start(); /* 开启BTE 功能 */BTE_Wait();/* 等待操作结束 */s_ucRA8875BusyNow = 0;elsefor (; y0 = y1; y0+) _DrawHLine(pDevice, x0, y0, x1);#elsefor (; y0 0; xsize-,p+)/RA8875_RAM = *p;/s_ucRA8875BusyNow = 1;LCD_DrawHColorLine(x, y, xsize, (uint16_t *)p);s_ucRA8875BusyNow = 0;#elsefor (;xsize 0; xsize-, x+, p+) _SetPixelIndex(pDevice, x, y, *p);#endif(3)驱动函数写好以后,就是配置函数了,配置函数写好了,emWin就可以跑起来了。 写贴一个官方的配置流程。 图片:7.jpg 下面就按照这个流程进行配置,如果没有说到的,看例程就可以。/* Define the available number of bytes available for the GUI */#define GUI_NUMBYTES130000/* Define the average block size */#define GUI_BLOCKSIZE 0x80为emWin分配动态内存/* GUI_X_Config* Purpose:* Called during the initialization process in order to set up the* available memory for the GUI.*/void GUI_X_Config(void) /* 32 bit aligned memory area */static U32 aMemoryGUI_NUMBYTES / 4;/*Assign memory to emWin */GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);然后就是最关键的LCD_X_Config,这里对7寸4.3寸 3.0寸都做了支持。/* LCD_X_Config* Purpose:* Called during the initialization process in order to set up the* display driver configuration.* */void LCD_X_Config(void) /* Set display driver and color conversion for 1st layer */GUI_DEVICE_CreateAndLink(DISPLAY_DRIVER, COLOR_CONVERSION, 0, 0);if (g_ChipID = IC_8875)if (g_ucGPIX = 1)/* GPIX = 14.3480x272 */* Display driver configuration */LCD_SetSizeEx(0, 480, 272);LCD_SetVSizeEx (0, 480, 272);/* Touch calibration */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 479, 985,50);GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 271, 920,100);else /* GPIX = 07800*480 */* Display driver configuration */LCD_SetSizeEx(0, XSIZE_PHYS, YSIZE_PHYS);LCD_SetVSizeEx (0, VXSIZE_PHYS, VYSIZE_PHYS);/LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR);/* Touch calibration */GUI_TOUCH_SetOrientation(0);GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS - 1, GUI_TOUCH_AD_LEFT,GUI_TOUCH_AD_RIGHT);GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS - 1, GUI_TOUCH_AD_TOP,GUI_TOUCH_AD_BOTTOM);elseLCD_SetSizeEx(0, 400, 240);LCD_SetVSizeEx (0, 400, 240);/* Touch calibration */ GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 399, 300, 3600);GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 239, 273,3671);大家根据自己的屏,配置屏的大小和触摸校准就可以了。到这里移植就算结束了。第三期:uCGUIBulder4.0和GUIBulder5.20的使用方法特别说明:原创教程,未经许可禁止转载,教程采用回复可见的形式,谢谢大家的支持。armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:/read.php?tid=1830 本期主要的研究uCGUIBulder4.0和GUIBulder5.20的使用,很好的利用这两个软件,能是的emWin界面设计事半功倍这个两个软件各有优缺点吧,要充分的发挥他们的长处就好,比如使用uCGUIBulder4.0的好处就是支持控件的对齐功能,这个功能非常的重要,官方推出的GUIBulder5.20的好处就是控件非常的全,基本涵盖和所以控件。图片:1.png本期分为五个小节:3. 1GUIBulder5.20的使用步骤3. 2GUIBulder5.20生产的.c文件在emWin5.22模拟器上面的运行效果3. 3uCGUIBulder4.0的使用步骤3. 4uCGUIBulder4.0生产的.c文件在emWin5.22模拟器上面的运行效果3. 5将生成的代码移植到armfly-V5开发板和armfly-X3开发板上面(有程序可以下载)3. 6实验总结本部分设定了隐藏,您已回复过了,以下是隐藏的内容3. 1GUIBulder5.20的使用步骤 使用这个软件以前要找到这个软件的位置,如果电脑上面安装了MDK的话,这个软件的位置就在图片:1.png相信大家都能找到的,最好找MDK4.72里面的,这个是最新版本的,好处就是新的控件都加上了,废话少罗嗦,跟大家讲一下这个软件该如何的使用,这里只是建立一个简单的对话框,上面加几个控件。图片:2.png控件的添加还是很简单的,自己摸索一下就会了,添加完设计好控件以后这里看看如何生成代码图片:3.png看到上面的那个save选项了没有,点击保存就可以了,但是保存到哪里了呢,看看下面的图片就知道了图片:4.png没错,新生成的代码就是在这里,下面看看如何将生成的代码在emWin5.22的模拟器上面显示3. 2GUIBulder5.20生产的.c文件在emWin5.22模拟器上面的运行效果 用VC6.0打开emWin5.22的模拟器,左侧栏是这样的图片:5.png这里打开那个GUIDEMO_Start的文件,里面只有一个MainTask的初始化,这里可以把这个文件里面的函数全部的删掉,全部复制刚才那个C文件里面的程序到这个文件里面来,只这样程序还是不能够运行的,复制过来以后再加入这个代码/* MainTask*/void MainTask(void) /* 窗口自动使用存储设备 */WM_SetCreateFlags(WM_CF_MEMDEV);/* 初始化 */GUI_Init();/* 创建对话框 就是刚才咱们用哪个GUIBulder5.20生成的程序里面的一个函数,用于创建对话框 */CreateFramewin();while(1)/* 做一个延迟用出窗口的刷新和触摸响应 */GUI_Delay(100);对于这个模拟器来说,MainTask是程序的入口函数,所以用这个函数做初始化。下面运行emWin5.20模拟器看看实际的显示效果图片:6.png有人要说了,怎么显示的不全啊,而且没有那个时尚皮肤的效果,么事不要急,主要是设置的控件有点大,是800*480的,主要是方便在开发上面显示出来。3. 3uCGUIBulder4.0的使用步骤这个软件里面有个软件的使用说明,讲的非常的详细了,如果不是很会用的,好

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论