在emwin中顯示字庫芯片GT23L24M0140的字模
環(huán)境:
主機:WIN8
開發(fā)環(huán)境:MDK5.13
mcu: stm32f407VGIGH6
emwin: STemWin5.22
字庫芯片:GT23L24M0140
說明:
項目中需要顯示生僻字,所以不能使用GB2312,選擇字庫芯片GT23L24M0140,支持GB18030標準。
難點在于在emwin中嵌入此字庫芯片的字符,emwin本身有一套接口,所以必須滿足這套接口才能顯示。
解決的方法是先移植在emwin中顯示sd卡/flash中字庫的函數(shù),然后將具體讀取函數(shù)替換成直接讀取字庫芯片的函數(shù)。
字庫芯片的驅動程序見此文:驅動字庫芯片GT23L24M0140
顯示效果:
源代碼:
GUI_UC_EncodeNone.c
/*
*********************************************************************************************************
*uC/GUI
*Universalgraphicsoftwareforembeddedapplications
*
*(c)Copyright2002,MicriumInc.,Weston,FL
*(c)Copyright2002,SEGGERMicrocontrollerSystemeGmbH
*
*礐/GUIisprotectedbyinternationalcopyrightlaws.Knowledgeofthe
*sourcecodemaynotbeusedtowriteasimilarproduct.Thisfilemay
*onlybeusedinaccordancewithalicenseandshouldnotberedistributed
*inanyway.Weappreciateyourunderstandingandfairness.
*
----------------------------------------------------------------------
File:GUI_UC_EncodeNone.c
Purpose:Encodingroutinesfornonunicodesystems(default)
---------------------------END-OF-HEADER------------------------------
*/
//#include"GUI_Protected.h"
#include"GUI_Private.h"
/*********************************************************************
*
*Staticcode
*
**********************************************************************
*/
/*********************************************************************
*
*_GetCharCode
*
*Purpose:
*ReturntheUNICODEcharactercodeofthecurrentcharacter.
*/
staticU16_GetCharCode(constcharGUI_UNI_PTR*s){
if((*s)>0xA0)
{
return*(constU16GUI_UNI_PTR*)s;
}
return*(constU8GUI_UNI_PTR*)s;
}
/*********************************************************************
*
*_GetCharSize
*
*Purpose:
*Returnthenumberofbytesofthecurrentcharacter.
*/
staticint_GetCharSize(constcharGUI_UNI_PTR*s){
GUI_USE_PARA(s);
if((*s)>0xA0)
{
return2;
}
return1;
}
/*********************************************************************
*
*_CalcSizeOfChar
*
*Purpose:
*Returnthenumberofbytesneededforthegivencharacter.
*/
staticint_CalcSizeOfChar(U16Char){
GUI_USE_PARA(Char);
if(Char>0xA0A0)
{
return2;
}
return1;
}
/*********************************************************************
*
*_Encode
*
*Purpose:
*Encodecharacterinto1/2/3bytes.
*/
staticint_Encode(char*s,U16Char){
if(Char>0xA0A0)
{
*((U16*)s)=(U16)(Char);
return2;
}
*s=(U8)(Char);
return1;
}
/*********************************************************************
*
*Staticdata
*
**********************************************************************
*/
/*********************************************************************
*
*_API_Table
*/
constGUI_UC_ENC_APILISTGUI__API_TableNone={
_GetCharCode,/*returncharactercodeasU16*/
_GetCharSize,/*returnsizeofcharacter:1*/
_CalcSizeOfChar,/*returnsizeofcharacter:1*/
_Encode/*Encodecharacter*/
};
/*********************************************************************
*
*Exportedcode
*
**********************************************************************
*/
/*********************************************************************
*
*GUI_UC_SetEncodeNone
*/
voidGUI_UC_SetEncodeNone_User(void){
GUI_LOCK();
//GUI_Context.pUC_API=&GUI__API_TableNone;
GUI_pUC_API=&GUI__API_TableNone;
GUI_UNLOCK();
}
/***************************Endoffile****************************/
GUI_CharPEx.c
#include
#include"GUI_Private.h"
//#include"ff.h"
#include"string.h"
#include"inf_font.h"
#include"font_type.h"
//字模數(shù)據(jù)的暫存數(shù)組,以單個字模的最大字節(jié)數(shù)為設定值
#defineBYTES_PER_FONT1024
staticU8GUI_FontDataBuf[BYTES_PER_FONT];
///*---------------------------------------------------------------------------*/
///*字庫外部函數(shù)部分-----------------------------------------------------------*/
//voidGUI_X_GetFontData(char*font,U32oft,U8*ptr,U8bytes)
//{
////FILfsrc;//定義文件操作類
////FRESULTres;//定義操作結果變量
//// UINT br;