⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 font.c

📁 SD卡调试所用的资料
💻 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 + -