【ESK32-360测评】+TFT屏显示功能及扩展(3)
本帖最后由 jinglixixi 于 2020-8-9 00:02 编辑<p>3. 增添汉字显示功能</p>
<p>在TFT屏显示功能中提供了字符及字符串的显示函数,其字符库的结构为:</p>
<p>FONT_TYPE ASCII_Font_Table[] = {</p>
<p> /* Space ' ' */</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 0x0000, 0x0000, 0x0000, 0x0000,</p>
<p> 。。。</p>
<p>};</p>
<p> </p>
<p>相应的字符显示函数为:</p>
<pre>
<code class="language-cpp">void LCD_CharDraw(u32 X_Location, u32 Y_Location, u16 *Cptr)
{
u32 xid = X_Location;
u32 i = 0, j = 0;
LCD_StarterSet(X_Location, Y_Location);
for (i = 0; i < Font_Raw; i++) // 24
{
LCD_WriteRAMPrior();
for (j = 0; j < Font_Column; j++) // 16
{
if ((Cptr & (1 << j)) == 0x00)
{
LCD_WriteRAM(Color_Back);
}
else
{
LCD_WriteRAM(Color_Text);
}
}
xid++;
LCD_StarterSet(xid, Y_Location);
}
}</code></pre>
<p>通过分析可知,它所使用的是16*24的点阵字模,字符宽为16个像素点,高为24个像素点。</p>
<p>为此我们也可以通过字模提取软件来为其配置相应的中文字库,以实现专用汉字的显示。</p>
<p>1)字模的提取</p>
<p>使用PCtoLCD2002完美版软件来提取字模,对提取字模的相关设置如图1所示,提取后字模见图2所示。</p>
<p>稍感遗憾的是该软件提取的字模是以字节为单位的,无法直接生成以字为单位的字模,为先解决汉字显示函数,只好先手工完成数据格式的转换。</p>
<p></p>
<p>图1 字模提取的设置</p>
<p> </p>
<p></p>
<p>图2 提取字模</p>
<p>随后用提取的字模替换一个指定字符的字模,再调用字符显示函数加以测试,可见到显示正确,</p>
<p>这样我们就可以放手解决单字节数据格式的问题了。</p>
<p>2)配置汉字显示函数</p>
<p>经改造相应的汉字显示函数为:</p>
<pre>
<code class="language-cpp">void LCD_CharDisplayA(u32 Line_Num, u32 Column, u8 Ascii)
{
LCD_CharDrawA(Line_Num, Column, (u8 *)&ASCII_FontA_Table);
}</code></pre>
<pre>
<code class="language-cpp">void LCD_CharDrawA(u32 X_Location, u32 Y_Location, u8 *Cptr)
{
u32 xid = X_Location;
u32 i = 0, j = 0;
u16 u = 0;
LCD_StarterSet(X_Location, Y_Location);
for (i = 0; i < Font_Raw; i++) //24
{
LCD_WriteRAMPrior();
u=Cptr;
for (j = 8; j>0; j--) //Font_Column/2
{
if ((u & (1 << (j-1))) == 0x00)
{
LCD_WriteRAM(Color_Back);
}
else
{
LCD_WriteRAM(Color_Text);
}
}
u=Cptr;
for (j = 8; j>0; j--)
{
if ((u & (1 << (j-1))) == 0x00)
{
LCD_WriteRAM(Color_Back);
}
else
{
LCD_WriteRAM(Color_Text);
}
}
xid++;
LCD_StarterSet(xid, Y_Location);
}
}</code></pre>
<p>显示图3所示效果的主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
LCD_Init();
LCD_Config();
LCD_BackColorSet(Black);
LCD_TextColorSet(Yellow);
LCD_StringLineDisplay(Line3, " Holtek ");
LCD_StringLineDisplay(Line4, " HT32 Series ");
LCD_StringLineDisplay(Line5, " LCD Example ");
LCD_CharDisplayA(Line1, 70, 0);
LCD_CharDisplayA(Line1, 90, 1);
LCD_CharDisplayA(Line1, 110, 2);
LCD_CharDisplayA(Line1, 130, 3);
LCD_CharDisplayA(Line1, 150, 4);
LCD_PicDraw((144), (100), 48, 100, HT32_Table);
while (1);
}</code></pre>
<p></p>
<p>图3 汉字显示效果</p>
<p> </p>
<p></p>
<p>图4 更改字库内容的显示效果</p>
<p> </p>
<p>24*16点阵的字库适合制作显示界面,而16*16点阵字库更适合信息显示,在采用16*16点阵的中文字库的情况下,</p>
<p>若配置相应显示函数则可产生图5所示的显示效果。</p>
<p></p>
<p>图5不同规格字模显示效果</p>
页:
[1]