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

📄 graphics.c

📁 aiji-s3c44b0在iar下的源码
💻 C
字号:
/*
 * $Revision: 1.1 $
 */

#include "lcdlib.h"
#include "graphics.h"


void PutPixel(int x, int y, int c)
{
  // LCD controller uses big endian.
  int xbase = x & ~3;
  int xbyte = ~x & 3;
  int x1 = xbase + xbyte;
  
  if (x<SCR_XSIZE && y<SCR_YSIZE)
    frameBuffer256[y][x1] = c;
}


void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color)
{
  int i;

  for(i=y1;i<=y2;i++)
    Glib_Line(x1,i,x2,i,color);
}


// LCD display is flipped vertically
// But, think the algorithm by mathematics point.
//	 3I2
//	4 I 1
//      --+--   <-8 octants  mathematical cordinate
//      5 I 8
//	 6I7
void Glib_Line(int x1,int y1,int x2,int y2,int color)
{
  int dx,dy,e;
  
  dx=x2-x1; 
  dy=y2-y1;

  if(dx>=0)
  {
    if(dy >= 0) // dy>=0
      {
        if(dx>=dy) // 1/8 octant
        {
          e=dy-dx/2;
          while(x1<=x2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              y1+=1;
              e-=dx;
            }
            x1+=1;
            e+=dy;
          }
        }
        else		// 2/8 octant
        {
          e=dx-dy/2;
          while(y1<=y2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              x1+=1;
              e-=dy;
            }
            y1+=1;
            e+=dx;
          }
        }
      }
      else		   // dy<0
      {
        dy=-dy;   // dy=abs(dy)

        if(dx>=dy) // 8/8 octant
        {
          e=dy-dx/2;
          while(x1<=x2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
              y1-=1;
              e-=dx;
            x1+=1;
            e+=dy;
          }
        }
        else		// 7/8 octant
        {
          e=dx-dy/2;
          while(y1>=y2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              x1+=1;
              e-=dy;
            }
            y1-=1;
            e+=dx;
          }
        }
      }
    }
    else //dx<0
    {
      dx=-dx;		//dx=abs(dx)
      if(dy >= 0) // dy>=0
      {
        if(dx>=dy) // 4/8 octant
        {
          e=dy-dx/2;
          while(x1>=x2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              y1+=1;
              e-=dx;
            }
            x1-=1;
            e+=dy;
          }
        }
        else		// 3/8 octant
        {
          e=dx-dy/2;
          while(y1<=y2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              x1-=1;
              e-=dy;
            }
            y1+=1;
            e+=dx;
          }
        }
      }
      else		   // dy<0
      {
        dy=-dy;   // dy=abs(dy)

        if(dx>=dy) // 5/8 octant
        {
          e=dy-dx/2;
          while(x1>=x2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              y1-=1;
              e-=dx;
            }
            x1-=1;
            e+=dy;
          }
        }
        else		// 6/8 octant
        {
          e=dx-dy/2;
          while(y1>=y2)
          {
            PutPixel(x1,y1,color);
            if(e>0)
            {
              x1-=1;
              e-=dy;
            }	
            y1-=1;
            e+=dx;
          }
        }
      }	
    }
}
	

void Glib_ClearScr(int c)
{
  int i;
  unsigned int mask;
  unsigned int* p;
  
  p = (unsigned int *)frameBuffer256;

  mask = (c << 24) | (c << 16) | (c << 8) | c;
  
  for (i = 0; i < SCR_XSIZE * SCR_YSIZE / 4; i++)
      *p++ = mask;
}

⌨️ 快捷键说明

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