Accelerometer and angle meter

Dependencies:   Beep mbed

Committer:
shangtianting
Date:
Sun May 10 00:23:23 2015 +0000
Revision:
0:a57e07e44ab0
Accelerometer and angle meter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shangtianting 0:a57e07e44ab0 1 /**
shangtianting 0:a57e07e44ab0 2 @file N5110.h
shangtianting 0:a57e07e44ab0 3
shangtianting 0:a57e07e44ab0 4 @brief Header file containing member functions and variables
shangtianting 0:a57e07e44ab0 5
shangtianting 0:a57e07e44ab0 6 */
shangtianting 0:a57e07e44ab0 7
shangtianting 0:a57e07e44ab0 8 #ifndef N5110_H
shangtianting 0:a57e07e44ab0 9 #define N5110_H
shangtianting 0:a57e07e44ab0 10
shangtianting 0:a57e07e44ab0 11 // Command Bytes - taken from Chris Yan's library
shangtianting 0:a57e07e44ab0 12 // More information can be found in the display datasheet
shangtianting 0:a57e07e44ab0 13 // H = 0 - Basic instructions
shangtianting 0:a57e07e44ab0 14 #define CMD_DC_CLEAR_DISPLAY 0x08
shangtianting 0:a57e07e44ab0 15 #define CMD_DC_NORMAL_MODE 0x0C
shangtianting 0:a57e07e44ab0 16 #define CMD_DC_FILL_DISPLAY 0x09
shangtianting 0:a57e07e44ab0 17 #define CMD_DC_INVERT_VIDEO 0x0D
shangtianting 0:a57e07e44ab0 18 #define CMD_FS_HORIZONTAL_MODE 0x00
shangtianting 0:a57e07e44ab0 19 #define CMD_FS_VERTICAL_MODE 0x02
shangtianting 0:a57e07e44ab0 20 #define CMD_FS_BASIC_MODE 0x00
shangtianting 0:a57e07e44ab0 21 #define CMD_FS_EXTENDED_MODE 0x01
shangtianting 0:a57e07e44ab0 22 #define CMD_FS_ACTIVE_MODE 0x00
shangtianting 0:a57e07e44ab0 23 #define CMD_FS_POWER_DOWN_MODE 0x04
shangtianting 0:a57e07e44ab0 24 // H = 1 - Extended instructions
shangtianting 0:a57e07e44ab0 25 #define CMD_TC_TEMP_0 0x04
shangtianting 0:a57e07e44ab0 26 #define CMD_TC_TEMP_1 0x05
shangtianting 0:a57e07e44ab0 27 #define CMD_TC_TEMP_2 0x06
shangtianting 0:a57e07e44ab0 28 #define CMD_TC_TEMP_3 0x07
shangtianting 0:a57e07e44ab0 29 #define CMD_BI_MUX_24 0x15
shangtianting 0:a57e07e44ab0 30 #define CMD_BI_MUX_48 0x13
shangtianting 0:a57e07e44ab0 31 #define CMD_BI_MUX_100 0x10
shangtianting 0:a57e07e44ab0 32 #define CMD_VOP_6V06 0xB2
shangtianting 0:a57e07e44ab0 33 #define CMD_VOP_7V38 0xC8
shangtianting 0:a57e07e44ab0 34
shangtianting 0:a57e07e44ab0 35 // number of pixels on display
shangtianting 0:a57e07e44ab0 36 #define WIDTH 84
shangtianting 0:a57e07e44ab0 37 #define HEIGHT 48
shangtianting 0:a57e07e44ab0 38 #define BANKS 6
shangtianting 0:a57e07e44ab0 39
shangtianting 0:a57e07e44ab0 40 #include "mbed.h"
shangtianting 0:a57e07e44ab0 41
shangtianting 0:a57e07e44ab0 42 /**
shangtianting 0:a57e07e44ab0 43 @brief Library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed.
shangtianting 0:a57e07e44ab0 44 @brief The display is powered from a GPIO pin meaning it can be controlled via software. The LED backlight is also software-controllable (via PWM pin).
shangtianting 0:a57e07e44ab0 45 @brief Can print characters and strings to the display using the included 5x7 font.
shangtianting 0:a57e07e44ab0 46 @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read.
shangtianting 0:a57e07e44ab0 47 @brief The library can print primitive shapes (lines, circles, rectangles)
shangtianting 0:a57e07e44ab0 48 @brief Acknowledgements to Chris Yan's Nokia_5110 Library.
shangtianting 0:a57e07e44ab0 49
shangtianting 0:a57e07e44ab0 50 @brief Revision 1.2
shangtianting 0:a57e07e44ab0 51
shangtianting 0:a57e07e44ab0 52 @author Craig A. Evans
shangtianting 0:a57e07e44ab0 53 @date 17th March 2015
shangtianting 0:a57e07e44ab0 54 *
shangtianting 0:a57e07e44ab0 55 * Example:
shangtianting 0:a57e07e44ab0 56 * @code
shangtianting 0:a57e07e44ab0 57
shangtianting 0:a57e07e44ab0 58 #include "mbed.h"
shangtianting 0:a57e07e44ab0 59 #include "N5110.h"
shangtianting 0:a57e07e44ab0 60
shangtianting 0:a57e07e44ab0 61 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
shangtianting 0:a57e07e44ab0 62 N5110 lcd(p7,p8,p9,p10,p11,p13,p21);
shangtianting 0:a57e07e44ab0 63 // Can also power (VCC) directly from VOUT (3.3 V) -
shangtianting 0:a57e07e44ab0 64 // Can give better performance due to current limitation from GPIO pin
shangtianting 0:a57e07e44ab0 65
shangtianting 0:a57e07e44ab0 66 int main()
shangtianting 0:a57e07e44ab0 67 {
shangtianting 0:a57e07e44ab0 68 // first need to initialise display
shangtianting 0:a57e07e44ab0 69 lcd.init();
shangtianting 0:a57e07e44ab0 70
shangtianting 0:a57e07e44ab0 71 while(1) {
shangtianting 0:a57e07e44ab0 72
shangtianting 0:a57e07e44ab0 73 // these are default settings so not strictly needed
shangtianting 0:a57e07e44ab0 74 lcd.normalMode(); // normal colour mode
shangtianting 0:a57e07e44ab0 75 lcd.setBrightness(0.5); // put LED backlight on 50%
shangtianting 0:a57e07e44ab0 76
shangtianting 0:a57e07e44ab0 77 // can directly print strings at specified co-ordinates
shangtianting 0:a57e07e44ab0 78 lcd.printString("Hello, World!",0,0);
shangtianting 0:a57e07e44ab0 79
shangtianting 0:a57e07e44ab0 80 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
shangtianting 0:a57e07e44ab0 81 // so can display a string of a maximum 14 characters in length
shangtianting 0:a57e07e44ab0 82 // or create formatted strings - ensure they aren't more than 14 characters long
shangtianting 0:a57e07e44ab0 83 int temperature = 27;
shangtianting 0:a57e07e44ab0 84 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
shangtianting 0:a57e07e44ab0 85 // it is important the format specifier ensures the length will fit in the buffer
shangtianting 0:a57e07e44ab0 86 if (length <= 14) // if string will fit on display
shangtianting 0:a57e07e44ab0 87 lcd.printString(buffer,0,1); // display on screen
shangtianting 0:a57e07e44ab0 88
shangtianting 0:a57e07e44ab0 89 float pressure = 1012.3; // same idea with floats
shangtianting 0:a57e07e44ab0 90 length = sprintf(buffer,"P = %.2f mb",pressure);
shangtianting 0:a57e07e44ab0 91 if (length <= 14)
shangtianting 0:a57e07e44ab0 92 lcd.printString(buffer,0,2);
shangtianting 0:a57e07e44ab0 93
shangtianting 0:a57e07e44ab0 94 // can also print individual characters at specified place
shangtianting 0:a57e07e44ab0 95 lcd.printChar('X',5,3);
shangtianting 0:a57e07e44ab0 96
shangtianting 0:a57e07e44ab0 97 // draw a line across the display at y = 40 pixels (origin top-left)
shangtianting 0:a57e07e44ab0 98 for (int i = 0; i < WIDTH; i++) {
shangtianting 0:a57e07e44ab0 99 lcd.setPixel(i,40);
shangtianting 0:a57e07e44ab0 100 }
shangtianting 0:a57e07e44ab0 101 // need to refresh display after setting pixels
shangtianting 0:a57e07e44ab0 102 lcd.refresh();
shangtianting 0:a57e07e44ab0 103
shangtianting 0:a57e07e44ab0 104 // can also check status of pixels using getPixel(x,y)
shangtianting 0:a57e07e44ab0 105
shangtianting 0:a57e07e44ab0 106 wait(5.0);
shangtianting 0:a57e07e44ab0 107 lcd.clear(); // clear display
shangtianting 0:a57e07e44ab0 108 lcd.inverseMode(); // invert colours
shangtianting 0:a57e07e44ab0 109 lcd.setBrightness(1.0); // put LED backlight on full
shangtianting 0:a57e07e44ab0 110
shangtianting 0:a57e07e44ab0 111 float array[84];
shangtianting 0:a57e07e44ab0 112
shangtianting 0:a57e07e44ab0 113 for (int i = 0; i < 84; i++) {
shangtianting 0:a57e07e44ab0 114 array[i] = 0.5 + 0.5*sin(i*2*3.14/84);
shangtianting 0:a57e07e44ab0 115 }
shangtianting 0:a57e07e44ab0 116
shangtianting 0:a57e07e44ab0 117 // can also plot graphs - 84 elements only
shangtianting 0:a57e07e44ab0 118 // values must be in range 0.0 - 1.0
shangtianting 0:a57e07e44ab0 119 lcd.plotArray(array);
shangtianting 0:a57e07e44ab0 120 wait(5.0);
shangtianting 0:a57e07e44ab0 121 lcd.clear();
shangtianting 0:a57e07e44ab0 122 lcd.normalMode(); // normal colour mode back
shangtianting 0:a57e07e44ab0 123 lcd.setBrightness(0.5); // put LED backlight on 50%
shangtianting 0:a57e07e44ab0 124
shangtianting 0:a57e07e44ab0 125 // example of drawing lines
shangtianting 0:a57e07e44ab0 126 for (int x = 0; x < WIDTH ; x+=10) {
shangtianting 0:a57e07e44ab0 127 // x0,y0,x1,y1,type 0-white,1-black,2-dotted
shangtianting 0:a57e07e44ab0 128 lcd.drawLine(0,0,x,HEIGHT,2);
shangtianting 0:a57e07e44ab0 129 }
shangtianting 0:a57e07e44ab0 130 lcd.refresh(); // need to refresh screen after drawing lines
shangtianting 0:a57e07e44ab0 131
shangtianting 0:a57e07e44ab0 132 wait(5.0);
shangtianting 0:a57e07e44ab0 133 lcd.clear();
shangtianting 0:a57e07e44ab0 134
shangtianting 0:a57e07e44ab0 135 // example of how to draw circles
shangtianting 0:a57e07e44ab0 136 lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill
shangtianting 0:a57e07e44ab0 137 lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill
shangtianting 0:a57e07e44ab0 138 lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // x,y,radius,transparent with outline
shangtianting 0:a57e07e44ab0 139 lcd.refresh(); // need to refresh screen after drawing circles
shangtianting 0:a57e07e44ab0 140
shangtianting 0:a57e07e44ab0 141 wait(5.0);
shangtianting 0:a57e07e44ab0 142 lcd.clear();
shangtianting 0:a57e07e44ab0 143
shangtianting 0:a57e07e44ab0 144 // example of how to draw rectangles
shangtianting 0:a57e07e44ab0 145 // origin x,y,width,height,type
shangtianting 0:a57e07e44ab0 146 lcd.drawRect(10,10,50,30,1); // filled black rectangle
shangtianting 0:a57e07e44ab0 147 lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline)
shangtianting 0:a57e07e44ab0 148 lcd.drawRect(2,2,70,40,0); // transparent, just outline
shangtianting 0:a57e07e44ab0 149 lcd.refresh(); // need to refresh screen after drawing rects
shangtianting 0:a57e07e44ab0 150
shangtianting 0:a57e07e44ab0 151
shangtianting 0:a57e07e44ab0 152 wait(5.0);
shangtianting 0:a57e07e44ab0 153 lcd.clear();
shangtianting 0:a57e07e44ab0 154
shangtianting 0:a57e07e44ab0 155 }
shangtianting 0:a57e07e44ab0 156 }
shangtianting 0:a57e07e44ab0 157
shangtianting 0:a57e07e44ab0 158
shangtianting 0:a57e07e44ab0 159 * @endcode
shangtianting 0:a57e07e44ab0 160 */
shangtianting 0:a57e07e44ab0 161 class N5110
shangtianting 0:a57e07e44ab0 162 {
shangtianting 0:a57e07e44ab0 163
shangtianting 0:a57e07e44ab0 164 public:
shangtianting 0:a57e07e44ab0 165 /** Create a N5110 object connected to the specified pins
shangtianting 0:a57e07e44ab0 166 *
shangtianting 0:a57e07e44ab0 167 * @param pwr Pin connected to Vcc on the LCD display (pin 1)
shangtianting 0:a57e07e44ab0 168 * @param sce Pin connected to chip enable (pin 3)
shangtianting 0:a57e07e44ab0 169 * @param rst Pin connected to reset (pin 4)
shangtianting 0:a57e07e44ab0 170 * @param dc Pin connected to data/command select (pin 5)
shangtianting 0:a57e07e44ab0 171 * @param mosi Pin connected to data input (MOSI) (pin 6)
shangtianting 0:a57e07e44ab0 172 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
shangtianting 0:a57e07e44ab0 173 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
shangtianting 0:a57e07e44ab0 174 *
shangtianting 0:a57e07e44ab0 175 */
shangtianting 0:a57e07e44ab0 176 N5110(PinName pwrPin, PinName scePin, PinName rstPin, PinName dcPin, PinName mosiPin, PinName sclkPin, PinName ledPin);
shangtianting 0:a57e07e44ab0 177
shangtianting 0:a57e07e44ab0 178 /** Initialise display
shangtianting 0:a57e07e44ab0 179 *
shangtianting 0:a57e07e44ab0 180 * Powers up the display and turns on backlight (50% brightness default).
shangtianting 0:a57e07e44ab0 181 * Sets the display up in horizontal addressing mode and with normal video mode.
shangtianting 0:a57e07e44ab0 182 */
shangtianting 0:a57e07e44ab0 183 void init();
shangtianting 0:a57e07e44ab0 184
shangtianting 0:a57e07e44ab0 185 /** Turn off
shangtianting 0:a57e07e44ab0 186 *
shangtianting 0:a57e07e44ab0 187 * Powers down the display and turns of the backlight.
shangtianting 0:a57e07e44ab0 188 * Needs to be reinitialised before being re-used.
shangtianting 0:a57e07e44ab0 189 */
shangtianting 0:a57e07e44ab0 190 void turnOff();
shangtianting 0:a57e07e44ab0 191
shangtianting 0:a57e07e44ab0 192 /** Clears
shangtianting 0:a57e07e44ab0 193 *
shangtianting 0:a57e07e44ab0 194 * Clears the screen.
shangtianting 0:a57e07e44ab0 195 */
shangtianting 0:a57e07e44ab0 196 void clear();
shangtianting 0:a57e07e44ab0 197
shangtianting 0:a57e07e44ab0 198 /** Turn on normal video mode (default)
shangtianting 0:a57e07e44ab0 199 * Black on white
shangtianting 0:a57e07e44ab0 200 */
shangtianting 0:a57e07e44ab0 201 void normalMode();
shangtianting 0:a57e07e44ab0 202
shangtianting 0:a57e07e44ab0 203 /** Turn on inverse video mode (default)
shangtianting 0:a57e07e44ab0 204 * White on black
shangtianting 0:a57e07e44ab0 205 */
shangtianting 0:a57e07e44ab0 206 void inverseMode();
shangtianting 0:a57e07e44ab0 207
shangtianting 0:a57e07e44ab0 208 /** Set Brightness
shangtianting 0:a57e07e44ab0 209 *
shangtianting 0:a57e07e44ab0 210 * Sets brightness of LED backlight.
shangtianting 0:a57e07e44ab0 211 * @param brightness - float in range 0.0 to 1.0
shangtianting 0:a57e07e44ab0 212 */
shangtianting 0:a57e07e44ab0 213 void setBrightness(float brightness);
shangtianting 0:a57e07e44ab0 214
shangtianting 0:a57e07e44ab0 215 /** Print String
shangtianting 0:a57e07e44ab0 216 *
shangtianting 0:a57e07e44ab0 217 * Prints a string of characters to the display. String is cut-off after the 83rd pixel.
shangtianting 0:a57e07e44ab0 218 * @param x - the column number (0 to 83)
shangtianting 0:a57e07e44ab0 219 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
shangtianting 0:a57e07e44ab0 220 */
shangtianting 0:a57e07e44ab0 221 void printString(const char * str,int x,int y);
shangtianting 0:a57e07e44ab0 222
shangtianting 0:a57e07e44ab0 223 /** Print Character
shangtianting 0:a57e07e44ab0 224 *
shangtianting 0:a57e07e44ab0 225 * Sends a character to the display. Printed at the specified location. Character is cut-off after the 83rd pixel.
shangtianting 0:a57e07e44ab0 226 * @param c - the character to print. Can print ASCII as so printChar('C').
shangtianting 0:a57e07e44ab0 227 * @param x - the column number (0 to 83)
shangtianting 0:a57e07e44ab0 228 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
shangtianting 0:a57e07e44ab0 229 */
shangtianting 0:a57e07e44ab0 230 void printChar(char c,int x,int y);
shangtianting 0:a57e07e44ab0 231
shangtianting 0:a57e07e44ab0 232 /** Set a Pixel
shangtianting 0:a57e07e44ab0 233 *
shangtianting 0:a57e07e44ab0 234 * This function sets a pixel in the display. A call to refresh() must be made
shangtianting 0:a57e07e44ab0 235 * to update the display to reflect the change in pixels.
shangtianting 0:a57e07e44ab0 236 * @param x - the x co-ordinate of the pixel (0 to 83)
shangtianting 0:a57e07e44ab0 237 * @param y - the y co-ordinate of the pixel (0 to 47)
shangtianting 0:a57e07e44ab0 238 */
shangtianting 0:a57e07e44ab0 239 void setPixel(int x, int y);
shangtianting 0:a57e07e44ab0 240
shangtianting 0:a57e07e44ab0 241 /** Clear a Pixel
shangtianting 0:a57e07e44ab0 242 *
shangtianting 0:a57e07e44ab0 243 * This function clears pixel in the display. A call to refresh() must be made
shangtianting 0:a57e07e44ab0 244 * to update the display to reflect the change in pixels.
shangtianting 0:a57e07e44ab0 245 * @param x - the x co-ordinate of the pixel (0 to 83)
shangtianting 0:a57e07e44ab0 246 * @param y - the y co-ordinate of the pixel (0 to 47)
shangtianting 0:a57e07e44ab0 247 */
shangtianting 0:a57e07e44ab0 248 void clearPixel(int x, int y);
shangtianting 0:a57e07e44ab0 249
shangtianting 0:a57e07e44ab0 250 /** Get a Pixel
shangtianting 0:a57e07e44ab0 251 *
shangtianting 0:a57e07e44ab0 252 * This function gets the status of a pixel in the display.
shangtianting 0:a57e07e44ab0 253 * @param x - the x co-ordinate of the pixel (0 to 83)
shangtianting 0:a57e07e44ab0 254 * @param y - the y co-ordinate of the pixel (0 to 47)
shangtianting 0:a57e07e44ab0 255 * @returns
shangtianting 0:a57e07e44ab0 256 * 0 - pixel is clear
shangtianting 0:a57e07e44ab0 257 * non-zero - pixel is set
shangtianting 0:a57e07e44ab0 258 */
shangtianting 0:a57e07e44ab0 259 int getPixel(int x, int y);
shangtianting 0:a57e07e44ab0 260
shangtianting 0:a57e07e44ab0 261 /** Refresh display
shangtianting 0:a57e07e44ab0 262 *
shangtianting 0:a57e07e44ab0 263 * This functions refreshes the display to reflect the current data in the buffer.
shangtianting 0:a57e07e44ab0 264 */
shangtianting 0:a57e07e44ab0 265 void refresh();
shangtianting 0:a57e07e44ab0 266
shangtianting 0:a57e07e44ab0 267 /** Randomise buffer
shangtianting 0:a57e07e44ab0 268 *
shangtianting 0:a57e07e44ab0 269 * This function fills the buffer with random data. Can be used to test the display.
shangtianting 0:a57e07e44ab0 270 * A call to refresh() must be made to update the display to reflect the change in pixels.
shangtianting 0:a57e07e44ab0 271 * The seed is not set and so the generated pattern will probably be the same each time.
shangtianting 0:a57e07e44ab0 272 * TODO: Randomise the seed - maybe using the noise on the AnalogIn pins.
shangtianting 0:a57e07e44ab0 273 */
shangtianting 0:a57e07e44ab0 274 void randomiseBuffer();
shangtianting 0:a57e07e44ab0 275
shangtianting 0:a57e07e44ab0 276 /** Plot Array
shangtianting 0:a57e07e44ab0 277 *
shangtianting 0:a57e07e44ab0 278 * This function plots a one-dimensional array on the display.
shangtianting 0:a57e07e44ab0 279 * @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted.
shangtianting 0:a57e07e44ab0 280 */
shangtianting 0:a57e07e44ab0 281 void plotArray(float array[]);
shangtianting 0:a57e07e44ab0 282
shangtianting 0:a57e07e44ab0 283 /** Draw Circle
shangtianting 0:a57e07e44ab0 284 *
shangtianting 0:a57e07e44ab0 285 * This function draws a circle at the specified origin with specified radius to the display.
shangtianting 0:a57e07e44ab0 286 * Uses the midpoint circle algorithm.
shangtianting 0:a57e07e44ab0 287 * @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
shangtianting 0:a57e07e44ab0 288 * @param x0 - x-coordinate of centre
shangtianting 0:a57e07e44ab0 289 * @param y0 - y-coordinate of centre
shangtianting 0:a57e07e44ab0 290 * @param radius - radius of circle in pixels
shangtianting 0:a57e07e44ab0 291 * @param fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline)
shangtianting 0:a57e07e44ab0 292 */
shangtianting 0:a57e07e44ab0 293 void drawCircle(int x0,int y0,int radius,int fill);
shangtianting 0:a57e07e44ab0 294
shangtianting 0:a57e07e44ab0 295 /** Draw Line
shangtianting 0:a57e07e44ab0 296 *
shangtianting 0:a57e07e44ab0 297 * This function draws a line between the specified points using linear interpolation.
shangtianting 0:a57e07e44ab0 298 * @param x0 - x-coordinate of first point
shangtianting 0:a57e07e44ab0 299 * @param y0 - y-coordinate of first point
shangtianting 0:a57e07e44ab0 300 * @param x1 - x-coordinate of last point
shangtianting 0:a57e07e44ab0 301 * @param y1 - y-coordinate of last point
shangtianting 0:a57e07e44ab0 302 * @param type - 0 white,1 black,2 dotted
shangtianting 0:a57e07e44ab0 303 */
shangtianting 0:a57e07e44ab0 304 void drawLine(int x0,int y0,int x1,int y1,int type);
shangtianting 0:a57e07e44ab0 305
shangtianting 0:a57e07e44ab0 306 /** Draw Rectangle
shangtianting 0:a57e07e44ab0 307 *
shangtianting 0:a57e07e44ab0 308 * This function draws a rectangle.
shangtianting 0:a57e07e44ab0 309 * @param x0 - x-coordinate of origin (top-left)
shangtianting 0:a57e07e44ab0 310 * @param y0 - y-coordinate of origin (top-left)
shangtianting 0:a57e07e44ab0 311 * @param width - width of rectangle
shangtianting 0:a57e07e44ab0 312 * @param height - height of rectangle
shangtianting 0:a57e07e44ab0 313 * @param fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline)
shangtianting 0:a57e07e44ab0 314 */
shangtianting 0:a57e07e44ab0 315 void drawRect(int x0,int y0,int width,int height,int fill);
shangtianting 0:a57e07e44ab0 316
shangtianting 0:a57e07e44ab0 317
shangtianting 0:a57e07e44ab0 318 private:
shangtianting 0:a57e07e44ab0 319
shangtianting 0:a57e07e44ab0 320 void setXYAddress(int x, int y);
shangtianting 0:a57e07e44ab0 321 void initSPI();
shangtianting 0:a57e07e44ab0 322 void turnOn();
shangtianting 0:a57e07e44ab0 323 void reset();
shangtianting 0:a57e07e44ab0 324 void clearRAM();
shangtianting 0:a57e07e44ab0 325 void clearBuffer();
shangtianting 0:a57e07e44ab0 326 void sendCommand(unsigned char command);
shangtianting 0:a57e07e44ab0 327 void sendData(unsigned char data);
shangtianting 0:a57e07e44ab0 328
shangtianting 0:a57e07e44ab0 329 public:
shangtianting 0:a57e07e44ab0 330 unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
shangtianting 0:a57e07e44ab0 331
shangtianting 0:a57e07e44ab0 332 private: // private variables
shangtianting 0:a57e07e44ab0 333 SPI* spi;
shangtianting 0:a57e07e44ab0 334 PwmOut* led;
shangtianting 0:a57e07e44ab0 335 DigitalOut* pwr;
shangtianting 0:a57e07e44ab0 336 DigitalOut* sce;
shangtianting 0:a57e07e44ab0 337 DigitalOut* rst;
shangtianting 0:a57e07e44ab0 338 DigitalOut* dc;
shangtianting 0:a57e07e44ab0 339
shangtianting 0:a57e07e44ab0 340 };
shangtianting 0:a57e07e44ab0 341
shangtianting 0:a57e07e44ab0 342 const unsigned char font5x7[480] = {
shangtianting 0:a57e07e44ab0 343 0x00, 0x00, 0x00, 0x00, 0x00,// (space)
shangtianting 0:a57e07e44ab0 344 0x00, 0x00, 0x5F, 0x00, 0x00,// !
shangtianting 0:a57e07e44ab0 345 0x00, 0x07, 0x00, 0x07, 0x00,// "
shangtianting 0:a57e07e44ab0 346 0x14, 0x7F, 0x14, 0x7F, 0x14,// #
shangtianting 0:a57e07e44ab0 347 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
shangtianting 0:a57e07e44ab0 348 0x23, 0x13, 0x08, 0x64, 0x62,// %
shangtianting 0:a57e07e44ab0 349 0x36, 0x49, 0x55, 0x22, 0x50,// &
shangtianting 0:a57e07e44ab0 350 0x00, 0x05, 0x03, 0x00, 0x00,// '
shangtianting 0:a57e07e44ab0 351 0x00, 0x1C, 0x22, 0x41, 0x00,// (
shangtianting 0:a57e07e44ab0 352 0x00, 0x41, 0x22, 0x1C, 0x00,// )
shangtianting 0:a57e07e44ab0 353 0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
shangtianting 0:a57e07e44ab0 354 0x08, 0x08, 0x3E, 0x08, 0x08,// +
shangtianting 0:a57e07e44ab0 355 0x00, 0x50, 0x30, 0x00, 0x00,// ,
shangtianting 0:a57e07e44ab0 356 0x08, 0x08, 0x08, 0x08, 0x08,// -
shangtianting 0:a57e07e44ab0 357 0x00, 0x60, 0x60, 0x00, 0x00,// .
shangtianting 0:a57e07e44ab0 358 0x20, 0x10, 0x08, 0x04, 0x02,// /
shangtianting 0:a57e07e44ab0 359 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
shangtianting 0:a57e07e44ab0 360 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
shangtianting 0:a57e07e44ab0 361 0x42, 0x61, 0x51, 0x49, 0x46,// 2
shangtianting 0:a57e07e44ab0 362 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
shangtianting 0:a57e07e44ab0 363 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
shangtianting 0:a57e07e44ab0 364 0x27, 0x45, 0x45, 0x45, 0x39,// 5
shangtianting 0:a57e07e44ab0 365 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
shangtianting 0:a57e07e44ab0 366 0x01, 0x71, 0x09, 0x05, 0x03,// 7
shangtianting 0:a57e07e44ab0 367 0x36, 0x49, 0x49, 0x49, 0x36,// 8
shangtianting 0:a57e07e44ab0 368 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
shangtianting 0:a57e07e44ab0 369 0x00, 0x36, 0x36, 0x00, 0x00,// :
shangtianting 0:a57e07e44ab0 370 0x00, 0x56, 0x36, 0x00, 0x00,// ;
shangtianting 0:a57e07e44ab0 371 0x00, 0x08, 0x14, 0x22, 0x41,// <
shangtianting 0:a57e07e44ab0 372 0x14, 0x14, 0x14, 0x14, 0x14,// =
shangtianting 0:a57e07e44ab0 373 0x41, 0x22, 0x14, 0x08, 0x00,// >
shangtianting 0:a57e07e44ab0 374 0x02, 0x01, 0x51, 0x09, 0x06,// ?
shangtianting 0:a57e07e44ab0 375 0x32, 0x49, 0x79, 0x41, 0x3E,// @
shangtianting 0:a57e07e44ab0 376 0x7E, 0x11, 0x11, 0x11, 0x7E,// A
shangtianting 0:a57e07e44ab0 377 0x7F, 0x49, 0x49, 0x49, 0x36,// B
shangtianting 0:a57e07e44ab0 378 0x3E, 0x41, 0x41, 0x41, 0x22,// C
shangtianting 0:a57e07e44ab0 379 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
shangtianting 0:a57e07e44ab0 380 0x7F, 0x49, 0x49, 0x49, 0x41,// E
shangtianting 0:a57e07e44ab0 381 0x7F, 0x09, 0x09, 0x01, 0x01,// F
shangtianting 0:a57e07e44ab0 382 0x3E, 0x41, 0x41, 0x51, 0x32,// G
shangtianting 0:a57e07e44ab0 383 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
shangtianting 0:a57e07e44ab0 384 0x00, 0x41, 0x7F, 0x41, 0x00,// I
shangtianting 0:a57e07e44ab0 385 0x20, 0x40, 0x41, 0x3F, 0x01,// J
shangtianting 0:a57e07e44ab0 386 0x7F, 0x08, 0x14, 0x22, 0x41,// K
shangtianting 0:a57e07e44ab0 387 0x7F, 0x40, 0x40, 0x40, 0x40,// L
shangtianting 0:a57e07e44ab0 388 0x7F, 0x02, 0x04, 0x02, 0x7F,// M
shangtianting 0:a57e07e44ab0 389 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
shangtianting 0:a57e07e44ab0 390 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
shangtianting 0:a57e07e44ab0 391 0x7F, 0x09, 0x09, 0x09, 0x06,// P
shangtianting 0:a57e07e44ab0 392 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
shangtianting 0:a57e07e44ab0 393 0x7F, 0x09, 0x19, 0x29, 0x46,// R
shangtianting 0:a57e07e44ab0 394 0x46, 0x49, 0x49, 0x49, 0x31,// S
shangtianting 0:a57e07e44ab0 395 0x01, 0x01, 0x7F, 0x01, 0x01,// T
shangtianting 0:a57e07e44ab0 396 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
shangtianting 0:a57e07e44ab0 397 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
shangtianting 0:a57e07e44ab0 398 0x7F, 0x20, 0x18, 0x20, 0x7F,// W
shangtianting 0:a57e07e44ab0 399 0x63, 0x14, 0x08, 0x14, 0x63,// X
shangtianting 0:a57e07e44ab0 400 0x03, 0x04, 0x78, 0x04, 0x03,// Y
shangtianting 0:a57e07e44ab0 401 0x61, 0x51, 0x49, 0x45, 0x43,// Z
shangtianting 0:a57e07e44ab0 402 0x00, 0x00, 0x7F, 0x41, 0x41,// [
shangtianting 0:a57e07e44ab0 403 0x02, 0x04, 0x08, 0x10, 0x20,// "\"
shangtianting 0:a57e07e44ab0 404 0x41, 0x41, 0x7F, 0x00, 0x00,// ]
shangtianting 0:a57e07e44ab0 405 0x04, 0x02, 0x01, 0x02, 0x04,// ^
shangtianting 0:a57e07e44ab0 406 0x40, 0x40, 0x40, 0x40, 0x40,// _
shangtianting 0:a57e07e44ab0 407 0x00, 0x01, 0x02, 0x04, 0x00,// `
shangtianting 0:a57e07e44ab0 408 0x20, 0x54, 0x54, 0x54, 0x78,// a
shangtianting 0:a57e07e44ab0 409 0x7F, 0x48, 0x44, 0x44, 0x38,// b
shangtianting 0:a57e07e44ab0 410 0x38, 0x44, 0x44, 0x44, 0x20,// c
shangtianting 0:a57e07e44ab0 411 0x38, 0x44, 0x44, 0x48, 0x7F,// d
shangtianting 0:a57e07e44ab0 412 0x38, 0x54, 0x54, 0x54, 0x18,// e
shangtianting 0:a57e07e44ab0 413 0x08, 0x7E, 0x09, 0x01, 0x02,// f
shangtianting 0:a57e07e44ab0 414 0x08, 0x14, 0x54, 0x54, 0x3C,// g
shangtianting 0:a57e07e44ab0 415 0x7F, 0x08, 0x04, 0x04, 0x78,// h
shangtianting 0:a57e07e44ab0 416 0x00, 0x44, 0x7D, 0x40, 0x00,// i
shangtianting 0:a57e07e44ab0 417 0x20, 0x40, 0x44, 0x3D, 0x00,// j
shangtianting 0:a57e07e44ab0 418 0x00, 0x7F, 0x10, 0x28, 0x44,// k
shangtianting 0:a57e07e44ab0 419 0x00, 0x41, 0x7F, 0x40, 0x00,// l
shangtianting 0:a57e07e44ab0 420 0x7C, 0x04, 0x18, 0x04, 0x78,// m
shangtianting 0:a57e07e44ab0 421 0x7C, 0x08, 0x04, 0x04, 0x78,// n
shangtianting 0:a57e07e44ab0 422 0x38, 0x44, 0x44, 0x44, 0x38,// o
shangtianting 0:a57e07e44ab0 423 0x7C, 0x14, 0x14, 0x14, 0x08,// p
shangtianting 0:a57e07e44ab0 424 0x08, 0x14, 0x14, 0x18, 0x7C,// q
shangtianting 0:a57e07e44ab0 425 0x7C, 0x08, 0x04, 0x04, 0x08,// r
shangtianting 0:a57e07e44ab0 426 0x48, 0x54, 0x54, 0x54, 0x20,// s
shangtianting 0:a57e07e44ab0 427 0x04, 0x3F, 0x44, 0x40, 0x20,// t
shangtianting 0:a57e07e44ab0 428 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
shangtianting 0:a57e07e44ab0 429 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
shangtianting 0:a57e07e44ab0 430 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
shangtianting 0:a57e07e44ab0 431 0x44, 0x28, 0x10, 0x28, 0x44,// x
shangtianting 0:a57e07e44ab0 432 0x0C, 0x50, 0x50, 0x50, 0x3C,// y
shangtianting 0:a57e07e44ab0 433 0x44, 0x64, 0x54, 0x4C, 0x44,// z
shangtianting 0:a57e07e44ab0 434 0x00, 0x08, 0x36, 0x41, 0x00,// {
shangtianting 0:a57e07e44ab0 435 0x00, 0x00, 0x7F, 0x00, 0x00,// |
shangtianting 0:a57e07e44ab0 436 0x00, 0x41, 0x36, 0x08, 0x00,// }
shangtianting 0:a57e07e44ab0 437 0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
shangtianting 0:a57e07e44ab0 438 0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
shangtianting 0:a57e07e44ab0 439 };
shangtianting 0:a57e07e44ab0 440
shangtianting 0:a57e07e44ab0 441 #endif
shangtianting 0:a57e07e44ab0 442