2010年6月26日 星期六

一個優化過的完全版的ucGUI漢字形檔_hzk12使用方法

一個優化過的完全版的ucGUI漢字形檔_hzk12使用方法


將解壓後的hzk12.c放到ucGUIfont路徑下


GUI.H文件內加一行:extern const GUI_FONT GUI_FontHZ12;


按如下形式調用即可顯示中文了:


GUI_Init();
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_FontHZ12);
GUI_SetTextAlign(GUI_TA_LEFT);
GUI_DispStringAt("漢字形檔顯示測試",20,20);


雖然是GUI定義的,但是在其他單片機顯示點陣字元時,可以同樣定義。使用起來會非常方便。以下為另一篇文章,講得更詳細些。為記。


HZK16中取出所須的漢字, 組成新的字形檔檔, 再變成UCGUI中所須的原始檔案. 這樣講是非常抽象的, 首先, 你取出的漢字, 其機內碼不是連續的, 那麼這樣一來, 如果還是使用漢字的標準機內碼的話, 則必須為每一個要用到的漢字都建立一個GUI_FONT_PROP結構, 一個漢字一個, 在將他們鏈結成鏈表, 這樣做唯一好處是可以直接以如下方法:



const unsigned char helloworld[]="世界你好";


GUI_DispString((const char*)helloworld);


依靠編譯器來將"世界你好"轉變成漢字機內碼的字串. 但我們亦可手工構造要顯示的漢字如下:


const unsigned char helloworld[]={0xca, 0xc0, 0xbd, 0xe7, 0xc4, 0xe3, 0xba, 0xc3, 0x00};
GUI_DispString((const char*)helloworld);




如上兩種比較, 結果是一樣的,唯一不同的是, 第一種方法顯示漢字時, 無須使用知道漢字的機內碼, 而是由編譯器來轉換的, 但我要說的是, 其實兩者本質是一樣的, 只是對使用者來說有表面上的不同.比較以上的兩種顯示漢字時構造字串的方法, 我們可以得到一個啟示, 對於第二種, 我們可以採取自定義漢字機內碼, 然後直接通過自定義機內碼來顯示漢字, 這一點我已經在"建立自定義小型漢字形檔說明"一文當中說明了, 現在我想說的是對於採用第一種方法顯示漢字的建立自定義小型字形檔的方法:



使用如下:


void MainTask(void)
{
char helloworld[] = "世界你好";
GUI_Init();
GUI_DispString((const char*)helloworld);
while(1){
GUI_Delay(800);
}
}


構造SmallHZK12_2.c如下:


/***********************************************************************
Revision By: ucgui
Comments: SmallHZK12_2.c
這時是第二種自定義小型漢字形檔的方法,在這種方法下可以採用
char hellworld[]="世界你好";這種方法來方便的顯示漢字,
第一種方法容易使用, 不過缺點是每一個字對應一個GUI_FONT_PROP結構
, 明顯佔用了多的記憶體, 減慢查找顯示的速度.
***********************************************************************/



#include "GUI.H"
#ifndef GUI_FLASH
#define GUI_FLASH
#endif
extern GUI_FLASH const GUI_FONT GUI_FontHZ12;


//



GUI_FLASH const unsigned char acFontHZ12_cac0[24] = {
0x04,0x40, 0x24,0x40, 0x24,0x40, 0x24,0x40, 0xff,0xf0, 0x24,0x40, 0x24,0x40, 0x24,0x40,



0x27,0xc0, 0x24,0x40, 0x20,0x00, 0x 3f ,0xf0};


//
GUI_FLASH const unsigned char acFontHZ12_bde7[24] = {
0x 3f ,0xc0, 0x24,0x40, 0x 3f ,0xc0, 0x24,0x40, 0x 3f ,0xc0, 0x04,0x00, 0x0b,0x00, 0x38,0xf0,0xc9,0x20, 0x09,0x00, 0x11,0x00, 0x61,0x00};


//
GUI_FLASH const unsigned char acFontHZ12_c4e3[24] = {
0x12,0x00, 0x12,0x00, 0x27,0xf0, 0x24,0x20, 0x69,0x40, 0xa1,0x00, 0x25,0x40,



0x25,0x20, 0x29,0x10, 0x31,0x10, 0x25,0x00, 0x22,0x00};


//
GUI_FLASH const unsigned char acFontHZ12_bac3[24] = {
0x20,0x00, 0x27,0xe0, 0x20,0x40, 0xf8,0x80, 0x48,0x80, 0x48,0xa0, 0x57,0xf0, 0x50,0x80,



0x30,0x80, 0x28,0x80, 0x 4a ,0x80, 0x81,0x00};


GUI_FLASH const GUI_CHARINFO GUI_FontHZ12_CharInfo[4] = {
{ 12, 12, 2, (void GUI_FLASH *)&acFontHZ12_cac0 },
{ 12, 12, 2, (void GUI_FLASH *)&acFontHZ12_bde7 },
{ 12, 12, 2, (void GUI_FLASH *)&acFontHZ12_c4e3 },
{ 12, 12, 2, (void GUI_FLASH *)&acFontHZ12_bac3 }
};


GUI_FLASH const GUI_FONT_PROP GUI_FontHZ12_Propa4= {
0xbac3,
0xbac4,
&GUI_FontHZ12_CharInfo[3],
0
};


GUI_FLASH const GUI_FONT_PROP GUI_FontHZ12_Propa3= {
0xc4e3,
0xc4e4,
&GUI_FontHZ12_CharInfo[2],
(void *)&GUI_FontHZ12_Propa4
};


GUI_FLASH const GUI_FONT_PROP GUI_FontHZ12_Propa2= {
0xbde7,
0xbde8,
&GUI_FontHZ12_CharInfo[1],
(void *)&GUI_FontHZ12_Propa3
};


GUI_FLASH const GUI_FONT_PROP GUI_FontHZ12_Propa1= {
0xcac0,
0xcac1,
&GUI_FontHZ12_CharInfo[0],
(void *)&GUI_FontHZ12_Propa2
};



GUI_FLASH const GUI_FONT GUI_FontHZ12 = {
GUI_FONTTYPE_PROP_SJIS,
12,
12,
1,
1,
(void GUI_FLASH *)&GUI_FontHZ12_Propa1
};


 


沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。