Graphical demo for the LPC4088 Experiment Base Board with one of the Display Expansion Kits. This program displays how to write text in different fonts.

Dependencies:   EALib mbed

Committer:
embeddedartists
Date:
Thu Jun 25 10:30:15 2015 +0000
Revision:
0:5e5e9ec91fc8
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 0:5e5e9ec91fc8 1
embeddedartists 0:5e5e9ec91fc8 2 #include "mbed.h"
embeddedartists 0:5e5e9ec91fc8 3 #include "Graphics.h"
embeddedartists 0:5e5e9ec91fc8 4
embeddedartists 0:5e5e9ec91fc8 5
embeddedartists 0:5e5e9ec91fc8 6 Graphics::Graphics(uint16_t *pFrmBuf, uint16_t dispWidth, uint16_t dispHeight)
embeddedartists 0:5e5e9ec91fc8 7 {
embeddedartists 0:5e5e9ec91fc8 8 this->windowX = dispWidth;
embeddedartists 0:5e5e9ec91fc8 9 this->windowY = dispHeight;
embeddedartists 0:5e5e9ec91fc8 10 this->pFrmBuf = pFrmBuf;
embeddedartists 0:5e5e9ec91fc8 11 }
embeddedartists 0:5e5e9ec91fc8 12
embeddedartists 0:5e5e9ec91fc8 13 void Graphics::setFrameBuffer( uint16_t *pFrmBuf )
embeddedartists 0:5e5e9ec91fc8 14 {
embeddedartists 0:5e5e9ec91fc8 15 this->pFrmBuf = pFrmBuf;
embeddedartists 0:5e5e9ec91fc8 16 }
embeddedartists 0:5e5e9ec91fc8 17
embeddedartists 0:5e5e9ec91fc8 18 int32_t Graphics::abs(int32_t v1) const
embeddedartists 0:5e5e9ec91fc8 19 {
embeddedartists 0:5e5e9ec91fc8 20 if (v1 > 0)
embeddedartists 0:5e5e9ec91fc8 21 return v1;
embeddedartists 0:5e5e9ec91fc8 22
embeddedartists 0:5e5e9ec91fc8 23 return -v1;
embeddedartists 0:5e5e9ec91fc8 24 }
embeddedartists 0:5e5e9ec91fc8 25
embeddedartists 0:5e5e9ec91fc8 26 /***********************************************************************
embeddedartists 0:5e5e9ec91fc8 27 *
embeddedartists 0:5e5e9ec91fc8 28 * Function: swim_put_line_raw
embeddedartists 0:5e5e9ec91fc8 29 *
embeddedartists 0:5e5e9ec91fc8 30 * Purpose: Draw a line on the physical display
embeddedartists 0:5e5e9ec91fc8 31 *
embeddedartists 0:5e5e9ec91fc8 32 * Processing:
embeddedartists 0:5e5e9ec91fc8 33 * See function.
embeddedartists 0:5e5e9ec91fc8 34 *
embeddedartists 0:5e5e9ec91fc8 35 * Parameters:
embeddedartists 0:5e5e9ec91fc8 36 * win : Window identifier
embeddedartists 0:5e5e9ec91fc8 37 * x1 : Physical X position of X line start
embeddedartists 0:5e5e9ec91fc8 38 * y1 : Physical Y position of Y line start
embeddedartists 0:5e5e9ec91fc8 39 * x2 : Physical X position of X line end
embeddedartists 0:5e5e9ec91fc8 40 * y2 : Physical Y position of Y line end
embeddedartists 0:5e5e9ec91fc8 41 *
embeddedartists 0:5e5e9ec91fc8 42 * Outputs: None
embeddedartists 0:5e5e9ec91fc8 43 *
embeddedartists 0:5e5e9ec91fc8 44 * Returns: Nothing
embeddedartists 0:5e5e9ec91fc8 45 *
embeddedartists 0:5e5e9ec91fc8 46 * Notes: None
embeddedartists 0:5e5e9ec91fc8 47 *
embeddedartists 0:5e5e9ec91fc8 48 **********************************************************************/
embeddedartists 0:5e5e9ec91fc8 49 void Graphics::put_line(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int16_t color)
embeddedartists 0:5e5e9ec91fc8 50 {
embeddedartists 0:5e5e9ec91fc8 51 int32_t e2, sx, sy, dx, dy, err;
embeddedartists 0:5e5e9ec91fc8 52
embeddedartists 0:5e5e9ec91fc8 53 /* calculate delta_x and delta_y */
embeddedartists 0:5e5e9ec91fc8 54 dx = abs(x2 - x1);
embeddedartists 0:5e5e9ec91fc8 55 dy = abs(y2 - y1);
embeddedartists 0:5e5e9ec91fc8 56
embeddedartists 0:5e5e9ec91fc8 57 /* set the direction for the step for both x and y, and
embeddedartists 0:5e5e9ec91fc8 58 initialize the error */
embeddedartists 0:5e5e9ec91fc8 59 if (x1 < x2)
embeddedartists 0:5e5e9ec91fc8 60 sx = 1;
embeddedartists 0:5e5e9ec91fc8 61 else
embeddedartists 0:5e5e9ec91fc8 62 sx = -1;
embeddedartists 0:5e5e9ec91fc8 63
embeddedartists 0:5e5e9ec91fc8 64 if (y1 < y2)
embeddedartists 0:5e5e9ec91fc8 65 sy = 1;
embeddedartists 0:5e5e9ec91fc8 66 else
embeddedartists 0:5e5e9ec91fc8 67 sy = -1;
embeddedartists 0:5e5e9ec91fc8 68
embeddedartists 0:5e5e9ec91fc8 69 err = dx - dy;
embeddedartists 0:5e5e9ec91fc8 70
embeddedartists 0:5e5e9ec91fc8 71 while (1)
embeddedartists 0:5e5e9ec91fc8 72 {
embeddedartists 0:5e5e9ec91fc8 73 if ((x1 >= 0) && (x1 < this->windowX) &&
embeddedartists 0:5e5e9ec91fc8 74 (y1 >= 0) && (y1 < this->windowY))
embeddedartists 0:5e5e9ec91fc8 75 this->pFrmBuf[x1 + (this->windowX*y1)] = color;
embeddedartists 0:5e5e9ec91fc8 76
embeddedartists 0:5e5e9ec91fc8 77 if ((x1 == x2) && (y1 == y2))
embeddedartists 0:5e5e9ec91fc8 78 return;
embeddedartists 0:5e5e9ec91fc8 79
embeddedartists 0:5e5e9ec91fc8 80 e2 = 2 * err;
embeddedartists 0:5e5e9ec91fc8 81 if (e2 > -dy)
embeddedartists 0:5e5e9ec91fc8 82 {
embeddedartists 0:5e5e9ec91fc8 83 err -= dy;
embeddedartists 0:5e5e9ec91fc8 84 x1 += sx;
embeddedartists 0:5e5e9ec91fc8 85 }
embeddedartists 0:5e5e9ec91fc8 86 if (e2 < dx)
embeddedartists 0:5e5e9ec91fc8 87 {
embeddedartists 0:5e5e9ec91fc8 88 err += dx;
embeddedartists 0:5e5e9ec91fc8 89 y1 += sy;
embeddedartists 0:5e5e9ec91fc8 90 }
embeddedartists 0:5e5e9ec91fc8 91 }
embeddedartists 0:5e5e9ec91fc8 92 }
embeddedartists 0:5e5e9ec91fc8 93
embeddedartists 0:5e5e9ec91fc8 94 /***********************************************************************
embeddedartists 0:5e5e9ec91fc8 95 *
embeddedartists 0:5e5e9ec91fc8 96 * Function: plot4points
embeddedartists 0:5e5e9ec91fc8 97 *
embeddedartists 0:5e5e9ec91fc8 98 * Purpose:
embeddedartists 0:5e5e9ec91fc8 99 *
embeddedartists 0:5e5e9ec91fc8 100 * Processing:
embeddedartists 0:5e5e9ec91fc8 101 * See function.
embeddedartists 0:5e5e9ec91fc8 102 *
embeddedartists 0:5e5e9ec91fc8 103 * Parameters:
embeddedartists 0:5e5e9ec91fc8 104 * win : Window identifier
embeddedartists 0:5e5e9ec91fc8 105 * cx :
embeddedartists 0:5e5e9ec91fc8 106 * cy :
embeddedartists 0:5e5e9ec91fc8 107 * x :
embeddedartists 0:5e5e9ec91fc8 108 * y :
embeddedartists 0:5e5e9ec91fc8 109 * Filled :
embeddedartists 0:5e5e9ec91fc8 110 *
embeddedartists 0:5e5e9ec91fc8 111 * Outputs: None
embeddedartists 0:5e5e9ec91fc8 112 *
embeddedartists 0:5e5e9ec91fc8 113 * Returns: Nothing
embeddedartists 0:5e5e9ec91fc8 114 *
embeddedartists 0:5e5e9ec91fc8 115 * Notes: None
embeddedartists 0:5e5e9ec91fc8 116 *
embeddedartists 0:5e5e9ec91fc8 117 **********************************************************************/
embeddedartists 0:5e5e9ec91fc8 118 void Graphics::plot4points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled )
embeddedartists 0:5e5e9ec91fc8 119 {
embeddedartists 0:5e5e9ec91fc8 120 int16_t x0, x1, y0, y1;
embeddedartists 0:5e5e9ec91fc8 121
embeddedartists 0:5e5e9ec91fc8 122 y0 = cy + y;
embeddedartists 0:5e5e9ec91fc8 123 y1 = cy - y;
embeddedartists 0:5e5e9ec91fc8 124 if( Filled )
embeddedartists 0:5e5e9ec91fc8 125 {
embeddedartists 0:5e5e9ec91fc8 126 for( x0=cx - x; x0<=cx + x; x0++ )
embeddedartists 0:5e5e9ec91fc8 127 {
embeddedartists 0:5e5e9ec91fc8 128 if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY))
embeddedartists 0:5e5e9ec91fc8 129 this->pFrmBuf[x0 + (this->windowX*y0)] = color;
embeddedartists 0:5e5e9ec91fc8 130 if ((x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY))
embeddedartists 0:5e5e9ec91fc8 131 this->pFrmBuf[x0 + (this->windowX*y1)] = color;
embeddedartists 0:5e5e9ec91fc8 132 }
embeddedartists 0:5e5e9ec91fc8 133 }
embeddedartists 0:5e5e9ec91fc8 134 else
embeddedartists 0:5e5e9ec91fc8 135 {
embeddedartists 0:5e5e9ec91fc8 136 x0 = cx + x;
embeddedartists 0:5e5e9ec91fc8 137 x1 = cx - x;
embeddedartists 0:5e5e9ec91fc8 138 if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY))
embeddedartists 0:5e5e9ec91fc8 139 this->pFrmBuf[x0 + (this->windowX*y0)] = color;
embeddedartists 0:5e5e9ec91fc8 140 if ((x != 0) &&
embeddedartists 0:5e5e9ec91fc8 141 (x1>=0) && (x1<this->windowX) && (y0>=0) && (y0<this->windowY))
embeddedartists 0:5e5e9ec91fc8 142 this->pFrmBuf[x1 + (this->windowX*y0)] = color;
embeddedartists 0:5e5e9ec91fc8 143 if ((y != 0) &&
embeddedartists 0:5e5e9ec91fc8 144 (x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY))
embeddedartists 0:5e5e9ec91fc8 145 this->pFrmBuf[x0 + (this->windowX*y1)] = color;
embeddedartists 0:5e5e9ec91fc8 146 if ((x != 0 && y != 0) &&
embeddedartists 0:5e5e9ec91fc8 147 (x1>=0) && (x1<this->windowX) && (y1>=0) && (y1<this->windowY))
embeddedartists 0:5e5e9ec91fc8 148 this->pFrmBuf[x1 + (this->windowX*y1)] = color;
embeddedartists 0:5e5e9ec91fc8 149 }
embeddedartists 0:5e5e9ec91fc8 150 }
embeddedartists 0:5e5e9ec91fc8 151
embeddedartists 0:5e5e9ec91fc8 152 /***********************************************************************
embeddedartists 0:5e5e9ec91fc8 153 *
embeddedartists 0:5e5e9ec91fc8 154 * Function: plot8points
embeddedartists 0:5e5e9ec91fc8 155 *
embeddedartists 0:5e5e9ec91fc8 156 * Purpose:
embeddedartists 0:5e5e9ec91fc8 157 *
embeddedartists 0:5e5e9ec91fc8 158 * Processing:
embeddedartists 0:5e5e9ec91fc8 159 * See function.
embeddedartists 0:5e5e9ec91fc8 160 *
embeddedartists 0:5e5e9ec91fc8 161 * Parameters:
embeddedartists 0:5e5e9ec91fc8 162 * win : Window identifier
embeddedartists 0:5e5e9ec91fc8 163 * cx :
embeddedartists 0:5e5e9ec91fc8 164 * cy :
embeddedartists 0:5e5e9ec91fc8 165 * x :
embeddedartists 0:5e5e9ec91fc8 166 * y :
embeddedartists 0:5e5e9ec91fc8 167 * Filled :
embeddedartists 0:5e5e9ec91fc8 168 *
embeddedartists 0:5e5e9ec91fc8 169 * Outputs: None
embeddedartists 0:5e5e9ec91fc8 170 *
embeddedartists 0:5e5e9ec91fc8 171 * Returns: Nothing
embeddedartists 0:5e5e9ec91fc8 172 *
embeddedartists 0:5e5e9ec91fc8 173 * Notes: None
embeddedartists 0:5e5e9ec91fc8 174 *
embeddedartists 0:5e5e9ec91fc8 175 **********************************************************************/
embeddedartists 0:5e5e9ec91fc8 176 void Graphics::plot8points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled )
embeddedartists 0:5e5e9ec91fc8 177 {
embeddedartists 0:5e5e9ec91fc8 178 plot4points( cx, cy, x, y, color, Filled );
embeddedartists 0:5e5e9ec91fc8 179 if (x != y)
embeddedartists 0:5e5e9ec91fc8 180 plot4points( cx, cy, y, x, color, Filled );
embeddedartists 0:5e5e9ec91fc8 181 }
embeddedartists 0:5e5e9ec91fc8 182
embeddedartists 0:5e5e9ec91fc8 183 /***********************************************************************
embeddedartists 0:5e5e9ec91fc8 184 *
embeddedartists 0:5e5e9ec91fc8 185 * Function: swim_put_circle
embeddedartists 0:5e5e9ec91fc8 186 *
embeddedartists 0:5e5e9ec91fc8 187 * Purpose:
embeddedartists 0:5e5e9ec91fc8 188 *
embeddedartists 0:5e5e9ec91fc8 189 * Processing:
embeddedartists 0:5e5e9ec91fc8 190 * See function.
embeddedartists 0:5e5e9ec91fc8 191 *
embeddedartists 0:5e5e9ec91fc8 192 * Parameters:
embeddedartists 0:5e5e9ec91fc8 193 * win : Window identifier
embeddedartists 0:5e5e9ec91fc8 194 * cx :
embeddedartists 0:5e5e9ec91fc8 195 * cy :
embeddedartists 0:5e5e9ec91fc8 196 * radius :
embeddedartists 0:5e5e9ec91fc8 197 * Filled :
embeddedartists 0:5e5e9ec91fc8 198 *
embeddedartists 0:5e5e9ec91fc8 199 * Outputs: None
embeddedartists 0:5e5e9ec91fc8 200 *
embeddedartists 0:5e5e9ec91fc8 201 * Returns: Nothing
embeddedartists 0:5e5e9ec91fc8 202 *
embeddedartists 0:5e5e9ec91fc8 203 * Notes: None
embeddedartists 0:5e5e9ec91fc8 204 *
embeddedartists 0:5e5e9ec91fc8 205 **********************************************************************/
embeddedartists 0:5e5e9ec91fc8 206 void Graphics::put_circle( int32_t cx, int32_t cy, int16_t color, int32_t radius, int32_t Filled )
embeddedartists 0:5e5e9ec91fc8 207 {
embeddedartists 0:5e5e9ec91fc8 208 int32_t Error = -radius;
embeddedartists 0:5e5e9ec91fc8 209 int16_t x = radius;
embeddedartists 0:5e5e9ec91fc8 210 int16_t y = 0;
embeddedartists 0:5e5e9ec91fc8 211
embeddedartists 0:5e5e9ec91fc8 212 while( x >= y )
embeddedartists 0:5e5e9ec91fc8 213 {
embeddedartists 0:5e5e9ec91fc8 214 plot8points( cx, cy, x, y, color, Filled );
embeddedartists 0:5e5e9ec91fc8 215
embeddedartists 0:5e5e9ec91fc8 216 Error += y;
embeddedartists 0:5e5e9ec91fc8 217 ++y;
embeddedartists 0:5e5e9ec91fc8 218 Error += y;
embeddedartists 0:5e5e9ec91fc8 219
embeddedartists 0:5e5e9ec91fc8 220 if( Error >= 0 )
embeddedartists 0:5e5e9ec91fc8 221 {
embeddedartists 0:5e5e9ec91fc8 222 --x;
embeddedartists 0:5e5e9ec91fc8 223 Error -= x;
embeddedartists 0:5e5e9ec91fc8 224 Error -= x;
embeddedartists 0:5e5e9ec91fc8 225 }
embeddedartists 0:5e5e9ec91fc8 226 }
embeddedartists 0:5e5e9ec91fc8 227 }
embeddedartists 0:5e5e9ec91fc8 228
embeddedartists 0:5e5e9ec91fc8 229 void Graphics::put_dot( int32_t cx, int32_t cy, int16_t color )
embeddedartists 0:5e5e9ec91fc8 230 {
embeddedartists 0:5e5e9ec91fc8 231 int size = 1;
embeddedartists 0:5e5e9ec91fc8 232 for (int y1 = cy - size; y1 <= (cy + size); y1++) {
embeddedartists 0:5e5e9ec91fc8 233 for (int x1 = cx - size; x1 <= (cx + size); x1++) {
embeddedartists 0:5e5e9ec91fc8 234 if ((x1 >= 0) && (x1 < this->windowX) && (y1 >= 0) && (y1 < this->windowY)) {
embeddedartists 0:5e5e9ec91fc8 235 this->pFrmBuf[x1 + (this->windowX*y1)] = color;
embeddedartists 0:5e5e9ec91fc8 236 }
embeddedartists 0:5e5e9ec91fc8 237 }
embeddedartists 0:5e5e9ec91fc8 238 }
embeddedartists 0:5e5e9ec91fc8 239 }
embeddedartists 0:5e5e9ec91fc8 240
embeddedartists 0:5e5e9ec91fc8 241