1. 程式人生 > >嵌入式系統學習——STM32之TFT漢字顯示

嵌入式系統學習——STM32之TFT漢字顯示

常用漢字編碼

GB2312
GB13000
GBK
BIG5(繁體)

漢字顯示原理

漢字在液晶上的顯示其實就是一些點的顯示與不顯示,這就相當於我們的筆一樣,有筆經過的地方就畫出來,沒經過的地方就不畫。所以要顯示漢字,我們首先要知道漢字的點陣資料,這些資料可以由專門的軟體來生成。只要知道了一個漢字點陣的生成方法,那麼我們在程式裡面就可以把這個點陣資料解析成一個漢字。

{
0x01,0x00,0x41,0x01,0x41,0x02,0x41,0x0C,0x7F,0xF0,
0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,
0x7F,0xFF,0x41,0x00,0x41,0x00,0x41,0x00,0x01,0x00,
0x00,0x00
},/*"開",0*/
漢字內碼(GBK/GB2312)->查詢點陣庫->解析->顯示。

GBK碼

每個GBK碼由2個位元組組成,第一個位元組為0X81~0XFE,第二個位元組分為兩部分,一是0X40~0X7E,二是0X80~0XFE。
我們把第一個位元組代表的意義稱為區,那麼GBK裡面總共有126個區(0XFE-0X81+1),每個區內有190個漢字(0XFE-0X80+0X7E-0X40+2),總共就有126*190=23940個漢字。 
 我們的點陣庫只要按照這個編碼規則從0X8140開始,逐一建立,每個區的點陣大小為每個漢字所用的位元組數*190。這樣,我們就可以得到在這個字型檔裡面定位漢字的方法:
 當GBKL<0X7F時:Hp=((GBKH-0x81)*190+GBKL-0X40)*(size*2);
 當GBKL>0X7F時:Hp=((GBKH-0x81)*190+GBKL-0X41)*(size*2);

其中GBKH、GBKL分別代表GBK的第一個位元組和第二個位元組(也就是高位和低位),size代表漢字字型的大小(比如16字型,12字型等),Hp則為對應漢字點陣資料在字型檔裡面的起始地址(假設是從0開始存放)。
注意:
電腦端的字型大小與我們生成點陣大小關係為:
fsize=disize* 6/8;
其中fsize為電腦端字型大小,dsize是點陣大小(12,16,24)。所以16X16點陣大小對應的是12字型

漢字顯示程式思路

存字型檔(fontupd.c):

①做好字型檔。
②將字型檔GBK12,GBK16,GBK24依次寫入SPI FLASH連續地址:update_font();
③字型檔寫入完畢之後,做標記:ftinfo.fontok=0XAA;

顯示漢字(text.c):

 Show_Str ->Show_Font->Get_HzMat->解析顯示。