STemWin显示汉字 — SD卡外挂XBF字库
转载注明出处 方法来自安福莱教程
1: 使用emWin自带小工具生成字库
(1)启动软件 选择4位抗锯齿
(2)根据需求选择字体类型和字体大小
(3)另存为XBF格式
2: 创建XBF字体
#include "DIALOG.h" #include "font_cn.h" FATFS fatfs; GUI_FONT XBF_Font; FIL Fontfile; FRESULT result; unsigned int bw; GUI_XBF_DATA XBF_Data; static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer) { FIL *FontFile; FontFile = (FIL *)pVoid; result =f_lseek(FontFile, Off); if (result != FR_OK) { return 1; } result = f_read(FontFile, pBuffer, NumBytes, &bw); if (result != FR_OK) { return 1; } return 0; } static void _ShowXBF(u8 * pname) { result=f_mount(&fatfs,(const TCHAR*)pname,0); result = f_open(&Fontfile,(const TCHAR*)pname,FA_OPEN_EXISTING|FA_READ|FA_OPEN_ALWAYS); if(result != FR_OK) { return; } GUI_XBF_CreateFont(&XBF_Font, // Pointer to GUI_FONT structure in RAM &XBF_Data, // Pointer to GUI_XBF_DATA structure in RAM GUI_XBF_TYPE_PROP_AA4_EXT, // Font type to be created _cbGetData, // Pointer to callback function &Fontfile // Pointer to be passed to GetData function ); } void Font_Init(u8 * pname) { _ShowXBF(pname); GUI_UC_SetEncodeUTF8(); }
3: 使用文字小工具创建 TEXT
Font_Init("0:/FONT/KoPu.xbf"); hItem=TEXT_CreateEx( 37, 160,ICON_TEXT_SIZE_X,ICON_TEXT_SIZE_Y,0,WM_CF_SHOW,TEXT_CF_HCENTER,GUI_ID_TEXT0, "IO输出"); TEXT_SetTextColor(hItem, GUI_DARKBLUE); TEXT_SetFont(hItem,&XBF_Font);
这里特别注意的是 文件的编码格式选择UTF-8编码 要不显示会乱码
IAR环境下设置文件编码的方法:
第一种方法:菜单Toos->Options->Editor
第二种方法:在编辑器的编辑区点右键”Character Encoding“选项, 选择“Convert to UTF-8”