void GLCD_SetPixel(int x1,int y1,BOOL _b)
{
BYTE byteCS = 0;
BYTE byteData;
if(x1>=128 || y1>=64)
return;
if(x1<64 )
{
byteCS = 0x01;
}
else
{
x1 = x1%64;
byteCS = 0x02;
}
GLCD_Command(byteCS,0x40 + x1); // x 좌표지정
GLCD_Command(0x00,0xB8 + y1/8); // y 좌표지정
GLCD_ReadData(byteCS); //read 하면처음에이상한값이나온다;; 그냥버림
byteData = GLCD_ReadData(byteCS);
if(_b==1)
byteData |= 1<<(y1%8);
else
byteData &= ~(1<<(y1%8));
GLCD_Command(byteCS,0x40 + x1); // x 좌표지정
GLCD_Command(0x00,0xB8 + y1/8); // y 좌표지정
GLCD_WriteData(byteCS, byteData,0);
}
void GLCD_DOT_Line(int x1,int y1,int x2,int y2)
{
int i;
int y=y1;
for(i=x1;i<=x2;i++)
{
if(y1 <y2)
y = y1+(i-x1)*(y2-y1)/(x2-x1);
else
y = y1-(i-x1)*(y1-y2)/(x2-x1);
GLCD_SetPixel(i,y,1);
}
}
void GLCD_DOT_DrawCircle(int x1,int y1,int _size)
{
int i;
int j;
int y=0;
int Lasty=0;// dot 간의간격이클경우임의의선을그려준다.
for(i=x1-_size;i<=x1+_size;i++)
{
y= round(sqrt((_size*_size )-(i-x1)*(i-x1)));
GLCD_SetPixel(i,y1+y,1);
GLCD_SetPixel(i,y1-y,1);
if(Lasty !=0)
{
// 좌측처리
if(Lasty +1< y1+y)
{
// dot 사이의간격이너무벌어진것이다.
for(j=1;j<(y1+y)-Lasty;j++)
{
GLCD_SetPixel(i-1,y1-y+j,1); // 좌측상단
GLCD_SetPixel(i-1,y1+y-j,1);// 좌측하단에끊어진부분
//sprintf(g_temp,"\r\nLasty:%dm j:%d",Lasty,j);
//PutString0(g_temp);
}
}
// 우측처리
else if(Lasty -1 > y1+y)
{
// dot 사이의간격이너무벌어진것이다.
for(j=1;j<Lasty - (y1+y);j++)
{
sprintf(g_temp,"\r\nLasty:%dm i:%d, j:%d, y1+y-j:%d",Lasty,i,j,y1+y-j);
PutString0(g_temp);
GLCD_SetPixel(i,y1-y-j,1);// 우측상단
GLCD_SetPixel(i,y1+y+j,1);// 우측하단에끊어진부분
}
}
}
Lasty = y1+y;
}
}
void GLCD_DrawRect(int x1,int y1,int x2,int y2)
{
int i=0;
for(i=x1;i<=x2;i++)
{
GLCD_SetPixel(i,y1,1);
GLCD_SetPixel(i,y2,1);
}
for(i=y1+1;i<=y2-1;i++)
{
GLCD_SetPixel(x1,i,1);
GLCD_SetPixel(x2,i,1);
}
} |