UCGUI添加外置字库到SD卡(附字库)
 2015.03.05    |      STM32    |     AilsonJack    |     暂无评论    |     1296 views
By: Ailson Jack
Date: 2013-09-21
个人博客: http://www.only2fire.com/
<p style="text-indent: 0em;"><span style="color: rgb(255, 0, 0);">注:</span>本文参考了网上相关资料,且通过了本人的尝试。</p><p style="text-indent: 2em;">前天刚刚把原子哥的汉字显示实验看完,并且成功的将字库及FATFS的cc936.c文件装到SD卡,昨天又开始研究将UCGUI的汉字库装到SD卡里,为此上网查了许多资料。</p><p style="text-indent: 2em;">最开始我用的是论坛里坛友—<span style="color: rgb(0, 112, 192);">洋洋kan世界</span>的方法,但是显示出来的汉子不太好,汉子中间有一横线,(可能是自己移植的不太好吧,还有跟字库有很大的关系),因此自己又上网查找相关的解决办法,终于找到了办法,思路和坛友—<span style="color: rgb(0, 112, 192);">洋洋kan世界</span>的差不多。这次添加外置字库,最大的问题就是字库的获取上,我的大部分时间也是浪费在这上面的。</p><p style="text-indent: 2em;">辛苦了一天的成果,在这里拿出来和大家分享,希望对那些打算将UCGUI的汉字库放在SD卡的朋友们有帮助吧。<br/></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">步骤如下(下面附件有修改好的相关代码文件):</span></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);"></span></p><p class="artical_littlestyle1">1.在<span style="color: rgb(255, 0, 0);">GUIType.h</span>文件里添加如下内容:</p><pre class="brush:cpp;toolbar:false PrismJs">DECLARE_FONT(PROP_X); #define&nbsp;GUI_FONTTYPE_PROP_USER&nbsp;\ GUIPROP_X_DispChar,&nbsp;\ GUIPROP_X_GetCharDistX,&nbsp;\ GUIMONO_GetFontInfo,&nbsp;\ GUIMONO_IsInFont,&nbsp;\ (tGUI_ENC_APIList*)0</pre><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注意:</span><span style="color: rgb(0, 112, 192);">该内容不能放在太靠前的位置,这里我把它放在</span>“<span style="color: rgb(227, 108, 9);">/* PROPAA: Proportional, antialiased fonts, 2bpp, SJIS encoding */</span>”的前面。</p><p class="artical_littlestyle2">2.将<span style="color: rgb(255, 0, 0);">GUI_UC_EncodeNone.c</span>文件里的内容改为如下内容:</p><pre class="brush:cpp;toolbar:false PrismJs">/* ********************************************************************************************************* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uC/GUI *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Universal&nbsp;graphic&nbsp;software&nbsp;for&nbsp;embedded&nbsp;applications * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)&nbsp;Copyright&nbsp;2002,&nbsp;Micrium&nbsp;Inc.,&nbsp;Weston,&nbsp;FL *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(c)&nbsp;Copyright&nbsp;2002,&nbsp;SEGGER&nbsp;Microcontroller&nbsp;Systeme&nbsp;GmbH * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;礐/GUI&nbsp;is&nbsp;protected&nbsp;by&nbsp;international&nbsp;copyright&nbsp;laws.&nbsp;Knowledge&nbsp;of&nbsp;the *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp;code&nbsp;may&nbsp;not&nbsp;be&nbsp;used&nbsp;to&nbsp;write&nbsp;a&nbsp;similar&nbsp;product.&nbsp;This&nbsp;file&nbsp;may *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;only&nbsp;be&nbsp;used&nbsp;in&nbsp;accordance&nbsp;with&nbsp;a&nbsp;license&nbsp;and&nbsp;should&nbsp;not&nbsp;be&nbsp;redistributed *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;any&nbsp;way.&nbsp;We&nbsp;appreciate&nbsp;your&nbsp;understanding&nbsp;and&nbsp;fairness. * ---------------------------------------------------------------------- File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;GUI_UC_EncodeNone.c Purpose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Encoding&nbsp;routines&nbsp;for&nbsp;non&nbsp;unicode&nbsp;systems&nbsp;(default) ---------------------------END-OF-HEADER------------------------------ */ #include&nbsp;&quot;GUI_Protected.h&quot; /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static&nbsp;code * ********************************************************************** */ /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_GetCharCode * *&nbsp;Purpose: *&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;UNICODE&nbsp;character&nbsp;code&nbsp;of&nbsp;the&nbsp;current&nbsp;character. */ static&nbsp;U16&nbsp;_GetCharCode(const&nbsp;char&nbsp;GUI_UNI_PTR&nbsp;*&nbsp;s)&nbsp;{ &nbsp;&nbsp;if((*s)&nbsp;&gt;&nbsp;0xA0) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*(const&nbsp;U16&nbsp;GUI_UNI_PTR&nbsp;*)s;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;*(const&nbsp;U8&nbsp;GUI_UNI_PTR&nbsp;*)s; } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_GetCharSize * *&nbsp;Purpose: *&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;number&nbsp;of&nbsp;bytes&nbsp;of&nbsp;the&nbsp;current&nbsp;character. */ static&nbsp;int&nbsp;_GetCharSize(const&nbsp;char&nbsp;GUI_UNI_PTR&nbsp;*&nbsp;s)&nbsp;{ &nbsp;&nbsp;GUI_USE_PARA(s);&nbsp; &nbsp;&nbsp;if((*s)&nbsp;&gt;&nbsp;0xA0) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;2;&nbsp; &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;1; } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_CalcSizeOfChar * *&nbsp;Purpose: *&nbsp;&nbsp;&nbsp;Return&nbsp;the&nbsp;number&nbsp;of&nbsp;bytes&nbsp;needed&nbsp;for&nbsp;the&nbsp;given&nbsp;character. */ static&nbsp;int&nbsp;_CalcSizeOfChar(U16&nbsp;Char)&nbsp;{ &nbsp;&nbsp;GUI_USE_PARA(Char); &nbsp;&nbsp;if(Char&nbsp;&gt;&nbsp;0xA0A0) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;2; &nbsp;&nbsp;} &nbsp;&nbsp;return&nbsp;1; } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_Encode * *&nbsp;Purpose: *&nbsp;&nbsp;&nbsp;Encode&nbsp;character&nbsp;into&nbsp;1/2/3&nbsp;bytes. */ static&nbsp;int&nbsp;_Encode(char&nbsp;*s,&nbsp;U16&nbsp;Char)&nbsp;{ &nbsp;&nbsp;if(Char&nbsp;&gt;&nbsp;0xA0A0) &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;*((U16&nbsp;*)s)&nbsp;=&nbsp;(U16)(Char); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;2; &nbsp;&nbsp;} &nbsp;&nbsp;*s&nbsp;=&nbsp;(U8)(Char); &nbsp;&nbsp;return&nbsp;1; } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static&nbsp;data * ********************************************************************** */ /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_API_Table */ const&nbsp;GUI_UC_ENC_APILIST&nbsp;GUI__API_TableNone&nbsp;=&nbsp;{ &nbsp;&nbsp;_GetCharCode,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;return&nbsp;character&nbsp;code&nbsp;as&nbsp;U16&nbsp;*/ &nbsp;&nbsp;_GetCharSize,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;return&nbsp;size&nbsp;of&nbsp;character:&nbsp;1&nbsp;*/ &nbsp;&nbsp;_CalcSizeOfChar,&nbsp;&nbsp;/*&nbsp;&nbsp;return&nbsp;size&nbsp;of&nbsp;character:&nbsp;1&nbsp;*/ &nbsp;&nbsp;_Encode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;Encode&nbsp;character&nbsp;*/ }; /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exported&nbsp;code * ********************************************************************** */ /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_UC_SetEncodeNone */ void&nbsp;GUI_UC_SetEncodeNone(void)&nbsp;{ &nbsp;&nbsp;GUI_LOCK(); &nbsp;&nbsp;GUI_Context.pUC_API&nbsp;=&nbsp;&amp;GUI__API_TableNone; &nbsp;&nbsp;GUI_UNLOCK(); } /***************************&nbsp;End&nbsp;of&nbsp;file&nbsp;****************************/</pre><p class="artical_littlestyle3">3.新建文件<span style="color: rgb(255, 0, 0);">GUICharPEx.c</span>文件,并且将它加入工程,其内容如下:</p><pre class="brush:cpp;toolbar:false PrismJs">#include&nbsp;&lt;stddef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;needed&nbsp;for&nbsp;definition&nbsp;of&nbsp;NULL&nbsp;*/ #include&nbsp;&quot;GUI_Private.h&quot; #include&nbsp;&quot;ff.h&quot; #include&nbsp;&quot;malloc.h&quot; /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Static&nbsp;code * ********************************************************************** */ //字模数据的暂存数组,以单个字模的最大字节数为设定值 #define&nbsp;BYTES_PER_FONT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;128 static&nbsp;U8&nbsp;GUI_FontDataBuf[BYTES_PER_FONT]; extern&nbsp;void&nbsp;GUI_X_GetFontData(char&nbsp;*font,&nbsp;U32&nbsp;oft,&nbsp;U8&nbsp;*ptr,&nbsp;U8&nbsp;bytes); //从外部存储器取得字模数据&nbsp; static&nbsp;void&nbsp;GUI_GetDataFromMemory(const&nbsp;GUI_FONT_PROP&nbsp;GUI_UNI_PTR&nbsp;*pProp,&nbsp;U16P&nbsp;c) { &nbsp;&nbsp;&nbsp;&nbsp;U8&nbsp;BytesPerFont; &nbsp;&nbsp;&nbsp;&nbsp;U32&nbsp;oft; &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*font&nbsp;=&nbsp;(char&nbsp;*)pProp-&gt;paCharInfo-&gt;pData; &nbsp;&nbsp;&nbsp;&nbsp;BytesPerFont&nbsp;=&nbsp;GUI_Context.pAFont-&gt;YSize&nbsp;*&nbsp;pProp-&gt;paCharInfo-&gt;BytesPerLine;&nbsp;//每个字模的数据字节数 &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(BytesPerFont&nbsp;&gt;&nbsp;BYTES_PER_FONT){BytesPerFont&nbsp;=&nbsp;BYTES_PER_FONT;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;&lt;&nbsp;0x80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//英文字符地址偏移算法 &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oft&nbsp;=&nbsp;c&nbsp;*&nbsp;BytesPerFont; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oft&nbsp;=&nbsp;((((c&nbsp;&gt;&gt;&nbsp;8)-0xA1))&nbsp;+&nbsp;((c&nbsp;&amp;&nbsp;0xFF)-0xA1)&nbsp;*&nbsp;94)*&nbsp;BytesPerFont;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中文字符地址偏移算法包括符号 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;GUI_X_GetFontData(font,&nbsp;oft,&nbsp;GUI_FontDataBuf,&nbsp;BytesPerFont); } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;code * ********************************************************************** */ /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUIPROP_DispChar * *&nbsp;Purpose: *&nbsp;&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;routine&nbsp;that&nbsp;displays&nbsp;a&nbsp;character.&nbsp;It&nbsp;is&nbsp;used&nbsp;by&nbsp;all *&nbsp;&nbsp;&nbsp;other&nbsp;routines&nbsp;which&nbsp;display&nbsp;characters&nbsp;as&nbsp;a&nbsp;subroutine. */ void&nbsp;GUIPROP_X_DispChar(U16P&nbsp;c)&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;BytesPerLine; &nbsp;&nbsp;&nbsp;&nbsp;GUI_DRAWMODE&nbsp;DrawMode&nbsp;=&nbsp;GUI_Context.TextMode; &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;GUI_FONT_PROP&nbsp;GUI_UNI_PTR&nbsp;*pProp&nbsp;=&nbsp;GUI_Context.pAFont-&gt;p.pProp; &nbsp;&nbsp;&nbsp;&nbsp;//搜索定位字库数据信息&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;&nbsp;pProp;&nbsp;pProp&nbsp;=&nbsp;pProp-&gt;pNext)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((c&nbsp;&gt;=&nbsp;pProp-&gt;First)&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;pProp-&gt;Last))break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(pProp) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_DRAWMODE&nbsp;OldDrawMode; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;GUI_CHARINFO&nbsp;GUI_UNI_PTR&nbsp;*&nbsp;pCharInfo&nbsp;=&nbsp;pProp-&gt;paCharInfo; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_GetDataFromMemory(pProp,&nbsp;c);//取出字模数据 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BytesPerLine&nbsp;=&nbsp;pCharInfo-&gt;BytesPerLine; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldDrawMode&nbsp;&nbsp;=&nbsp;LCD_SetDrawMode(DrawMode); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_DrawBitmap(GUI_Context.DispPosX,&nbsp;GUI_Context.DispPosY, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCharInfo-&gt;XSize,&nbsp;GUI_Context.pAFont-&gt;YSize, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_Context.pAFont-&gt;XMag,&nbsp;GUI_Context.pAFont-&gt;YMag, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Bits&nbsp;per&nbsp;Pixel&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BytesPerLine, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;GUI_FontDataBuf[0], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;LCD_BKCOLORINDEX &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Fill&nbsp;empty&nbsp;pixel&nbsp;lines&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(GUI_Context.pAFont-&gt;YDist&nbsp;&gt;&nbsp;GUI_Context.pAFont-&gt;YSize)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;YMag&nbsp;=&nbsp;GUI_Context.pAFont-&gt;YMag; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;YDist&nbsp;=&nbsp;GUI_Context.pAFont-&gt;YDist&nbsp;*&nbsp;YMag; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;YSize&nbsp;=&nbsp;GUI_Context.pAFont-&gt;YSize&nbsp;*&nbsp;YMag; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(DrawMode&nbsp;!=&nbsp;LCD_DRAWMODE_TRANS)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_COLOR&nbsp;OldColor&nbsp;=&nbsp;GUI_GetColor(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_SetColor(GUI_GetBkColor()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_FillRect(GUI_Context.DispPosX,&nbsp;GUI_Context.DispPosY&nbsp;+&nbsp;YSize,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_Context.DispPosX&nbsp;+&nbsp;pCharInfo-&gt;XSize,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_Context.DispPosY&nbsp;+&nbsp;YDist); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_SetColor(OldColor); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_SetDrawMode(OldDrawMode);&nbsp;/*&nbsp;Restore&nbsp;draw&nbsp;mode&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_Context.DispPosX&nbsp;+=&nbsp;pCharInfo-&gt;XDist&nbsp;*&nbsp;GUI_Context.pAFont-&gt;XMag; &nbsp;&nbsp;&nbsp;&nbsp;} } /********************************************************************* * *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUIPROP_GetCharDistX */ int&nbsp;GUIPROP_X_GetCharDistX(U16P&nbsp;c)&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;GUI_FONT_PROP&nbsp;GUI_UNI_PTR&nbsp;*&nbsp;pProp&nbsp;=&nbsp;GUI_Context.pAFont-&gt;p.pProp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(;&nbsp;pProp;&nbsp;pProp&nbsp;=&nbsp;pProp-&gt;pNext)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((c&nbsp;&gt;=&nbsp;pProp-&gt;First)&nbsp;&amp;&amp;&nbsp;(c&nbsp;&lt;=&nbsp;pProp-&gt;Last))break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(pProp)&nbsp;?&nbsp;(pProp-&gt;paCharInfo)-&gt;XSize&nbsp;*&nbsp;GUI_Context.pAFont-&gt;XMag&nbsp;:&nbsp;0; } /*---------------------------------------------------------------------------*/ /*字库外部函数部分-----------------------------------------------------------*/ void&nbsp;GUI_X_GetFontData(char*&nbsp;font,&nbsp;U32&nbsp;oft,&nbsp;U8&nbsp;*ptr,&nbsp;U8&nbsp;bytes) { &nbsp;&nbsp;&nbsp;&nbsp;FIL&nbsp;*fsrc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义文件操作类&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;FRESULT&nbsp;res;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义操作结果变量&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;UINT&nbsp;br;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定义读写数量变量 &nbsp;&nbsp;&nbsp;&nbsp;fsrc=(FIL*)mymalloc(SRAMIN,sizeof(FIL));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;f_open(fsrc,&nbsp;font,&nbsp;FA_OPEN_EXISTING&nbsp;|&nbsp;FA_READ);&nbsp;&nbsp;&nbsp;//打开字库文件&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if(res&nbsp;!=&nbsp;FR_OK)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//打开失败显示问号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;f_lseek(fsrc,oft);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到首地址&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;f_read(fsrc,&nbsp;ptr,&nbsp;bytes,&nbsp;&amp;br);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取32个字库点阵数据 &nbsp;&nbsp;&nbsp;&nbsp;res&nbsp;=&nbsp;f_close(fsrc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭字体 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myfree(SRAMIN,fsrc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</pre><p class="artical_littlestyle4">4.接下来就是新建三个自己的与字体相关的文件</p><p style="text-indent: 2em;">分别是:<span style="color: rgb(255, 0, 0);">GUI_Font12.c</span>,<span style="color: rgb(255, 0, 0);">GUI_Font14.c</span>,<span style="color: rgb(255, 0, 0);">GUI_Font16.c</span>,并且将它们加入工程。<span style="color: rgb(255, 0, 0);">GUI_Font12.c</span>内容如下:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注意:下述代码的字库在SD卡的路径(SD卡卷标为0,且” SYSTEM”文件夹为SD卡根目录下的文件夹 )。</span></p><pre class="brush:cpp;toolbar:false PrismJs">#include&nbsp;&quot;GUI.h&quot; /* **************************************** * *说明:GUI_FontHZ12.C文件 * *By:ailson&nbsp;jack * *Date:2013.09.21 ***************************************** */ extern&nbsp;int&nbsp;GUIPROP_X_GetCharDistX(U16P&nbsp;c);//声明部分 extern&nbsp;void&nbsp;GUIPROP_X_DispChar(U16P&nbsp;c)&nbsp;;&nbsp; &nbsp; GUI_CONST_STORAGE&nbsp;GUI_CHARINFO&nbsp;GUI_FontHZ12_CharInfo[2]&nbsp;=&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;6,&nbsp;6,&nbsp;1,&nbsp;(void&nbsp;*)&quot;0:SYSTEM/FONT/GUI_ASC12.gui&quot;},//&amp;ASC_ROM_6X12&nbsp;字库的路径 &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;12,12,2,&nbsp;(void*)&nbsp;&quot;0:SYSTEM/FONT/GUI_HZ12.gui&quot;},&nbsp;//&amp;HZ_ROM_12X12字库的路径 }; GUI_CONST_STORAGE&nbsp;GUI_FONT_PROP&nbsp;GUI_FontHZ12_PropHZ=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xA1A1,&nbsp;//第一个字符 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFEFE,&nbsp;//最后一个字符 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;GUI_FontHZ12_CharInfo[1],&nbsp;//字符信息 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void&nbsp;*)0,&nbsp; }; GUI_CONST_STORAGE&nbsp;&nbsp;GUI_FONT_PROP&nbsp;GUI_FontHZ12_PropASC=&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000,&nbsp;//第一个字符 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x007F,&nbsp;//最后一个字符 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;GUI_FontHZ12_CharInfo[0],&nbsp;//字符信息 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void&nbsp;GUI_CONST_STORAGE&nbsp;*)&amp;GUI_FontHZ12_PropHZ,&nbsp; }; GUI_CONST_STORAGE&nbsp;&nbsp;GUI_FONT&nbsp;GUI_FontHZ12&nbsp;=&nbsp; { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GUI_FONTTYPE_PROP_USER, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12,&nbsp;//xsize &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12,&nbsp;//yszie &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;//x方向放大倍数 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;//y方向放大倍数 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(void&nbsp;GUI_CONST_STORAGE&nbsp;*)&amp;GUI_FontHZ12_PropASC };</pre><p style="text-indent: 2em;">至于<span style="color: rgb(255, 0, 0);">GUI_Font14.c</span>,<span style="color: rgb(255, 0, 0);">GUI_Font16.c</span>,的内容,可查看下面的附件。</p><p style="text-indent: 2em;">至此,UCGUI的外置字库添加完成.</p><p style="text-indent: 2em;">然后可在<span style="color: rgb(255, 0, 0);">main()函数</span>所在的文件里面输入:<br/></p><pre class="brush:cpp;toolbar:false PrismJs">extern&nbsp;GUI_CONST_STORAGE&nbsp;GUI_FONT&nbsp;GUI_FontHZ12; extern&nbsp;GUI_CONST_STORAGE&nbsp;GUI_FONT&nbsp;GUI_FontHZ14; extern&nbsp;GUI_CONST_STORAGE&nbsp;GUI_FONT&nbsp;GUI_FontHZ16;</pre><p style="text-indent: 2em;">再在<span style="color: rgb(255, 0, 0);">main()函数</span>里面输入如下代码(只是部分代码,相关初始化什么的就自己去弄吧):<br/></p><pre class="brush:cpp;toolbar:false PrismJs">GUI_SetFont(&amp;GUI_FontHZ16); GUI_DispStringAt(&quot;UC/GUI外置字库&quot;,30,30); GUI_DispStringAt(&quot;---2013.09.21&quot;,81,50); GUI_SetFont(&amp;GUI_Font8x16); GUI_DispStringAt(&quot;AILSON&nbsp;JACK&quot;,60,90); GUI_SetFont(&amp;GUI_FontHZ12); GUI_DispStringAt(&quot;MCU的世界,你值得探索!!!(12x12)&quot;,3,120); GUI_SetFont(&amp;GUI_FontHZ14); GUI_DispStringAt(&quot;MCU的世界,你值得探索!!!(14x14)&quot;,3,140); GUI_SetFont(&amp;GUI_FontHZ16); GUI_DispStringAt(&quot;MCU的世界,你值得探索!!!(16x16)&quot;,3,160); GUI_SetFont(&amp;GUI_FontHZ16);</pre><p style="text-indent: 2em;">移植不是随便编的,有图有真相哦 ,其效果图如下:<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.11/1533955020300703.jpg" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.11/1533955020300703.jpg&#39;)"/></p><p style="text-indent: 2em;">好了,至此,应该就完成了UCGUI添加外置字库到SD卡的全过程。</p><p style="text-indent: 0em;">&nbsp;&nbsp;下面是一些附件: <a class="btn btn-success" href="https://pan.baidu.com/s/1qWp11Pa#list/path=%2F" target="_blank">点此下载</a></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:SYSTEM.rar是SD卡根目录下的字库。直接将其解压,然后将解压得到的文件夹拷贝到SD卡的根目录下即可。</span><br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
转载请注明来源: 本文链接:  By: AilsonJack
UCGUI添加外置字库到SD卡(附字库)  |  说好一起走
暂无评论,要不要来个沙发
发表评论

 
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号