ImageVerifierCode 换一换
格式:DOC , 页数:29 ,大小:106.54KB ,
资源ID:2448553      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2448553.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(基于STM32的uCGUI移植和优化.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于STM32的uCGUI移植和优化.doc

1、(完整word)基于STM32的uCGUI移植和优化基于STM32的uCGUI移植和优化首先在开始这个说明之前,要简要说明下具体的环境:编译工具:MDK4.20开发板:安富莱v2版开发板调试器:JLink v8盗版移植篇相信大家有移植经验的都知道,移植确实是一件非常墨迹的事情,怎么说呢,代码都是别人的,风格也是别人的,文件结构,定义之类都是别人的,看别人的东西是种进步,但是,也是一个痛苦的过程,因为有时候资料确实很少,而且有时候还是E文的,专业名词一大堆,我们根本没有办法想象工作量是多么的巨大.不过事情都是这样,你不懂他的时候他就像是巨山,但是一旦你理解他的时候,你才会感觉到原来他是那么的简单

2、(从我的经验上来看,至少应该是这样的)。好吧,闲话少说,我们就来开始我们的移植之旅把。首先,我们需要准备的东西有uCGUI3.90,这个版本是大家现在用的比较多的,效率也比较高,别人都是这么评论的,至于其他版本的,我没有接触很多,所以不能过多评论。uCGUI有三个文件夹,一个是tool,这个文件夹是用来使用一些uCgui的上位机程序,基本都是字体和模板查看之类的.在sample文件夹下面是已经别人帮你写好了很多有用的东西,像跟操作系统有关的GUI_X或者一些模板(后面我们会用到的自己定义的Demo),或者是gui配置.后面再一一详细叙说这个文件夹的功能。在Start文件夹里面,这是我们最主要的

3、文件夹。里面就包含了uCGUI的源代码,uCGUI的作者把源代码放进vc里面进行编译了(当然,这是用标准C语言写的程序,所以我们可以放在任何C语言平台下编译而不会担心兼容性问题,这个uCGUI在这方面做的算是完美了),所以,我们可以在vc平台下写界面,然后再把代码拷进我们的下位机编译器进行编译,这样子效率就会非常高了.(像51那时候写界面就是疯狂的一次一次的烧,真是纠结.).然后这里放的就是uCGUI的源代码了,在GUI文件夹下面.这则是每个文件夹的功能(参考uCGUI中文手册,ucgui。com翻译).大概看一下就可以了,这个跟我们移植的关系不大,关键点是带的可以不包含进去(待会配置会讲到.

4、).然后其他的都要包含进去.接着我们要把我们的文件包含进我们已经搭建好的工程,这里说明下我们的工程要求。一般来说,我们要画一个图形,最基本的就是从点开始,从点到线,从点到面.,所以在已经建好的工程里面你要能点亮你的屏幕,能点出最基本的点,能填充出最基本矩阵(这是uCGUI最包含的函数),反正我移植的时候涉及到的包括三个函数,LCD_Init();LCD_Draw_Point(x,y,color),LCD_Fillcircuit(x1,x2,y1,y2).这三个函数是必须的,后面也会说明如何把这三个函数进行填充.当我们把文件复制进去的时候,再加上我们一开始已经创建好的工程的时候,文件结构差不多就

5、是这个样子了,截图如下user包括,main函数就是我们初始化和函数调用,绘图用的文件,另外那几个文件相信大家都明白了把,tft_lcd.c就是你在,没有移植uCGUI的情况下,纯液晶屏驱动,这里建议把液晶屏的API和最底层驱动(API就是画圆啊,画椭圆啊,清除屏幕之类的,底层驱动就是驱动液晶屏的管脚运作,fsmc初始化,时钟配置之类的),不过我这里也是集成在一起了,比较懒,大家别学.其他文件夹我都包含进去了,在没包含进去的时候,编译是可以通过的,但是,那么多文件包含进去,有些配置还是没有设定好的。所以会有错误,蛮编译一下。没事的.这里我们需要修改的文件只有这几个: ,,这是ucgui开放给我

6、们的用户层的文件,在ucgui中,lcdDrive文件夹要自己加进去,GUI_X.c也是,另外三个文件都是包含了,在GUIConf。h中 1 #ifndef GUICONF_H 2 #define GUICONF_H 3 4 #define GUI_OS (0) / 这里指的是对操作系统的支持,因为我们这里只有单纯的移植uCGUI, 5 / 所以,要把这个关闭,不然后面会有很多东西编译进去 6 / 不然到时候编译的时候会发生很多你无法修改的错误 7 define GUI_SUPPORT_TOUCH (0) / 这里则是对触摸屏的支持,触摸屏我是能做,但是没有用, 8 /所以省去麻烦,把触摸屏关

7、掉,相信移植好之后,要支持触摸屏大家都会有门路了 9 define GUI_SUPPORT_UNICODE (1) / UNICODE编码支持,如果大家只是单纯的想用英文显示,而不移植中文字库进去,10 /这个是可以关掉的,因为UNICODE是向下支持的,所以开不开无所谓11 / 反正都是能够正常显示的12 define GUI_DEFAULT_FONT GUI_Font6*8 / 这里是设定默认字体的,我们可以在要写什么字的时候把该字号的字体.13 /c包含进我们的主函数里面,所以这里不用改14 define GUI_ALLOC_SIZE 5000 / 这里讲的是动态内存机制15 / 这里r

8、gb接口模式的可能会有用到,uCGUI就是在我们的ram开辟一块空间,/然后uCGUI把运算好的每个点都放进我们主控ram里面的空间16 / 所以,这里就相当于把写进液晶gram里面的操作变成了写进主控ram里面,/那么大家可能就会问了,干嘛这么多次一举,直接写进去不就可以了17 18 /*原理: 一般来说,在大的屏幕上面(4。0以上吧,印象中),都是没有控制器,(像我的液晶屏就是spfd5420,当然,19 不同的屏幕的液晶主控都是不一样的,但是寄存器操作都是差不多的,20 所以有些初始化配置还是能互用的.)所以呢,这时候我们要用到的就只有RGB接口了,21 RGB要求我们要不断的刷新屏幕,

9、刷新率越高,效果就越好,因为一般这种用来做动态的,uCGUI就是属于静态类型的22 像如果我们要用stm32主控做视频应用的时候,就是动态的,我们需要不断的刷新屏幕,但是当我们主控一边运算,23 一边往液晶接口送数据的时候,会有明显刷屏的感觉(运算-画点-运算画点.。.,这个运算24 运算.。.。.画点画点-画点.。是不一样的,因为对屏幕一直画点,填充,而中间不用插入运算,25 刷一个屏幕时间时间倍速差别是非常巨大的,后面大家也会见识到这种差别。),所以,用GUI申请的空间里面26 边运算,边填充,填充完再一次性运出去(这里可以通过DMA控制FSMC总线,不断的从外置SRAM往GRAM自动搬运

10、数据,27 这是不用主控去插手的,所以,主控大部分时间是负责运算,其他时间可以空闲出来,28 让DMA自己去忙活),同理,因为dma跟cpu的分工,所以,这里同样的把画点,画点,运算,运算不完全的分开了,29 屏幕刷新速度非常之可观(DMA的速度相比大家还是非常了解的,它就是为速度而生的。),*/30 31 /#define GUI_ALLOC_SIZE 10241024 /* Size of dynamic memory 。. For WM and memory devices*/32 33 /*34 35 Configuration of available packages36 */37

11、 38 #define GUI_WINSUPPORT 1 / 这个是窗口支持,一般开始开着的39 define GUI_SUPPORT_MEMDEV 1 / 内存控制,开40 #define GUI_SUPPORT_AA 0 / 抗锯齿,为了性能着想,还是关了比较好41 42 endif /* Avoid multiple inclusion */复制代码GUITouchConf.h是有关于触摸屏配置的,这里我们就略过了。 1 ifndef LCDCONF_H 2 define LCDCONF_H 3 4 /* 5 6 General configuration of LCD 7 8 * 9

12、/10 11 /12 * 这个定义的是你x轴的长度,像我这里的屏幕长为400个像素13 /14 define LCD_XSIZE (400)15 16 /17 这里这是屏幕的宽18 /19 #define LCD_YSIZE (240) /* Y轴长度 /20 21 /*22 这里是屏幕的颜色有多少个位23 */24 #define LCD_BITSPERPIXEL (16) / 定义数据长度为16bit/25 26 /27 * 控制器类型,如果你里面有包含这些判断变量,这个最好改成你认识的28 /29 define LCD_CONTROLLER 9325 / 定义控制器类型 */30 31

13、32 #endif / LCDCONF_H */复制代码配置层的东西我们都已经搞定了,接下来我们要修改的是uCGUI开放给我们的用户层的东西,GUI_X.c可以直接拷进去,这个是用户层和系统层的关联文件,一些demo也会用到这个文件的时间函数或者延迟函数,所以这个文件拷进去放着就可以了。 1 #include GUI。h” 2 include GUI_X.h” 3 4 /* 5 6 Global data 7 */ 8 volatile int OS_TimeMS; 9 10 /*11 *12 Timing:13 * GUI_X_GetTime()14 * GUI_X_Delay(int)15

14、 16 Some timing dependent routines require a GetTime17 and delay function. Default time unit (tick), normally is18 1 ms.19 译:一些需要时间的相关函数需要用到gettime和延迟.20 默认时间单位为1ms。21 /22 23 int GUI_X_GetTime(void) 24 return 0; 25 26 27 void GUI_X_Delay(int ms) 28 29 30 31 /*32 *33 GUI_X_Init()34 *35 * Note:36 * GU

15、I_X_Init() is called from GUI_Init is a possibility to init37 * some hardware which needs to be up and running before the GUI。38 * If not required, leave this routine blank.39 40 * 译:GUI_X_Init()是在gui_init()调用前,gui启动或者运行前准备.41 * 如果不是必须的,可以把这个函数留空白.42 */43 44 void GUI_X_Init(void) 45 46 47 48 49 50 5

16、1 /*52 *53 * GUI_X_ExecIdle54 55 * Note:56 * Called if WM is in idle state57 * 译:视窗管理器空闲时候调用58 */59 60 void GUI_X_ExecIdle(void) 61 62 /*63 *64 * Logging: OS dependent65 66 Note:67 Logging is used in higher debug levels only。 The typical target68 build does not use logging and does therefor not requ

17、ire any of69 the logging routines below。 For a release build without logging70 the routines below may be eliminated to save some space。71 (If the linker is not function aware and eliminates unreferenced72 functions automatically)73 译:系统日志层应用程序74 75 */76 77 void GUI_X_Log (const char *s) 78 void GUI_

18、X_Warn (const char *s) 79 void GUI_X_ErrorOut(const char *s) 复制代码在uCGUI和底层驱动的接口文件时LCDDriver。c,大家打开文件夹可以看到这几个文件:lcdwin。c,lcdnull.c,lcdDummy.c,这三个文件你随便修改哪个都行,一开始我是直接修改lcdnull。c的,不过一开始没经验,一直不能正常调用我的uCGUI函数,所以,我的队友告诉我,要修改另外一个(lcdwin.c),这次才反应过来,理论上,修改lcdnull.c也是可以的,就是一些细节性的东西可以要多注意点.下面我讲解下怎么修改lcdwin.c这个文

19、件.源文件我先贴出来:#if defined(WIN32) & !defined(LCD_SIMCONTROLLER)#include windows。h#include LCD.h#include LCD_Private.h /* include LCDConf。h /include ”LCDSIM.h”include ”GUI_Private.h”include memory。h”/* Defines*/if LCD_BITSPERPIXEL = 8 #define PIXELINDEX U8else define PIXELINDEX WORDendif#ifdef WIN32 ifnd

20、ef ASSERT define ASSERT(Val) if (!(Val)) MessageBox(NULL,。.in file ”_FILE_,Assertion failed。”,MB_OK); #endif#endififdef LCD_ASSERT #undef LCD_ASSERTendifdefine LCD_ASSERT(v) ASSERT(v)#ifndef LCD_DISPLAY_INDEX define LCD_DISPLAY_INDEX 0endif/* Macros for internal use/#ifdef _DEBUGstatic int _CheckBou

21、nd(unsigned int c) unsigned int NumColors = LCD_BITSPERPIXEL 8 ? 0xffff : (1 NumColors) GUI_DEBUG_ERROROUT(”LCDWin::SETPIXEL: parameters out of bounds); return 1; return 0; #define SETPIXEL(x, y, c) if (!_CheckBound(c)) LCDSIM_SetPixelIndex(x, y, c, LCD_DISPLAY_INDEX); else #define SETPIXEL(x, y, c)

22、 LCDSIM_SetPixelIndex(x, y, c, LCD_DISPLAY_INDEX)#endifdefine XORPIXEL(x, y) _XorPixel(x,y)/* Static code*/* _XorPixel*/static void _XorPixel(int x, int y) unsigned int Index = LCD_L0_GetPixelIndex(x,y); LCDSIM_SetPixelIndex(x, y, LCD_NUM_COLORS1-Index, LCD_DISPLAY_INDEX);/* _DrawBitLine1BPP/static

23、void _DrawBitLine1BPP(int x, int y, U8 constp, int Diff, int xsize, const LCD_PIXELINDEX*pTrans) LCD_PIXELINDEX Index0 = *(pTrans+0); LCD_PIXELINDEX Index1 = *(pTrans+1); x+=Diff; switch (GUI_Context。DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR) case 0: / Write mode / do LCDSIM_SetPixelIndex(x+,y

24、, (*p & (0x80Diff)) ? Index1 : Index0, LCD_DISPLAY_INDEX);if (+Diff=8) Diff=0;p+; while (-xsize); break; case LCD_DRAWMODE_TRANS: do if (p (0x80Diff) LCDSIM_SetPixelIndex(x,y, Index1, LCD_DISPLAY_INDEX); x+;if (+Diff=8) Diff=0;p+; while (xsize); break; case LCD_DRAWMODE_XOR:; do if (p & (0x80Diff))

25、int Pixel = LCDSIM_GetPixelIndex(x,y, LCD_DISPLAY_INDEX); LCDSIM_SetPixelIndex(x,y, LCD_NUM_COLORS1Pixel, LCD_DISPLAY_INDEX); x+;if (+Diff=8) Diff=0;p+; while (-xsize); break;/* _DrawBitLine2BPP/#if (LCD_MAX_LOG_COLORS 2)static void _DrawBitLine2BPP(int x, int y, U8 const p, int Diff, int xsize, con

26、st LCD_PIXELINDEX pTrans) LCD_PIXELINDEX Pixels = p; int CurrentPixel = Diff; x += Diff; switch (GUI_Context。DrawMode (LCD_DRAWMODE_TRANS | LCD_DRAWMODE_XOR)) case 0: if (pTrans) do int Shift = (3 CurrentPixel) Shift; LCD_PIXELINDEX PixelIndex = *(pTrans + Index); SETPIXEL(x+, y, PixelIndex); if (+C

27、urrentPixel = 4) CurrentPixel = 0; Pixels = *(+p); while (-xsize); else do int Shift = (3 CurrentPixel) Shift; SETPIXEL(x+, y, Index); if (+CurrentPixel = 4) CurrentPixel = 0; Pixels = *(+p); while (-xsize); break; case LCD_DRAWMODE_TRANS: if (pTrans) do int Shift = (3 - CurrentPixel) (6 Shift)) Shi

28、ft; if (Index) LCD_PIXELINDEX PixelIndex = (pTrans + Index); SETPIXEL(x, y, PixelIndex); x+; if (+CurrentPixel = 4) CurrentPixel = 0; Pixels = (+p); while (-xsize); else do int Shift = (3 - CurrentPixel) Shift; if (Index) SETPIXEL(x, y, Index); x+; if (+CurrentPixel = 4) CurrentPixel = 0; Pixels = *

29、(+p); while (-xsize); break; #endif/* _DrawBitLine4BPP*/#if (LCD_MAX_LOG_COLORS 4)static void _DrawBitLine4BPP(int x, int y, U8 const p, int Diff, int xsize, const LCD_PIXELINDEX pTrans) LCD_PIXELINDEX Pixels = p; int CurrentPixel = Diff; x += Diff; switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS

30、 LCD_DRAWMODE_XOR) case 0: if (pTrans) do int Shift = (1 - CurrentPixel) 2; int Index = (Pixels (0xF0 (4 - Shift))) Shift; LCD_PIXELINDEX PixelIndex = *(pTrans + Index); SETPIXEL(x+, y, PixelIndex); if (+CurrentPixel = 2) CurrentPixel = 0; Pixels = (+p); while (-xsize); else do int Shift = (1 Curren

31、tPixel) (4 - Shift)) Shift; SETPIXEL(x+, y, Index); if (+CurrentPixel = 2) CurrentPixel = 0; Pixels = (+p); while (-xsize); break; case LCD_DRAWMODE_TRANS: if (pTrans) do int Shift = (1 CurrentPixel) Shift; if (Index) LCD_PIXELINDEX PixelIndex = (pTrans + Index); SETPIXEL(x, y, PixelIndex); x+; if (

32、+CurrentPixel = 2) CurrentPixel = 0; Pixels = *(+p); while (-xsize); else do int Shift = (1 CurrentPixel) (4 - Shift))) Shift; if (Index) SETPIXEL(x, y, Index); x+; if (+CurrentPixel = 2) CurrentPixel = 0; Pixels = *(+p); while (-xsize); break; #endif/* _DrawBitLine8BPP*/#if (LCD_MAX_LOG_COLORS 16)s

33、tatic void _DrawBitLine8BPP(int x, int y, U8 constp, int xsize, const LCD_PIXELINDEXpTrans) LCD_PIXELINDEX pixel; if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS)=0) if (pTrans) for (;xsize 0; xsize-,x+,p+) pixel = *p; SETPIXEL(x, y, (pTrans+pixel); else for (;xsize 0; xsize-,x+,p+) SETPIXEL(x, y, p); else / Handle transparent bitmap */ if (pTrans) for (; xsize 0; xsize-, x+, p+) pixel = p; if (pixel)

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服