void TFT_DrawCircle( u16 CoordiX, u16 CoordiY, u16 Radius, u32 Color ) { int a,b; int di; a=0; b=Radius; di=3-(Radius<<1); while(a<=b) { TFT_DrawPoint(CoordiX-b, CoordiY-a, Color); //3 TFT_DrawPoint(CoordiX+b, CoordiY-a, Color); //0 TFT_DrawPoint(CoordiX-a, CoordiY+b, Color); //1 TFT_DrawPoint(CoordiX-b, CoordiY-a, Color); //7 TFT_DrawPoint(CoordiX-a, CoordiY-b, Color); //2 TFT_DrawPoint(CoordiX+b, CoordiY+a, Color); //4 TFT_DrawPoint(CoordiX+a, CoordiY-b, Color); //5 TFT_DrawPoint(CoordiX+a, CoordiY+b, Color); //6 TFT_DrawPoint(CoordiX-b, CoordiY+a, Color); a++; // ??Bresenham???? if(di<0) di += 4*a+6; else { di+=10+4*(a-b); b--; } TFT_DrawPoint(CoordiX+a, CoordiY+b, Color); } }
/*=====================================================================================================*/ void WaveFormPrint( WaveForm_Struct* WaveForm ) { u16 i, j; s16 TempY[WaveChannelMax] = {0}; s16 CoordiY[WaveChannelMax] = {0}; static u16 WavePic[WaveChannelMax][WaveFormW] = {0}; /* 更新顯示座標 */ for(i=0; i<WaveForm->Channel; i++) { for(j=0; j<WaveFormW-1; j++) WavePic[i][j] = WavePic[i][j+1]; TempY[i] = (s16)((double)WaveForm->Data[i]/WaveForm->Scale[i]+0.5); CoordiY[i] = WaveFormL - TempY[i]; if(CoordiY[i]<0) WavePic[i][WaveFormW-1] = 0; else if(CoordiY[i]>WaveForm2L) WavePic[i][WaveFormW-1] = WaveForm2L; else WavePic[i][WaveFormW-1] = CoordiY[i]; } /* 畫邊框 */ TFT_DrawLineX(0, 0, WaveFormW, WaveForm->WindowColor ); TFT_DrawLineX(0, WaveForm2L, WaveFormW, WaveForm->WindowColor ); TFT_DrawLineY(0, 0, WaveForm2L, WaveForm->WindowColor ); TFT_DrawLineY(WaveFormW, 0, WaveForm2L, WaveForm->WindowColor ); /* 顯示 */ for(i=0; i<WaveFormW-1; i++) { /* 清除上筆數據 */ for(j=0; j<WaveForm->Channel; j++) { if(WavePic[j][i] == 0) TFT_DrawPoint(WaveWindowX+i+1, WaveWindowY+WavePic[j][i], WaveForm->WindowColor); else if(WavePic[j][i] == WaveForm2L) TFT_DrawPoint(WaveWindowX+i+1, WaveWindowY+WavePic[j][i], WaveForm->WindowColor); else TFT_DrawPoint(WaveWindowX+i+1, WaveWindowY+WavePic[j][i], WaveForm->BackColor); } /* 畫輔助線 */ if((i%10) < 3) { for(j=0; j<=WaveFormL; j+=(WaveFormL/10)) { TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WaveFormL+j, WaveForm->WindowColor); TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WaveFormL-j, WaveForm->WindowColor); } } /* 畫中線 */ TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WaveFormL, WaveForm->WindowColor); /* 更新顯示新數據 */ for(j=0; j<WaveForm->Channel; j++) { if(WavePic[j][i] == 0) TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WavePic[j][i], WaveForm->WindowColor); else if(WavePic[j][i] == WaveForm2L) TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WavePic[j][i], WaveForm->WindowColor); else TFT_DrawPoint(WaveWindowX+i, WaveWindowY+WavePic[j][i], WaveForm->PointColor[j]); } } }
void TFT_DrawRectangle( u16 CoordiX, u16 CoordiY, u16 Length, u16 Width, u32 Color ) { u16 i; for(i=0; i<=Length; i++) { TFT_DrawPoint(CoordiX+i, CoordiY, Color); TFT_DrawPoint(CoordiX+i, CoordiY+Width, Color); } for(i=1; i<Width; i++) { TFT_DrawPoint(CoordiX, CoordiY+i, Color); TFT_DrawPoint(CoordiX+Length, CoordiY+i, Color); } }
void TFT_PutChar1206( u16 CoordiX, u16 CoordiY, u8* ChWord, u32 FontColor, u32 BackColor ) { u8 Tmp_Char = 0; u16 i = 0, j = 0; for(i=0; i<12; i++) { Tmp_Char = ASCII_12x6[*ChWord-32][i]; for(j=0; j<6; j++) { if((Tmp_Char>>j) & 0x01 == 0x01) TFT_DrawPoint(CoordiX+j, CoordiY+i, FontColor); // ???? else TFT_DrawPoint(CoordiX+j, CoordiY+i, BackColor); // ???? } }
void TFT_Draw9Point( u16 CoordiX, u16 CoordiY, u32 Color ) { TFT_DrawPoint(CoordiX,CoordiY,Color); TFT_DrawPoint(CoordiX,CoordiY-1,Color); TFT_DrawPoint(CoordiX,CoordiY+1,Color); TFT_DrawPoint(CoordiX-1,CoordiY,Color); TFT_DrawPoint(CoordiX+1,CoordiY,Color); TFT_DrawPoint(CoordiX-1,CoordiY-1,Color); TFT_DrawPoint(CoordiX-1,CoordiY+1,Color); TFT_DrawPoint(CoordiX+1,CoordiY-1,Color); TFT_DrawPoint(CoordiX+1,CoordiY+1,Color); }
void TFT_DrawLineY( u16 CoordiX, u16 CoordiY, u16 Length, u32 Color ) { u16 i; for(i=0; i<Length; i++) TFT_DrawPoint(CoordiX, CoordiY+i, Color); }
void TFT_DrawRectangleFull( u16 CoordiX, u16 CoordiY, u16 Length, u16 Width, u32 Color ) { u16 i, j; for(i=0; i<Width; i++) for(j=0; j<Length; j++) TFT_DrawPoint(CoordiX+j, CoordiY+i, Color); }
//画线 //x1,y1:起点坐标 //x2,y2:终点坐标 void TFT_DrawLine(u8 x1, u16 y1, u8 x2, u16 y2) { u16 x, y, t; if((x1==x2)&&(y1==y2))TFT_DrawPoint(x1, y1); else if(myabs(y2-y1)>myabs(x2-x1))//斜率大于1 { if(y1>y2) { t=y1; y1=y2; y2=t; t=x1; x1=x2; x2=t; } for(y=y1;y<y2;y++)//以y轴为基准 { x=(u32)(y-y1)*(x2-x1)/(y2-y1)+x1; TFT_DrawPoint(x, y); } } else //斜率小于等于1 { if(x1>x2) { t=y1; y1=y2; y2=t; t=x1; x1=x2; x2=t; } for(x=x1;x<x2;x++)//以x轴为基准 { y =(u32)(x-x1)*(y2-y1)/(x2-x1)+y1; TFT_DrawPoint(x,y); } } }
void TFT_DrawLine( u16 StartX, u16 StartY, u16 EndX, u16 EndY, u32 Color ) { u16 i; s16 DeltaX, DeltaY; double Slope; DeltaX = EndX - StartX; DeltaY = EndY - StartY; // ?? Slope if(DeltaX == 0) Slope = 0; else Slope = (double)DeltaY/(double)DeltaX; if(DeltaX<0)DeltaX=-DeltaX; if(DeltaY<0)DeltaY=-DeltaY; if(EndX<StartX) { if(Slope<0) { if(DeltaX>DeltaY) { for(i=0; i<=DeltaX; i++) TFT_DrawPoint(EndX+i, EndY+(s16)(((double)i*Slope)-0.5), Color); } else { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(EndX-(s16)(((double)i/Slope)-0.5), EndY-i, Color); } } else { if(DeltaX>DeltaY) { for(i=0; i<=DeltaX; i++) TFT_DrawPoint(EndX+i, EndY+(s16)(((double)i*Slope)+0.5), Color); } else { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(EndX+(s16)(((double)i/Slope)+0.5), EndY+i, Color); } } } else if(EndX==StartX) { if(EndY>StartY) { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(StartX, StartY+i, Color); } else { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(EndX, EndY+i, Color); } } else { if(Slope<0) { if(DeltaX>DeltaY) { for(i=0; i<=DeltaX; i++) TFT_DrawPoint(StartX+i, StartY+(s16)(((double)i*Slope)-0.5), Color); } else { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(StartX-(s16)(((double)i/Slope)-0.5), StartY-i, Color); } } else { if(DeltaX>DeltaY) { for(i=0; i<=DeltaX; i++) TFT_DrawPoint(StartX+i, StartY+(s16)(((double)i*Slope)+0.5), Color); } else { for(i=0; i<=DeltaY; i++) TFT_DrawPoint(StartX+(s16)(((double)i/Slope)+0.5), StartY+i, Color); } } } }