標(biāo)題: ESK32-360開發(fā)板TFT屏顯示功能及擴(kuò)展(3) [打印本頁]
作者: jinglixixi 時(shí)間: 2020-8-8 23:49
標(biāo)題: ESK32-360開發(fā)板TFT屏顯示功能及擴(kuò)展(3)
本帖最后由 jinglixixi 于 2020-8-9 11:20 編輯
3. 增添漢字顯示功能
在TFT屏顯示功能中提供了字符及字符串的顯示函數(shù),其字符庫的結(jié)構(gòu)為:
FONT_TYPE ASCII_Font_Table[] = {
/* Space ' ' */
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
。。。
};
相應(yīng)的字符顯示函數(shù)為:
- 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[i] & (1 << j)) == 0x00)
- {
- LCD_WriteRAM(Color_Back);
- }
- else
- {
- LCD_WriteRAM(Color_Text);
- }
- }
- xid++;
- LCD_StarterSet(xid, Y_Location);
- }
- }
復(fù)制代碼通過分析可知,它所使用的是16*24的點(diǎn)陣字模,字符寬為16個(gè)像素點(diǎn),高為24個(gè)像素點(diǎn)。
為此我們也可以通過字模提取軟件來為其配置相應(yīng)的中文字庫,以實(shí)現(xiàn)專用漢字的顯示。
1)字模的提取
使用PCtoLCD2002完美版軟件來提取字模,對提取字模的相關(guān)設(shè)置如圖1所示,提取后字模見圖2所示。
稍感遺憾的是該軟件提取的字模是以字節(jié)為單位的,無法直接生成以字為單位的字模,為先解決漢字顯示函數(shù),只好先手工完成數(shù)據(jù)格式的轉(zhuǎn)換。
1.jpg (46.64 KB, 下載次數(shù): 66)
下載附件
2020-8-8 23:47 上傳
圖1 字模提取的設(shè)置
2.jpg (60.6 KB, 下載次數(shù): 100)
下載附件
2020-8-8 23:47 上傳
圖2 提取字模
隨后用提取的字模替換一個(gè)指定字符的字模,再調(diào)用字符顯示函數(shù)加以測試,可見到顯示正確,
這樣我們就可以放手解決單字節(jié)數(shù)據(jù)格式的問題了。
2)配置漢字顯示函數(shù)
經(jīng)改造相應(yīng)的漢字顯示函數(shù)為:
- void LCD_CharDisplayA(u32 Line_Num, u32 Column, u8 Ascii)
- {
- LCD_CharDrawA(Line_Num, Column, (u8 *)&ASCII_FontA_Table[Ascii * 48]);
- }
-
- 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[i*2];
- 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[i*2+1];
- 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);
- }
- }
復(fù)制代碼
顯示圖3所示效果的主程序?yàn)椋?/div>
- 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);
- }
復(fù)制代碼
3.jpg (30.16 KB, 下載次數(shù): 93)
下載附件
2020-8-8 23:47 上傳
圖3 漢字顯示效果
4.jpg (24.85 KB, 下載次數(shù): 77)
下載附件
2020-8-8 23:47 上傳
圖4 更改字庫內(nèi)容的顯示效果
24*16點(diǎn)陣的字庫適合制作顯示界面,而16*16點(diǎn)陣字庫更適合信息顯示,在采用16*16點(diǎn)陣的中文字庫的情況下,若配置相應(yīng)顯示函數(shù)則可產(chǎn)生圖5所示的顯示效果。
5.jpg (28.49 KB, 下載次數(shù): 67)
下載附件
2020-8-8 23:47 上傳
圖5 不同規(guī)格字模顯示效果
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |