本帖最后由 jinglixixi 于 2020-8-9 11:20 編輯
3. 增添漢字顯示功能 在TFT屏顯示功能中提供了字符及字符串的顯示函數,其字符庫的結構為: 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, 。。。 };
相應的字符顯示函數為: - 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);
- }
- }
復制代碼通過分析可知,它所使用的是16*24的點陣字模,字符寬為16個像素點,高為24個像素點。 為此我們也可以通過字模提取軟件來為其配置相應的中文字庫,以實現專用漢字的顯示。
1)字模的提取 使用PCtoLCD2002完美版軟件來提取字模,對提取字模的相關設置如圖1所示,提取后字模見圖2所示。 稍感遺憾的是該軟件提取的字模是以字節為單位的,無法直接生成以字為單位的字模,為先解決漢字顯示函數,只好先手工完成數據格式的轉換。
1.jpg (46.64 KB, 下載次數: 66)
下載附件
2020-8-8 23:47 上傳
圖1 字模提取的設置
2.jpg (60.6 KB, 下載次數: 100)
下載附件
2020-8-8 23:47 上傳
圖2 提取字模
隨后用提取的字模替換一個指定字符的字模,再調用字符顯示函數加以測試,可見到顯示正確, 這樣我們就可以放手解決單字節數據格式的問題了。 2)配置漢字顯示函數 經改造相應的漢字顯示函數為: - 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);
- }
- }
復制代碼
顯示圖3所示效果的主程序為: - 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);
- }
復制代碼
3.jpg (30.16 KB, 下載次數: 93)
下載附件
2020-8-8 23:47 上傳
圖3 漢字顯示效果
4.jpg (24.85 KB, 下載次數: 77)
下載附件
2020-8-8 23:47 上傳
圖4 更改字庫內容的顯示效果
24*16點陣的字庫適合制作顯示界面,而16*16點陣字庫更適合信息顯示,在采用16*16點陣的中文字庫的情況下,若配置相應顯示函數則可產生圖5所示的顯示效果。
5.jpg (28.49 KB, 下載次數: 67)
下載附件
2020-8-8 23:47 上傳
圖5 不同規格字模顯示效果
|