Hallo
Also die Adressen für die Layer passen.
Es wird auch schon was angezeigt fonts und grafik.
Das was nicht geht sind linien und Kreise.
Die lib verwende ich auch 1:1 mit einen SED 1335 dort gehts.
void GLCD_Line(int X1, int Y1,int X2,int Y2,int layer)
{
int CurrentX, CurrentY, Xinc, Yinc,
Dx, Dy, TwoDx, TwoDy,
TwoDxAccumulatedError, TwoDyAccumulatedError;
Dx = (X2-X1); // obliczenie sk³adowej poziomej
Dy = (Y2-Y1); // obliczenie sk³adowej pionowej
TwoDx = Dx + Dx; // podwojona sk³adowa pozioma
TwoDy = Dy + Dy; // podwojona sk³adowa pionowa
CurrentX = X1; // zaczynamy od X1
CurrentY = Y1; // oraz Y1
Xinc = 1; // ustalamy krok zwiêkszania pozycji w poziomie
Yinc = 1; // ustalamy krok zwiêkszania pozycji w pionie
if(Dx < 0) // jesli sk³adowa pozioma jest ujemna
{
Xinc = -1; // to bêdziemy siê "cofaæ" (krok ujemny)
Dx = -Dx; // zmieniamy znak sk³adowej na dodatni
TwoDx = -TwoDx; // jak równie¿ podwojonej sk³adowej
}
if (Dy < 0) // jeœli sk³adowa pionowa jest ujemna
{
Yinc = -1; // to bêdziemy siê "cofaæ" (krok ujemny)
Dy = -Dy; // zmieniamy znak sk³adowej na dodatki
TwoDy = -TwoDy; // jak równiez podwojonej sk³adowej
}
GLCD_SetPixel(X1,Y1, color,layer); // stawiamy pierwszy krok (zapalamy
pierwszy piksel)
if ((Dx != 0) || (Dy != 0)) // sprawdzamy czy linia sk³ada siê z wiêcej
ni¿ jednego punktu ;)
{
// sprawdzamy czy sk³adowa pionowa jest mniejsza lub równa sk³adowej
poziomej
if (Dy <= Dx) // jeœli tak, to idziemy "po iksach"
{
TwoDxAccumulatedError = 0; // zerujemy zmienn¹
do // ruszamy w drogê
{
CurrentX += Xinc; // do aktualnej pozycji dodajemy krok
TwoDxAccumulatedError += TwoDy; // a tu dodajemy podwojon¹
sk³adow¹ pionow¹
if(TwoDxAccumulatedError > Dx) // jeœli TwoDxAccumulatedError
jest wiêkszy od Dx
{
CurrentY += Yinc; // zwiêkszamy aktualn¹ pozycjê w pionie
TwoDxAccumulatedError -= TwoDx; // i odejmujemy TwoDx
}
GLCD_SetPixel(CurrentX,CurrentY, color,layer);// stawiamy
nastêpny krok (zapalamy piksel)
}while (CurrentX != X2); // idziemy tak d³ugo, a¿ osi¹gniemy
punkt docelowy
}
else // w przeciwnym razie idziemy "po igrekach"
{
TwoDyAccumulatedError = 0;
do
{
CurrentY += Yinc;
TwoDyAccumulatedError += TwoDx;
if(TwoDyAccumulatedError>Dy)
{
CurrentX += Xinc;
TwoDyAccumulatedError -= TwoDy;
}
GLCD_SetPixel(CurrentX,CurrentY, color,layer);
}while (CurrentY != Y2);
}
}
}
void GLCD_SetPixel(unsigned int x,unsigned int y, int color,int layer)
{
unsigned char tmp = 0;
unsigned int address;
if(layer==1)address=SED1335_GRAPHICSTART1 + (40 * y) + (x/8);
if(layer==2)address=SED1335_GRAPHICSTART2 + (40 * y) + (x/8);
if(layer==3)address=SED1335_GRAPHICSTART3 + (40 * y) + (x/8);
GLCD_SetCursorAddress(address);
GLCD_WriteCommand(SED1335_MREAD);
tmp = GLCD_ReadData();
if(color)
tmp |= (1 << (SED1335_FX - (x % 8)));
else
tmp &= ~(1 << (SED1335_FX - (x % 8)));
GLCD_SetCursorAddress(address);
GLCD_WriteCommand(SED1335_MWRITE);
GLCD_WriteData(tmp);
}
Die Linen sind gestrichelt.
Hat jemand eine Idee???
Vielen Dank
Gruß
Paul