在emwin中显示字库芯片GT23L24M0140的字模
扫描二维码
随时随地手机看文章
环境:
主机:WIN8
开发环境:MDK5.13
mcu: stm32f407VGIGH6
emwin: STemWin5.22
字库芯片:GT23L24M0140
说明:
项目中需要显示生僻字,所以不能使用GB2312,选择字库芯片GT23L24M0140,支持GB18030标准。
难点在于在emwin中嵌入此字库芯片的字符,emwin本身有一套接口,所以必须满足这套接口才能显示。
解决的方法是先移植在emwin中显示sd卡/flash中字库的函数,然后将具体读取函数替换成直接读取字库芯片的函数。
字库芯片的驱动程序见此文:驱动字库芯片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"
//字模数据的暂存数组,以单个字模的最大字节数为设定值
#defineBYTES_PER_FONT1024
staticU8GUI_FontDataBuf[BYTES_PER_FONT];
///*---------------------------------------------------------------------------*/
///*字库外部函数部分-----------------------------------------------------------*/
//voidGUI_X_GetFontData(char*font,U32oft,U8*ptr,U8bytes)
//{
////FILfsrc;//定义文件操作类
////FRESULTres;//定义操作结果变量
//// UINT br;