?? font.c
字號:
//**********************************************************************************************
//* 文 件 名 : font.c
//*
//* 文件描述 : 英文+漢字顯示, 漢字字庫從SD卡文件中讀取
//*
//* 作 者 : knight
//* 版 本 : V0.01
//* 編 譯 器 : IAR EWARM 5.30
//* 日 期 : 2009-10-18
//* 所需支持代碼: tft, sd_mmc_spi, partition, fat16
//**********************************************************************************************
#include "font.h"
#include "chardot.h"
_Font Font;
_Page Page;
u8 isHZKOpened=False;
/**********************************************************************
* 函數 ShowOneHZ --- 顯示一個漢字
* 輸入參數 X,Y --- 漢字左上角坐標
* CnASCII_H,CnASCII_L --- 漢字的ASCII
* isTransparent ---背景是否透明
* 輸出參數 無
* 返回值 True,False
**********************************************************************/
u8
ShowOneHZ(s16 X,s16 Y,u8 CnASCII_H,u8 CnASCII_L,u8 isTransparent)
{
s32 Offset;
u16 i,j;
u16 ByteOfHZ,Cnt;
u8 HZBuf[72];
//USART_SendBuffer(USART1,"----OpenFile(Font.Name)\r\n",MaxBufLen);
if (isHZKOpened==False)
{
if ( !OpenFile(Font.Name) )
{
return False;
}
isHZKOpened=True;
}
ByteOfHZ=(Font.Width * Font.Height)/8;
if ( (CnASCII_H > 0xA0) && (CnASCII_H > 0xA0) )
{
///USART_SendBuffer(USART1,"----Fat16_Seek_File(Offset)\r\n",MaxBufLen);
Offset = ByteOfHZ * ( (CnASCII_H - 0xA1)*94 + (CnASCII_L - 0xA1) );
Fat16_Seek_File(FileData, &Offset, FAT16_SEEK_SET);
///USART_SendBuffer(USART1,"----Fat16_Read_File(HZBuf,ByteOfHZ)\r\n",MaxBufLen);
Cnt=Fat16_Read_File(FileData, HZBuf, ByteOfHZ);
if (Cnt!=ByteOfHZ)
{
return False;
}
///USART_SendBuffer(USART1,"----Print HZ\r\n",MaxBufLen);
SetWindowRange(0,0,TFTScreenWidth,TFTScreenHeight);
SetWindowRange(X,Y,Font.Width,Font.Height);
tftWriteCmd(0x22);
for (i=0;i<ByteOfHZ;i++)
{
for (j=0;j<8;j++)
{
if ( ( HZBuf[i] & (0x80>>j) ) != 0 )
{
tftWriteData16(Font.FColor.H,Font.FColor.L);
}
else
{
if(!isTransparent)
{
tftWriteData16(Font.BColor.H,Font.BColor.L);
}
else
{;}
}
}
}
}
return True;
}
/**********************************************************************
* 函數 tftShowStr --- 顯示字符串
* 輸入參數 Row,Col --- 起始 行和列
* str --- 需要顯示的字符串
* isTransparent ---背景是否透明
* 輸出參數 無
* 返回值 實際顯示的字符串個數
**********************************************************************/
u8
tftShowStr(u8 Row,u8 Col, u8* str,u16 buflen,u8 isTransparent)
{
u8 Cnt=0;
u8 i,j;
s16 pX,pY;
u8 CnASCII_H,CnASCII_L;
isHZKOpened=False;
if (!OpenDir("/FONT")) return 0;
pX=Col * Page.ColWidth + Page.XOffset;
pY=Row * Page.RowHeight + Page.YOffset;
while( (*str!=0 || buflen<MaxBufLen) && (Cnt<buflen) )
{
if (*str > 0xA0)
{
///====================================
/// 顯示漢字、字符等全角字符
///====================================
CnASCII_H=*str;
str++;
Cnt++;
if (*str>0xA0)
{
if (!isTransparent)
{
SetWindowRange(0,0,TFTScreenWidth,TFTScreenHeight);
SetWindowRange(pX,pY,Page.ColWidth,Page.RowHeight);
ClrTFT( Font.BColor.H, Font.BColor.L, (Page.ColWidth * Page.RowHeight) );
}
CnASCII_L=*str;
ShowOneHZ(pX,pY,CnASCII_H,CnASCII_L,isTransparent);
str++;
Cnt++;
pX+=Page.ColWidth;
if ( pX > (TFTScreenWidth - Font.Width) )
{
pX = Page.XOffset;
pY += Page.RowHeight;
}
}
}
else
{
///====================================
/// 顯示數字、字母、符號等半角字符
///====================================
if (!isTransparent)
{
SetWindowRange(0,0,TFTScreenWidth,TFTScreenHeight);
SetWindowRange(pX,pY,(Page.ColWidth+1)/2,Page.RowHeight);
ClrTFT( Font.BColor.H, Font.BColor.L, ((Page.ColWidth+1)/2*Page.RowHeight) );
}
SetWindowRange(pX,pY,8,16);
tftWriteCmd(0x22);
for (i=0;i<16;i++)
{
CnASCII_L=CharDot[((*str)-0x20)*16 + i];
for(j=0;j<8;j++)
{
if ( ( CnASCII_L & (0x80>>j) ) != 0 )
{
tftWriteData16(Font.FColor.H,Font.FColor.L);
}
else
{
if(!isTransparent)
{
tftWriteData16(Font.BColor.H,Font.BColor.L);
}
else
{;}
}
}
}
str++;
Cnt++;
pX+= (Page.ColWidth+1) / 2;
if ( pX > (TFTScreenWidth - (Font.Width+1)/2) )
{
pX = Page.XOffset;
pY += Page.RowHeight;
}
}
}
CloseFile();
isHZKOpened=False;
return Cnt;
}
/**********************************************************************
* 函數 Font_Test --- 測試漢字
* 輸入參數 無
* 輸出參數 無
* 返回值 無
**********************************************************************/
void
Font_Test(void)
{
BufCopy_8(Font.Name,"HZK16",6);
Font.Width=16;
Font.Height=16;
Font.FColor.H=0xf8;
Font.FColor.L=0x00;
Font.BColor.H=0x00;
Font.BColor.L=0x00;
Page.XOffset=4;
Page.YOffset=1;
Page.RowHeight=17;
Page.ColWidth=16;
tftShowStr(0,2,
"我是一只小小小小(So small)鳥,想要飛呀飛卻飛也飛不高,我尋尋覓覓尋尋覓覓一個溫暖的懷抱,這樣的要求算不算太高",
MaxBufLen,
False);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -