Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: graphic.c
- Revision:
- 0:2052f61477b1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphic.c Wed Jul 06 12:06:40 2011 +0000 @@ -0,0 +1,108 @@ +// Wy�wietlacz graficzny ze sterownikiem S6B0724 +// sterowanie w jezyku C od podstaw +// Plik : graphic.c +// Autor : Rados�aw Kwiecie� + +#include "SPLC501C.h" + +void GLCD_Rectangle(unsigned char x, unsigned char y, unsigned char b, unsigned char a , char color) { + unsigned char j; // zmienna pomocnicza + // rysowanie linii pionowych (boki) + for (j = 0; j < a; j++) { + GLCD_SetPixel(x, y + j, color); + GLCD_SetPixel(x + b - 1, y + j, color); + } + // rysowanie linii poziomych (podstawy) + for (j = 0; j < b; j++) { + GLCD_SetPixel(x + j, y, color); + GLCD_SetPixel(x + j, y + a - 1, color); + } +} + + +void GLCD_Circle(unsigned char cx, unsigned char cy ,unsigned char radius , char color) { + int x, y, xchange, ychange, radiusError; + x = radius; + y = 0; + xchange = 1 - 2 * radius; + ychange = 1; + radiusError = 0; + while (x >= y) { + GLCD_SetPixel(cx+x, cy+y, color); + GLCD_SetPixel(cx-x, cy+y, color); + GLCD_SetPixel(cx-x, cy-y, color); + GLCD_SetPixel(cx+x, cy-y, color); + GLCD_SetPixel(cx+y, cy+x, color); + GLCD_SetPixel(cx-y, cy+x, color); + GLCD_SetPixel(cx-y, cy-x, color); + GLCD_SetPixel(cx+y, cy-x, color); + y++; + radiusError += ychange; + ychange += 2; + if ( 2*radiusError + xchange > 0 ) { + x--; + radiusError += xchange; + xchange += 2; + } + } +} + + +void GLCD_Line(int X1, int Y1,int X2,int Y2 , char color) { + 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); // 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);// 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); + } while (CurrentY != Y2); + } + } +}