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

📄 fgdc.c

📁 这是一个潜入式开发的c语言代码
💻 C
字号:
#include "fgdc.h"

/*Display Context-----------------------*/
UINT16  BackColor = 0, FrontColor = 3;
UINT16  DotBtwn = 4;
UINT16  kx=1, ky=1;
FFONT *pFontCur;
/*-------------------------------------*/

/*ASCII to GB Code*/
BYTE  AscIdx[]="!″#$%&'()×+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[、]↑_`abcdefghijklmnopqrstuvwxyz{|}~";
BYTE  Asc1 = '!';

/*Inner Use Function */
VOID Asc2Cchar ( BYTE *p, CCHAR *pcch );


/*Implement -------------------------------*/
VOID GdcInit ( void )
{
    FontInit();

}
VOID GdcSelectFont ( UINT32 aFontID )
{
    pFontCur = FontSelect ( aFontID );
}
VOID GdcEnlarge ( REGINT aKx, REGINT aKy )
{
     kx = aKx;
	 ky = aKy;
}

VOID GdcRectangle ( REGINT x1, REGINT y1, REGINT x2, REGINT y2, REGINT color )
{
    REGINT  i;
    for ( i= x1; i< x2; i++ )  GraphPutPixel (i, y1, color );
	for ( i= x1; i< x2; i++ )  GraphPutPixel (i, y2, color );
	for ( i= y1; i< y2; i++ )  GraphPutPixel (x1, i, color );
	for ( i= y1; i< y2; i++ )  GraphPutPixel (x2, i, color );
}

VOID GdcClearBlock( REGINT x1, REGINT y1, REGINT x2, REGINT y2 ) 
{
   REGINT i,j;
   for ( i= y1; i< y2; i++ )
	   for ( j= x1; j< x2; j++ )  
		   GraphPutPixel (j, i, BackColor );

}

VOID  GdcDrawMatrix (BYTE *mat, int matsize, int x, int y, int color)
/*                   依次:字模指针、  点阵大小、  起始坐标(x,y)、颜色*/
{
	int i,j,k,n;
    n = ( matsize - 1 ) / 8 + 1;
    for(j=0; j<matsize; j++)
        for(i=0; i<n; i++)
           for(k=0; k<8; k++)
               if(mat[j*n+i]&(0x80>>k))  /*测试为1的位则显示*/
                   GdcDrawDot(x+(i*8+k)*kx,y+j*ky,color);
		       else
			       GdcDrawDot(x+(i*8+k)*kx,y+j*ky,BackColor);
}
VOID GdcDrawDot ( REGINT x, REGINT y, REGINT aColor )
{
   REGINT i,j;
   for ( i=0; i < ky; i++ )
	   for ( j=0; j< kx; j++ )
		   GraphPutPixel(x+j,y+i,aColor);
}

VOID  GdcDrawText (int ax, int ay, int color,  const BYTE *pStr )
{
   BYTE *p;
   BYTE *pMatrix;
   CCHAR  cch;
   int x,y; 
   p =(BYTE*) pStr;

   x = ax;
   y = ay;
   while ( *p != '\0' )
   {
	  if ( *p < ' ' )
	  {
		  p++;
	  }
      else if ( *p == ' ' )
	  {
	      GdcClearBlock( x, y, 
			             x+(pFontCur->MatSize*kx), 
						 y+(pFontCur->MatSize*ky) 
					   );
		  p++;
		  x += (pFontCur->MatSize*kx + DotBtwn);
	  }
	  else 
	  {   
		  if  ( *p < 160 )
		  {
	      Asc2Cchar ( p, &cch );
			  p++;
		  }
    	  else 
		  {
		      cch.b[0] = *p++;
		      cch.b[1] = *p++;
		  }
	      pMatrix = FontGetMatrix (pFontCur, &cch);
		  GdcDrawMatrix ( pMatrix, pFontCur->MatSize, x, y, FrontColor );
	      x += (pFontCur->MatSize*kx + DotBtwn);
	  }
    
	 
	  
   }

}

VOID Asc2Cchar ( BYTE *p, CCHAR *pcch )
{
   BYTE * pa;

   pa = AscIdx + ( *p - Asc1 ) * 2;

   pcch->b[0] = *pa++;
   pcch->b[1] = *pa;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -