SD卡调试所用的资料

源代码在线查看: font.c

软件大小: 7131 K
上传用户: peter-1-1
关键词: SD卡 调试
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				
				//**********************************************************************************************
				//* 文 件 名 : 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				        {            
				            for (j=0;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				    {
				        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				            {
				                CnASCII_L=CharDot[((*str)-0x20)*16 + i];
				                for(j=0;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);
				}
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
							

相关资源