// Purpose: Draw a circle on a graphic LCD // Inputs: (x,y) - the center of the circle // radius - the radius of the circle // fill - YES or NO // color - ON or OFF void glcd_circle(int x, int y, int radius, int1 fill, int1 color) { signed int a, b, P; a = 0; b = radius; P = 1 - radius; do { if(fill) { glcd_line(x-a, y+b, x+a, y+b, color); glcd_line(x-a, y-b, x+a, y-b, color); glcd_line(x-b, y+a, x+b, y+a, color); glcd_line(x-b, y-a, x+b, y-a, color); } else { glcd_pixel(a+x, b+y, color); glcd_pixel(b+x, a+y, color); glcd_pixel(x-a, b+y, color); glcd_pixel(x-b, a+y, color); glcd_pixel(b+x, y-a, color); glcd_pixel(a+x, y-b, color); glcd_pixel(x-a, y-b, color); glcd_pixel(x-b, y-a, color); } if(P < 0) P+= 3 + 2*a++; else P+= 5 + 2*(a++ - b--); } while(a <= b); }
// Purpose: Draw a rectangle on a graphic LCD // Inputs: (x1, y1) - the start coordinate // (x2, y2) - the end coordinate // fill - YES or NO // color - ON or OFF // Dependencies: glcd_pixel(), glcd_line() void glcd_rect(int x1, int y1, int x2, int y2, int fill, int1 color) { if(fill) { int y, ymax; // Find the y min and max if(y1 < y2) { y = y1; ymax = y2; } else { y = y2; ymax = y1; } for(; y<=ymax; ++y) // Draw lines to fill the rectangle glcd_line(x1, y, x2, y, color); } else { glcd_line(x1, y1, x2, y1, color); // Draw the 4 sides glcd_line(x1, y2, x2, y2, color); glcd_line(x1, y1, x1, y2, color); glcd_line(x2, y1, x2, y2, color); } }
void glcd_arc(int x, int y, int r, int startAngle, int endAngle, int thickness, unsigned int color) { int rDelta = -(thickness/2); int px, py, cx, cy; startAngle -= 90; endAngle -= 90; if (startAngle!=endAngle) { for (int i=0; i<thickness; i++) { px = x + cos((startAngle*3.14)/180) * (r+rDelta+i); py = y + sin((startAngle*3.14)/180) * (r+rDelta+i); for (int d=startAngle+1; d<endAngle+1; d++) { cx = x + cos((d*3.14)/180) * (r+rDelta+i); cy = y + sin((d*3.14)/180) * (r+rDelta+i); glcd_line(px, py, cx, cy, color); px = cx; py = cy; } } } else { px = x + cos((startAngle*3.14)/180) * (r+rDelta); py = y + sin((startAngle*3.14)/180) * (r+rDelta); cx = x + cos((startAngle*3.14)/180) * (r-rDelta); cy = y + sin((startAngle*3.14)/180) * (r-rDelta); glcd_line(px, py, cx, cy, color); } }
/************************************************************************ * * * Purpose: Draw the arrow indicating the existence of a submenu * * * * Proposito: Dibuja la flecha que indica que hay un submenu * * * * Passed: int8 tb - Y position of the arrow * * int8 color - Color of the arrow. * * Argumento: int8 tb - Posicion en Y de la flecha * * int8 color - Color de la flecha. * * Returned: None * * Retorno: Nada * * Note: * * * * * ************************************************************************/ void menu_entrar(int8 tb, int8 color) { glcd_line(124,tb,124,tb+7,color); glcd_line(125,tb+1,125,tb+6,color); glcd_line(126,tb+2,126,tb+5,color); glcd_line(127,tb+3,127,tb+4,color); }
void glcd_rect(int8 x1, int8 y1, int8 x2, int8 y2, int1 fill, int1 color) #endif { if(fill) { #ifdef LARGE_LCD int16 i, xmin, xmax, ymin, ymax; #else int8 i, xmin, xmax, ymin, ymax; #endif if(x1 < x2) // Find x min and max { xmin = x1; xmax = x2; } else { xmin = x2; xmax = x1; } if(y1 < y2) // Find the y min and max { ymin = y1; ymax = y2; } else { ymin = y2; ymax = y1; } for(; xmin <= xmax; ++xmin) { for(i=ymin; i<=ymax; ++i) { glcd_pixel(xmin, i, color); } } } else { glcd_line(x1, y1, x2, y1, color); // Draw the 4 sides glcd_line(x1, y2, x2, y2, color); glcd_line(x1, y1, x1, y2, color); glcd_line(x2, y1, x2, y2, color); } }
void glcd_circle(int8 x, int8 y, int8 radius, int1 fill, int1 color) #endif { #ifdef LARGE_LCD signed int16 a, b, P; #else signed int8 a, b, P; #endif a = 0; b = radius; P = 1 - radius; do { if(fill) { glcd_line(x-a, y+b, x+a, y+b, color); glcd_line(x-a, y-b, x+a, y-b, color); glcd_line(x-b, y+a, x+b, y+a, color); glcd_line(x-b, y-a, x+b, y-a, color); } else { glcd_pixel(a+x, b+y, color); glcd_pixel(b+x, a+y, color); glcd_pixel(x-a, b+y, color); glcd_pixel(x-b, a+y, color); glcd_pixel(b+x, y-a, color); glcd_pixel(a+x, y-b, color); glcd_pixel(x-a, y-b, color); glcd_pixel(x-b, y-a, color); } if(P < 0) P += 3 + 2 * a++; else P += 5 + 2 * (a++ - b--); } while(a <= b); }