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.
graphic.c
00001 // Wy�wietlacz graficzny ze sterownikiem S6B0724 00002 // sterowanie w jezyku C od podstaw 00003 // Plik : graphic.c 00004 // Autor : Rados�aw Kwiecie� 00005 00006 #include "SPLC501C.h" 00007 00008 void GLCD_Rectangle(unsigned char x, unsigned char y, unsigned char b, unsigned char a , char color) { 00009 unsigned char j; // zmienna pomocnicza 00010 // rysowanie linii pionowych (boki) 00011 for (j = 0; j < a; j++) { 00012 GLCD_SetPixel(x, y + j, color); 00013 GLCD_SetPixel(x + b - 1, y + j, color); 00014 } 00015 // rysowanie linii poziomych (podstawy) 00016 for (j = 0; j < b; j++) { 00017 GLCD_SetPixel(x + j, y, color); 00018 GLCD_SetPixel(x + j, y + a - 1, color); 00019 } 00020 } 00021 00022 00023 void GLCD_Circle(unsigned char cx, unsigned char cy ,unsigned char radius , char color) { 00024 int x, y, xchange, ychange, radiusError; 00025 x = radius; 00026 y = 0; 00027 xchange = 1 - 2 * radius; 00028 ychange = 1; 00029 radiusError = 0; 00030 while (x >= y) { 00031 GLCD_SetPixel(cx+x, cy+y, color); 00032 GLCD_SetPixel(cx-x, cy+y, color); 00033 GLCD_SetPixel(cx-x, cy-y, color); 00034 GLCD_SetPixel(cx+x, cy-y, color); 00035 GLCD_SetPixel(cx+y, cy+x, color); 00036 GLCD_SetPixel(cx-y, cy+x, color); 00037 GLCD_SetPixel(cx-y, cy-x, color); 00038 GLCD_SetPixel(cx+y, cy-x, color); 00039 y++; 00040 radiusError += ychange; 00041 ychange += 2; 00042 if ( 2*radiusError + xchange > 0 ) { 00043 x--; 00044 radiusError += xchange; 00045 xchange += 2; 00046 } 00047 } 00048 } 00049 00050 00051 void GLCD_Line(int X1, int Y1,int X2,int Y2 , char color) { 00052 int CurrentX, CurrentY, Xinc, Yinc, 00053 Dx, Dy, TwoDx, TwoDy, 00054 TwoDxAccumulatedError, TwoDyAccumulatedError; 00055 00056 Dx = (X2-X1); // obliczenie sk�adowej poziomej 00057 Dy = (Y2-Y1); // obliczenie sk�adowej pionowej 00058 00059 TwoDx = Dx + Dx; // podwojona sk�adowa pozioma 00060 TwoDy = Dy + Dy; // podwojona sk�adowa pionowa 00061 00062 CurrentX = X1; // zaczynamy od X1 00063 CurrentY = Y1; // oraz Y1 00064 00065 Xinc = 1; // ustalamy krok zwi�kszania pozycji w poziomie 00066 Yinc = 1; // ustalamy krok zwi�kszania pozycji w pionie 00067 00068 if (Dx < 0) { // jesli sk�adowa pozioma jest ujemna 00069 Xinc = -1; // to b�dziemy si� "cofa�" (krok ujemny) 00070 Dx = -Dx; // zmieniamy znak sk�adowej na dodatni 00071 TwoDx = -TwoDx; // jak r�wnie� podwojonej sk�adowej 00072 } 00073 00074 if (Dy < 0) { // je�li sk�adowa pionowa jest ujemna 00075 Yinc = -1; // to b�dziemy si� "cofa�" (krok ujemny) 00076 Dy = -Dy; // zmieniamy znak sk�adowej na dodatki 00077 TwoDy = -TwoDy; // jak r�wniez podwojonej sk�adowej 00078 } 00079 00080 GLCD_SetPixel(X1,Y1, color); // stawiamy pierwszy krok (zapalamy pierwszy piksel) 00081 00082 if ((Dx != 0) || (Dy != 0)) { // sprawdzamy czy linia sk�ada si� z wi�cej ni� jednego punktu ;) 00083 // sprawdzamy czy sk�adowa pionowa jest mniejsza lub r�wna sk�adowej poziomej 00084 if (Dy <= Dx) { // je�li tak, to idziemy "po iksach" 00085 TwoDxAccumulatedError = 0; // zerujemy zmienn� 00086 do { // ruszamy w drog� 00087 CurrentX += Xinc; // do aktualnej pozycji dodajemy krok 00088 TwoDxAccumulatedError += TwoDy; // a tu dodajemy podwojon� sk�adow� pionow� 00089 if (TwoDxAccumulatedError > Dx) { // je�li TwoDxAccumulatedError jest wi�kszy od Dx 00090 CurrentY += Yinc; // zwi�kszamy aktualn� pozycj� w pionie 00091 TwoDxAccumulatedError -= TwoDx; // i odejmujemy TwoDx 00092 } 00093 GLCD_SetPixel(CurrentX,CurrentY, color);// stawiamy nast�pny krok (zapalamy piksel) 00094 } while (CurrentX != X2); // idziemy tak d�ugo, a� osi�gniemy punkt docelowy 00095 } else { // w przeciwnym razie idziemy "po igrekach" 00096 TwoDyAccumulatedError = 0; 00097 do { 00098 CurrentY += Yinc; 00099 TwoDyAccumulatedError += TwoDx; 00100 if (TwoDyAccumulatedError>Dy) { 00101 CurrentX += Xinc; 00102 TwoDyAccumulatedError -= TwoDy; 00103 } 00104 GLCD_SetPixel(CurrentX,CurrentY, color); 00105 } while (CurrentY != Y2); 00106 } 00107 } 00108 }
Generated on Wed Jul 27 2022 06:12:51 by
1.7.2