Yang Zhenye 201199680

Dependencies:   mbed

Committer:
yangzhenye
Date:
Fri May 15 07:27:23 2020 +0000
Revision:
9:a5a82b3d1102
Parent:
5:fcad75e9b9e1
el17zy Yang Zhenye

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yangzhenye 0:ac2868313b41 1 #ifndef N5110_H
yangzhenye 0:ac2868313b41 2 #define N5110_H
yangzhenye 5:fcad75e9b9e1 3
yangzhenye 0:ac2868313b41 4 #include "mbed.h"
yangzhenye 5:fcad75e9b9e1 5
yangzhenye 0:ac2868313b41 6 // number of pixels on display
yangzhenye 0:ac2868313b41 7 #define WIDTH 84
yangzhenye 0:ac2868313b41 8 #define HEIGHT 48
yangzhenye 0:ac2868313b41 9 #define BANKS 6
yangzhenye 5:fcad75e9b9e1 10
yangzhenye 0:ac2868313b41 11 /// Fill types for 2D shapes
yangzhenye 0:ac2868313b41 12 enum FillType {
yangzhenye 0:ac2868313b41 13 FILL_TRANSPARENT, ///< Transparent with outline
yangzhenye 0:ac2868313b41 14 FILL_BLACK, ///< Filled black
yangzhenye 0:ac2868313b41 15 FILL_WHITE, ///< Filled white (no outline)
yangzhenye 0:ac2868313b41 16 };
yangzhenye 5:fcad75e9b9e1 17
yangzhenye 0:ac2868313b41 18 /** N5110 Class
yangzhenye 0:ac2868313b41 19 @brief Library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed.
yangzhenye 0:ac2868313b41 20 @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).
yangzhenye 0:ac2868313b41 21 @brief Can print characters and strings to the display using the included 5x7 font.
yangzhenye 0:ac2868313b41 22 @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read.
yangzhenye 0:ac2868313b41 23 @brief The library can print primitive shapes (lines, circles, rectangles)
yangzhenye 0:ac2868313b41 24 @brief Acknowledgements to Chris Yan's Nokia_5110 Library.
yangzhenye 5:fcad75e9b9e1 25
yangzhenye 0:ac2868313b41 26 @brief Revision 1.3
yangzhenye 5:fcad75e9b9e1 27
yangzhenye 0:ac2868313b41 28 @author Craig A. Evans
yangzhenye 0:ac2868313b41 29 @date 7th February 2017
yangzhenye 5:fcad75e9b9e1 30
yangzhenye 0:ac2868313b41 31 @code
yangzhenye 5:fcad75e9b9e1 32
yangzhenye 0:ac2868313b41 33 #include "mbed.h"
yangzhenye 0:ac2868313b41 34 #include "N5110.h"
yangzhenye 5:fcad75e9b9e1 35
yangzhenye 5:fcad75e9b9e1 36 // rows,cols
yangzhenye 5:fcad75e9b9e1 37 int sprite[8][5] = {
yangzhenye 5:fcad75e9b9e1 38 { 0,0,1,0,0 },
yangzhenye 5:fcad75e9b9e1 39 { 0,1,1,1,0 },
yangzhenye 5:fcad75e9b9e1 40 { 0,0,1,0,0 },
yangzhenye 5:fcad75e9b9e1 41 { 0,1,1,1,0 },
yangzhenye 5:fcad75e9b9e1 42 { 1,1,1,1,1 },
yangzhenye 5:fcad75e9b9e1 43 { 1,1,1,1,1 },
yangzhenye 5:fcad75e9b9e1 44 { 1,1,0,1,1 },
yangzhenye 5:fcad75e9b9e1 45 { 1,1,0,1,1 },
yangzhenye 5:fcad75e9b9e1 46 };
yangzhenye 5:fcad75e9b9e1 47
yangzhenye 0:ac2868313b41 48 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
yangzhenye 0:ac2868313b41 49 //N5110 lcd(p7,p8,p9,p10,p11,p13,p21); // LPC1768 - pwr from GPIO
yangzhenye 5:fcad75e9b9e1 50 N5110 lcd(p8,p9,p10,p11,p13,p21); // LPC1768 - powered from +3V3 - JP1 in 2/3 position
yangzhenye 5:fcad75e9b9e1 51 //N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3
yangzhenye 5:fcad75e9b9e1 52
yangzhenye 0:ac2868313b41 53 int main()
yangzhenye 0:ac2868313b41 54 {
yangzhenye 0:ac2868313b41 55 // first need to initialise display
yangzhenye 0:ac2868313b41 56 lcd.init();
yangzhenye 5:fcad75e9b9e1 57
yangzhenye 5:fcad75e9b9e1 58 // change set contrast in range 0.0 to 1.0
yangzhenye 5:fcad75e9b9e1 59 // 0.4 appears to be a good starting point
yangzhenye 5:fcad75e9b9e1 60 lcd.setContrast(0.4);
yangzhenye 5:fcad75e9b9e1 61
yangzhenye 0:ac2868313b41 62 while(1) {
yangzhenye 5:fcad75e9b9e1 63
yangzhenye 0:ac2868313b41 64 // these are default settings so not strictly needed
yangzhenye 0:ac2868313b41 65 lcd.normalMode(); // normal colour mode
yangzhenye 0:ac2868313b41 66 lcd.setBrightness(0.5); // put LED backlight on 50%
yangzhenye 5:fcad75e9b9e1 67
yangzhenye 5:fcad75e9b9e1 68 lcd.clear();
yangzhenye 5:fcad75e9b9e1 69 // x origin, y origin, rows, cols, sprite
yangzhenye 5:fcad75e9b9e1 70 lcd.drawSprite(20,6,8,5,(int *)sprite);
yangzhenye 5:fcad75e9b9e1 71 lcd.refresh();
yangzhenye 5:fcad75e9b9e1 72 wait(5.0);
yangzhenye 5:fcad75e9b9e1 73
yangzhenye 0:ac2868313b41 74 lcd.clear(); // clear buffer at start of every loop
yangzhenye 0:ac2868313b41 75 // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display)
yangzhenye 0:ac2868313b41 76 lcd.printString("Hello, World!",0,0);
yangzhenye 5:fcad75e9b9e1 77
yangzhenye 0:ac2868313b41 78 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
yangzhenye 0:ac2868313b41 79 // so can display a string of a maximum 14 characters in length
yangzhenye 0:ac2868313b41 80 // or create formatted strings - ensure they aren't more than 14 characters long
yangzhenye 0:ac2868313b41 81 int temperature = 27;
yangzhenye 0:ac2868313b41 82 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
yangzhenye 0:ac2868313b41 83 // it is important the format specifier ensures the length will fit in the buffer
yangzhenye 0:ac2868313b41 84 if (length <= 14) // if string will fit on display (assuming printing at x=0)
yangzhenye 0:ac2868313b41 85 lcd.printString(buffer,0,1); // display on screen
yangzhenye 5:fcad75e9b9e1 86
yangzhenye 0:ac2868313b41 87 float pressure = 1012.3; // same idea with floats
yangzhenye 0:ac2868313b41 88 length = sprintf(buffer,"P = %.2f mb",pressure);
yangzhenye 0:ac2868313b41 89 if (length <= 14)
yangzhenye 0:ac2868313b41 90 lcd.printString(buffer,0,2);
yangzhenye 5:fcad75e9b9e1 91
yangzhenye 0:ac2868313b41 92 // can also print individual characters at specified place
yangzhenye 0:ac2868313b41 93 lcd.printChar('X',5,3);
yangzhenye 5:fcad75e9b9e1 94
yangzhenye 0:ac2868313b41 95 // draw a line across the display at y = 40 pixels (origin top-left)
yangzhenye 0:ac2868313b41 96 for (int i = 0; i < WIDTH; i++) {
yangzhenye 5:fcad75e9b9e1 97 lcd.setPixel(i,40,true);
yangzhenye 0:ac2868313b41 98 }
yangzhenye 0:ac2868313b41 99 // need to refresh display after setting pixels or writing strings
yangzhenye 0:ac2868313b41 100 lcd.refresh();
yangzhenye 0:ac2868313b41 101 wait(5.0);
yangzhenye 5:fcad75e9b9e1 102
yangzhenye 0:ac2868313b41 103 // can check status of pixel using getPixel(x,y);
yangzhenye 0:ac2868313b41 104 lcd.clear(); // clear buffer
yangzhenye 5:fcad75e9b9e1 105 lcd.setPixel(2,2,true); // set random pixel in buffer
yangzhenye 0:ac2868313b41 106 lcd.refresh();
yangzhenye 0:ac2868313b41 107 wait(1.0);
yangzhenye 5:fcad75e9b9e1 108
yangzhenye 0:ac2868313b41 109 int pixel_to_test = lcd.getPixel(2,2);
yangzhenye 5:fcad75e9b9e1 110
yangzhenye 0:ac2868313b41 111 if ( pixel_to_test ) {
yangzhenye 0:ac2868313b41 112 lcd.printString("2,2 is set",0,4);
yangzhenye 0:ac2868313b41 113 }
yangzhenye 5:fcad75e9b9e1 114
yangzhenye 0:ac2868313b41 115 // this one shouldn't be set
yangzhenye 5:fcad75e9b9e1 116 lcd.setPixel(3,3,false); // clear random pixel in buffer
yangzhenye 5:fcad75e9b9e1 117 lcd.refresh();
yangzhenye 0:ac2868313b41 118 pixel_to_test = lcd.getPixel(3,3);
yangzhenye 5:fcad75e9b9e1 119
yangzhenye 0:ac2868313b41 120 if ( pixel_to_test == 0 ) {
yangzhenye 0:ac2868313b41 121 lcd.printString("3,3 is clear",0,5);
yangzhenye 0:ac2868313b41 122 }
yangzhenye 5:fcad75e9b9e1 123
yangzhenye 0:ac2868313b41 124 lcd.refresh();
yangzhenye 0:ac2868313b41 125 wait(4.0);
yangzhenye 5:fcad75e9b9e1 126
yangzhenye 0:ac2868313b41 127 lcd.clear(); // clear buffer
yangzhenye 0:ac2868313b41 128 lcd.inverseMode(); // invert colours
yangzhenye 0:ac2868313b41 129 lcd.setBrightness(1.0); // put LED backlight on full
yangzhenye 5:fcad75e9b9e1 130
yangzhenye 0:ac2868313b41 131 float array[84];
yangzhenye 5:fcad75e9b9e1 132
yangzhenye 0:ac2868313b41 133 for (int i = 0; i < 84; i++) {
yangzhenye 0:ac2868313b41 134 array[i] = 0.5 + 0.5*sin(i*2*3.14/84);
yangzhenye 0:ac2868313b41 135 }
yangzhenye 5:fcad75e9b9e1 136
yangzhenye 0:ac2868313b41 137 // can also plot graphs - 84 elements only
yangzhenye 0:ac2868313b41 138 // values must be in range 0.0 - 1.0
yangzhenye 0:ac2868313b41 139 lcd.plotArray(array);
yangzhenye 0:ac2868313b41 140 lcd.refresh();
yangzhenye 0:ac2868313b41 141 wait(5.0);
yangzhenye 5:fcad75e9b9e1 142
yangzhenye 0:ac2868313b41 143 lcd.clear();
yangzhenye 0:ac2868313b41 144 lcd.normalMode(); // normal colour mode back
yangzhenye 0:ac2868313b41 145 lcd.setBrightness(0.5); // put LED backlight on 50%
yangzhenye 5:fcad75e9b9e1 146
yangzhenye 0:ac2868313b41 147 // example of drawing lines
yangzhenye 0:ac2868313b41 148 for (int x = 0; x < WIDTH ; x+=10) {
yangzhenye 0:ac2868313b41 149 // x0,y0,x1,y1,type 0-white,1-black,2-dotted
yangzhenye 0:ac2868313b41 150 lcd.drawLine(0,0,x,HEIGHT,2);
yangzhenye 0:ac2868313b41 151 }
yangzhenye 0:ac2868313b41 152 lcd.refresh(); // refresh after drawing shapes
yangzhenye 0:ac2868313b41 153 wait(5.0);
yangzhenye 5:fcad75e9b9e1 154
yangzhenye 5:fcad75e9b9e1 155
yangzhenye 0:ac2868313b41 156 lcd.clear();
yangzhenye 0:ac2868313b41 157 // example of how to draw circles
yangzhenye 0:ac2868313b41 158 lcd.drawCircle(WIDTH/2,HEIGHT/2,20,FILL_BLACK); // x,y,radius,black fill
yangzhenye 0:ac2868313b41 159 lcd.drawCircle(WIDTH/2,HEIGHT/2,10,FILL_WHITE); // x,y,radius,white fill
yangzhenye 0:ac2868313b41 160 lcd.drawCircle(WIDTH/2,HEIGHT/2,30,FILL_TRANSPARENT); // x,y,radius,transparent with outline
yangzhenye 0:ac2868313b41 161 lcd.refresh(); // refresh after drawing shapes
yangzhenye 0:ac2868313b41 162 wait(5.0);
yangzhenye 5:fcad75e9b9e1 163
yangzhenye 0:ac2868313b41 164 lcd.clear();
yangzhenye 0:ac2868313b41 165 // example of how to draw rectangles
yangzhenye 0:ac2868313b41 166 // origin x,y,width,height,type
yangzhenye 0:ac2868313b41 167 lcd.drawRect(10,10,50,30,FILL_BLACK); // filled black rectangle
yangzhenye 0:ac2868313b41 168 lcd.drawRect(15,15,20,10,FILL_WHITE); // filled white rectange (no outline)
yangzhenye 5:fcad75e9b9e1 169 lcd.drawRect(2,2,70,40,FILL_TRANSPARENT); // transparent, just outline
yangzhenye 0:ac2868313b41 170 lcd.refresh(); // refresh after drawing shapes
yangzhenye 0:ac2868313b41 171 wait(5.0);
yangzhenye 5:fcad75e9b9e1 172
yangzhenye 0:ac2868313b41 173 }
yangzhenye 0:ac2868313b41 174 }
yangzhenye 5:fcad75e9b9e1 175
yangzhenye 5:fcad75e9b9e1 176
yangzhenye 0:ac2868313b41 177 @endcode
yangzhenye 0:ac2868313b41 178 */
yangzhenye 0:ac2868313b41 179 class N5110
yangzhenye 0:ac2868313b41 180 {
yangzhenye 0:ac2868313b41 181 private:
yangzhenye 0:ac2868313b41 182 // objects
yangzhenye 0:ac2868313b41 183 SPI *_spi;
yangzhenye 0:ac2868313b41 184 PwmOut *_led;
yangzhenye 0:ac2868313b41 185 DigitalOut *_pwr;
yangzhenye 0:ac2868313b41 186 DigitalOut *_sce;
yangzhenye 0:ac2868313b41 187 DigitalOut *_rst;
yangzhenye 0:ac2868313b41 188 DigitalOut *_dc;
yangzhenye 5:fcad75e9b9e1 189
yangzhenye 0:ac2868313b41 190 // variables
yangzhenye 0:ac2868313b41 191 unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
yangzhenye 5:fcad75e9b9e1 192
yangzhenye 0:ac2868313b41 193 public:
yangzhenye 0:ac2868313b41 194 /** Create a N5110 object connected to the specified pins
yangzhenye 0:ac2868313b41 195 *
yangzhenye 0:ac2868313b41 196 * @param pwr Pin connected to Vcc on the LCD display (pin 1)
yangzhenye 0:ac2868313b41 197 * @param sce Pin connected to chip enable (pin 3)
yangzhenye 0:ac2868313b41 198 * @param rst Pin connected to reset (pin 4)
yangzhenye 0:ac2868313b41 199 * @param dc Pin connected to data/command select (pin 5)
yangzhenye 0:ac2868313b41 200 * @param mosi Pin connected to data input (MOSI) (pin 6)
yangzhenye 0:ac2868313b41 201 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
yangzhenye 0:ac2868313b41 202 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
yangzhenye 0:ac2868313b41 203 *
yangzhenye 0:ac2868313b41 204 */
yangzhenye 0:ac2868313b41 205 N5110(PinName const pwrPin,
yangzhenye 0:ac2868313b41 206 PinName const scePin,
yangzhenye 0:ac2868313b41 207 PinName const rstPin,
yangzhenye 0:ac2868313b41 208 PinName const dcPin,
yangzhenye 0:ac2868313b41 209 PinName const mosiPin,
yangzhenye 0:ac2868313b41 210 PinName const sclkPin,
yangzhenye 0:ac2868313b41 211 PinName const ledPin);
yangzhenye 5:fcad75e9b9e1 212
yangzhenye 0:ac2868313b41 213 /** Create a N5110 object connected to the specified pins (Vcc to +3V3)
yangzhenye 0:ac2868313b41 214 *
yangzhenye 0:ac2868313b41 215 * @param sce Pin connected to chip enable (pin 3)
yangzhenye 0:ac2868313b41 216 * @param rst Pin connected to reset (pin 4)
yangzhenye 0:ac2868313b41 217 * @param dc Pin connected to data/command select (pin 5)
yangzhenye 0:ac2868313b41 218 * @param mosi Pin connected to data input (MOSI) (pin 6)
yangzhenye 0:ac2868313b41 219 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
yangzhenye 0:ac2868313b41 220 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
yangzhenye 0:ac2868313b41 221 *
yangzhenye 0:ac2868313b41 222 */
yangzhenye 0:ac2868313b41 223 N5110(PinName const scePin,
yangzhenye 0:ac2868313b41 224 PinName const rstPin,
yangzhenye 0:ac2868313b41 225 PinName const dcPin,
yangzhenye 0:ac2868313b41 226 PinName const mosiPin,
yangzhenye 0:ac2868313b41 227 PinName const sclkPin,
yangzhenye 0:ac2868313b41 228 PinName const ledPin);
yangzhenye 5:fcad75e9b9e1 229
yangzhenye 0:ac2868313b41 230 /**
yangzhenye 0:ac2868313b41 231 * Free allocated memory when object goes out of scope
yangzhenye 0:ac2868313b41 232 */
yangzhenye 0:ac2868313b41 233 ~N5110();
yangzhenye 5:fcad75e9b9e1 234
yangzhenye 0:ac2868313b41 235 /** Initialise display
yangzhenye 0:ac2868313b41 236 *
yangzhenye 0:ac2868313b41 237 * Powers up the display and turns on backlight (50% brightness default).
yangzhenye 0:ac2868313b41 238 * Sets the display up in horizontal addressing mode and with normal video mode.
yangzhenye 0:ac2868313b41 239 */
yangzhenye 0:ac2868313b41 240 void init();
yangzhenye 5:fcad75e9b9e1 241
yangzhenye 0:ac2868313b41 242 /** Turn off
yangzhenye 0:ac2868313b41 243 *
yangzhenye 0:ac2868313b41 244 * Powers down the display and turns of the backlight.
yangzhenye 0:ac2868313b41 245 * Needs to be reinitialised before being re-used.
yangzhenye 0:ac2868313b41 246 */
yangzhenye 0:ac2868313b41 247 void turnOff();
yangzhenye 5:fcad75e9b9e1 248
yangzhenye 0:ac2868313b41 249 /** Clear
yangzhenye 0:ac2868313b41 250 *
yangzhenye 0:ac2868313b41 251 * Clears the screen buffer.
yangzhenye 0:ac2868313b41 252 */
yangzhenye 0:ac2868313b41 253 void clear();
yangzhenye 5:fcad75e9b9e1 254
yangzhenye 5:fcad75e9b9e1 255 /** Set screen constrast
yangzhenye 5:fcad75e9b9e1 256 * @param constrast - float in range 0.0 to 1.0 (0.40 to 0.60 is usually a good value)
yangzhenye 5:fcad75e9b9e1 257 */
yangzhenye 5:fcad75e9b9e1 258 void setContrast(float contrast);
yangzhenye 5:fcad75e9b9e1 259
yangzhenye 0:ac2868313b41 260 /** Turn on normal video mode (default)
yangzhenye 0:ac2868313b41 261 * Black on white
yangzhenye 0:ac2868313b41 262 */
yangzhenye 0:ac2868313b41 263 void normalMode();
yangzhenye 5:fcad75e9b9e1 264
yangzhenye 0:ac2868313b41 265 /** Turn on inverse video mode (default)
yangzhenye 0:ac2868313b41 266 * White on black
yangzhenye 0:ac2868313b41 267 */
yangzhenye 0:ac2868313b41 268 void inverseMode();
yangzhenye 5:fcad75e9b9e1 269
yangzhenye 0:ac2868313b41 270 /** Set Brightness
yangzhenye 0:ac2868313b41 271 *
yangzhenye 0:ac2868313b41 272 * Sets brightness of LED backlight.
yangzhenye 0:ac2868313b41 273 * @param brightness - float in range 0.0 to 1.0
yangzhenye 0:ac2868313b41 274 */
yangzhenye 0:ac2868313b41 275 void setBrightness(float const brightness);
yangzhenye 5:fcad75e9b9e1 276
yangzhenye 0:ac2868313b41 277 /** Print String
yangzhenye 0:ac2868313b41 278 *
yangzhenye 0:ac2868313b41 279 * Prints a string of characters to the screen buffer. String is cut-off after the 83rd pixel.
yangzhenye 0:ac2868313b41 280 * @param x - the column number (0 to 83)
yangzhenye 0:ac2868313b41 281 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
yangzhenye 0:ac2868313b41 282 */
yangzhenye 0:ac2868313b41 283 void printString(char const *str,
yangzhenye 0:ac2868313b41 284 unsigned int const x,
yangzhenye 0:ac2868313b41 285 unsigned int const y);
yangzhenye 5:fcad75e9b9e1 286
yangzhenye 0:ac2868313b41 287 /** Print Character
yangzhenye 0:ac2868313b41 288 *
yangzhenye 0:ac2868313b41 289 * Sends a character to the screen buffer. Printed at the specified location. Character is cut-off after the 83rd pixel.
yangzhenye 0:ac2868313b41 290 * @param c - the character to print. Can print ASCII as so printChar('C').
yangzhenye 0:ac2868313b41 291 * @param x - the column number (0 to 83)
yangzhenye 0:ac2868313b41 292 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
yangzhenye 0:ac2868313b41 293 */
yangzhenye 0:ac2868313b41 294 void printChar(char const c,
yangzhenye 0:ac2868313b41 295 unsigned int const x,
yangzhenye 0:ac2868313b41 296 unsigned int const y);
yangzhenye 5:fcad75e9b9e1 297
yangzhenye 5:fcad75e9b9e1 298 /**
yangzhenye 5:fcad75e9b9e1 299 * @brief Set a Pixel
yangzhenye 0:ac2868313b41 300 *
yangzhenye 5:fcad75e9b9e1 301 * @param x The x co-ordinate of the pixel (0 to 83)
yangzhenye 5:fcad75e9b9e1 302 * @param y The y co-ordinate of the pixel (0 to 47)
yangzhenye 5:fcad75e9b9e1 303 * @param state The state of the pixel [true=black (default), false=white]
yangzhenye 5:fcad75e9b9e1 304 *
yangzhenye 5:fcad75e9b9e1 305 * @details This function sets the state of a pixel in the screen buffer.
yangzhenye 5:fcad75e9b9e1 306 * The third parameter can be omitted,
yangzhenye 0:ac2868313b41 307 */
yangzhenye 0:ac2868313b41 308 void setPixel(unsigned int const x,
yangzhenye 5:fcad75e9b9e1 309 unsigned int const y,
yangzhenye 5:fcad75e9b9e1 310 bool const state = true);
yangzhenye 5:fcad75e9b9e1 311
yangzhenye 5:fcad75e9b9e1 312 /**
yangzhenye 5:fcad75e9b9e1 313 * @brief Clear a Pixel
yangzhenye 0:ac2868313b41 314 *
yangzhenye 0:ac2868313b41 315 * @param x - the x co-ordinate of the pixel (0 to 83)
yangzhenye 0:ac2868313b41 316 * @param y - the y co-ordinate of the pixel (0 to 47)
yangzhenye 5:fcad75e9b9e1 317 *
yangzhenye 5:fcad75e9b9e1 318 * @details This function clears pixel in the screen buffer
yangzhenye 5:fcad75e9b9e1 319 *
yangzhenye 5:fcad75e9b9e1 320 * @deprecated Use setPixel(x, y, false) instead
yangzhenye 0:ac2868313b41 321 */
yangzhenye 0:ac2868313b41 322 void clearPixel(unsigned int const x,
yangzhenye 5:fcad75e9b9e1 323 unsigned int const y)
yangzhenye 5:fcad75e9b9e1 324 __attribute__((deprecated("Use setPixel(x,y,false) instead")));
yangzhenye 5:fcad75e9b9e1 325
yangzhenye 0:ac2868313b41 326 /** Get a Pixel
yangzhenye 0:ac2868313b41 327 *
yangzhenye 0:ac2868313b41 328 * This function gets the status of a pixel in the screen buffer.
yangzhenye 0:ac2868313b41 329 * @param x - the x co-ordinate of the pixel (0 to 83)
yangzhenye 0:ac2868313b41 330 * @param y - the y co-ordinate of the pixel (0 to 47)
yangzhenye 0:ac2868313b41 331 * @returns
yangzhenye 0:ac2868313b41 332 * 0 - pixel is clear
yangzhenye 0:ac2868313b41 333 * 1 - pixel is set
yangzhenye 0:ac2868313b41 334 */
yangzhenye 0:ac2868313b41 335 int getPixel(unsigned int const x,
yangzhenye 0:ac2868313b41 336 unsigned int const y) const;
yangzhenye 5:fcad75e9b9e1 337
yangzhenye 0:ac2868313b41 338 /** Refresh display
yangzhenye 0:ac2868313b41 339 *
yangzhenye 0:ac2868313b41 340 * This functions sends the screen buffer to the display.
yangzhenye 0:ac2868313b41 341 */
yangzhenye 0:ac2868313b41 342 void refresh();
yangzhenye 5:fcad75e9b9e1 343
yangzhenye 0:ac2868313b41 344 /** Randomise buffer
yangzhenye 0:ac2868313b41 345 *
yangzhenye 0:ac2868313b41 346 * This function fills the buffer with random data. Can be used to test the display.
yangzhenye 0:ac2868313b41 347 * A call to refresh() must be made to update the display to reflect the change in pixels.
yangzhenye 0:ac2868313b41 348 * The seed is not set and so the generated pattern will probably be the same each time.
yangzhenye 0:ac2868313b41 349 * TODO: Randomise the seed - maybe using the noise on the AnalogIn pins.
yangzhenye 0:ac2868313b41 350 */
yangzhenye 0:ac2868313b41 351 void randomiseBuffer();
yangzhenye 5:fcad75e9b9e1 352
yangzhenye 0:ac2868313b41 353 /** Plot Array
yangzhenye 0:ac2868313b41 354 *
yangzhenye 0:ac2868313b41 355 * This function plots a one-dimensional array in the buffer.
yangzhenye 0:ac2868313b41 356 * @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted.
yangzhenye 0:ac2868313b41 357 */
yangzhenye 0:ac2868313b41 358 void plotArray(float const array[]);
yangzhenye 5:fcad75e9b9e1 359
yangzhenye 0:ac2868313b41 360 /** Draw Circle
yangzhenye 0:ac2868313b41 361 *
yangzhenye 0:ac2868313b41 362 * This function draws a circle at the specified origin with specified radius in the screen buffer
yangzhenye 0:ac2868313b41 363 * Uses the midpoint circle algorithm.
yangzhenye 0:ac2868313b41 364 * @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
yangzhenye 0:ac2868313b41 365 * @param x0 - x-coordinate of centre
yangzhenye 0:ac2868313b41 366 * @param y0 - y-coordinate of centre
yangzhenye 0:ac2868313b41 367 * @param radius - radius of circle in pixels
yangzhenye 0:ac2868313b41 368 * @param fill - fill-type for the shape
yangzhenye 0:ac2868313b41 369 */
yangzhenye 0:ac2868313b41 370 void drawCircle(unsigned int const x0,
yangzhenye 0:ac2868313b41 371 unsigned int const y0,
yangzhenye 0:ac2868313b41 372 unsigned int const radius,
yangzhenye 0:ac2868313b41 373 FillType const fill);
yangzhenye 5:fcad75e9b9e1 374
yangzhenye 0:ac2868313b41 375 /** Draw Line
yangzhenye 0:ac2868313b41 376 *
yangzhenye 0:ac2868313b41 377 * This function draws a line between the specified points using linear interpolation.
yangzhenye 0:ac2868313b41 378 * @param x0 - x-coordinate of first point
yangzhenye 0:ac2868313b41 379 * @param y0 - y-coordinate of first point
yangzhenye 0:ac2868313b41 380 * @param x1 - x-coordinate of last point
yangzhenye 0:ac2868313b41 381 * @param y1 - y-coordinate of last point
yangzhenye 0:ac2868313b41 382 * @param type - 0 white,1 black,2 dotted
yangzhenye 0:ac2868313b41 383 */
yangzhenye 0:ac2868313b41 384 void drawLine(unsigned int const x0,
yangzhenye 0:ac2868313b41 385 unsigned int const y0,
yangzhenye 0:ac2868313b41 386 unsigned int const x1,
yangzhenye 0:ac2868313b41 387 unsigned int const y1,
yangzhenye 0:ac2868313b41 388 unsigned int const type);
yangzhenye 5:fcad75e9b9e1 389
yangzhenye 0:ac2868313b41 390 /** Draw Rectangle
yangzhenye 0:ac2868313b41 391 *
yangzhenye 0:ac2868313b41 392 * This function draws a rectangle.
yangzhenye 0:ac2868313b41 393 * @param x0 - x-coordinate of origin (top-left)
yangzhenye 0:ac2868313b41 394 * @param y0 - y-coordinate of origin (top-left)
yangzhenye 0:ac2868313b41 395 * @param width - width of rectangle
yangzhenye 0:ac2868313b41 396 * @param height - height of rectangle
yangzhenye 0:ac2868313b41 397 * @param fill - fill-type for the shape
yangzhenye 0:ac2868313b41 398 */
yangzhenye 0:ac2868313b41 399 void drawRect(unsigned int const x0,
yangzhenye 0:ac2868313b41 400 unsigned int const y0,
yangzhenye 0:ac2868313b41 401 unsigned int const width,
yangzhenye 0:ac2868313b41 402 unsigned int const height,
yangzhenye 0:ac2868313b41 403 FillType const fill);
yangzhenye 5:fcad75e9b9e1 404
yangzhenye 5:fcad75e9b9e1 405 /** Draw Sprite
yangzhenye 5:fcad75e9b9e1 406 *
yangzhenye 5:fcad75e9b9e1 407 * This function draws a sprite as defined in a 2D array
yangzhenye 5:fcad75e9b9e1 408 * @param x0 - x-coordinate of origin (top-left)
yangzhenye 5:fcad75e9b9e1 409 * @param y0 - y-coordinate of origin (top-left)
yangzhenye 5:fcad75e9b9e1 410 * @param nrows - number of rows in sprite
yangzhenye 5:fcad75e9b9e1 411 * @param ncols - number of columns in sprite
yangzhenye 5:fcad75e9b9e1 412 * @param sprite - 2D array representing the sprite
yangzhenye 5:fcad75e9b9e1 413 */
yangzhenye 5:fcad75e9b9e1 414 void drawSprite(int x0,
yangzhenye 5:fcad75e9b9e1 415 int y0,
yangzhenye 5:fcad75e9b9e1 416 int nrows,
yangzhenye 5:fcad75e9b9e1 417 int ncols,
yangzhenye 5:fcad75e9b9e1 418 int *sprite);
yangzhenye 5:fcad75e9b9e1 419
yangzhenye 5:fcad75e9b9e1 420
yangzhenye 0:ac2868313b41 421 private:
yangzhenye 0:ac2868313b41 422 // methods
yangzhenye 0:ac2868313b41 423 void setXYAddress(unsigned int const x,
yangzhenye 0:ac2868313b41 424 unsigned int const y);
yangzhenye 0:ac2868313b41 425 void initSPI();
yangzhenye 0:ac2868313b41 426 void turnOn();
yangzhenye 0:ac2868313b41 427 void reset();
yangzhenye 0:ac2868313b41 428 void clearRAM();
yangzhenye 0:ac2868313b41 429 void sendCommand(unsigned char command);
yangzhenye 0:ac2868313b41 430 void sendData(unsigned char data);
yangzhenye 5:fcad75e9b9e1 431 void setTempCoefficient(char tc); // 0 to 3
yangzhenye 5:fcad75e9b9e1 432 void setBias(char bias); // 0 to 7
yangzhenye 0:ac2868313b41 433 };
yangzhenye 5:fcad75e9b9e1 434
yangzhenye 0:ac2868313b41 435 const unsigned char font5x7[480] = {
yangzhenye 0:ac2868313b41 436 0x00, 0x00, 0x00, 0x00, 0x00,// (space)
yangzhenye 0:ac2868313b41 437 0x00, 0x00, 0x5F, 0x00, 0x00,// !
yangzhenye 0:ac2868313b41 438 0x00, 0x07, 0x00, 0x07, 0x00,// "
yangzhenye 0:ac2868313b41 439 0x14, 0x7F, 0x14, 0x7F, 0x14,// #
yangzhenye 0:ac2868313b41 440 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
yangzhenye 0:ac2868313b41 441 0x23, 0x13, 0x08, 0x64, 0x62,// %
yangzhenye 0:ac2868313b41 442 0x36, 0x49, 0x55, 0x22, 0x50,// &
yangzhenye 0:ac2868313b41 443 0x00, 0x05, 0x03, 0x00, 0x00,// '
yangzhenye 0:ac2868313b41 444 0x00, 0x1C, 0x22, 0x41, 0x00,// (
yangzhenye 0:ac2868313b41 445 0x00, 0x41, 0x22, 0x1C, 0x00,// )
yangzhenye 0:ac2868313b41 446 0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
yangzhenye 0:ac2868313b41 447 0x08, 0x08, 0x3E, 0x08, 0x08,// +
yangzhenye 0:ac2868313b41 448 0x00, 0x50, 0x30, 0x00, 0x00,// ,
yangzhenye 0:ac2868313b41 449 0x08, 0x08, 0x08, 0x08, 0x08,// -
yangzhenye 0:ac2868313b41 450 0x00, 0x60, 0x60, 0x00, 0x00,// .
yangzhenye 0:ac2868313b41 451 0x20, 0x10, 0x08, 0x04, 0x02,// /
yangzhenye 0:ac2868313b41 452 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
yangzhenye 0:ac2868313b41 453 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
yangzhenye 0:ac2868313b41 454 0x42, 0x61, 0x51, 0x49, 0x46,// 2
yangzhenye 0:ac2868313b41 455 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
yangzhenye 0:ac2868313b41 456 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
yangzhenye 0:ac2868313b41 457 0x27, 0x45, 0x45, 0x45, 0x39,// 5
yangzhenye 0:ac2868313b41 458 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
yangzhenye 0:ac2868313b41 459 0x01, 0x71, 0x09, 0x05, 0x03,// 7
yangzhenye 0:ac2868313b41 460 0x36, 0x49, 0x49, 0x49, 0x36,// 8
yangzhenye 0:ac2868313b41 461 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
yangzhenye 0:ac2868313b41 462 0x00, 0x36, 0x36, 0x00, 0x00,// :
yangzhenye 0:ac2868313b41 463 0x00, 0x56, 0x36, 0x00, 0x00,// ;
yangzhenye 0:ac2868313b41 464 0x00, 0x08, 0x14, 0x22, 0x41,// <
yangzhenye 0:ac2868313b41 465 0x14, 0x14, 0x14, 0x14, 0x14,// =
yangzhenye 0:ac2868313b41 466 0x41, 0x22, 0x14, 0x08, 0x00,// >
yangzhenye 0:ac2868313b41 467 0x02, 0x01, 0x51, 0x09, 0x06,// ?
yangzhenye 0:ac2868313b41 468 0x32, 0x49, 0x79, 0x41, 0x3E,// @
yangzhenye 0:ac2868313b41 469 0x7E, 0x11, 0x11, 0x11, 0x7E,// A
yangzhenye 0:ac2868313b41 470 0x7F, 0x49, 0x49, 0x49, 0x36,// B
yangzhenye 0:ac2868313b41 471 0x3E, 0x41, 0x41, 0x41, 0x22,// C
yangzhenye 0:ac2868313b41 472 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
yangzhenye 0:ac2868313b41 473 0x7F, 0x49, 0x49, 0x49, 0x41,// E
yangzhenye 0:ac2868313b41 474 0x7F, 0x09, 0x09, 0x01, 0x01,// F
yangzhenye 0:ac2868313b41 475 0x3E, 0x41, 0x41, 0x51, 0x32,// G
yangzhenye 0:ac2868313b41 476 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
yangzhenye 0:ac2868313b41 477 0x00, 0x41, 0x7F, 0x41, 0x00,// I
yangzhenye 0:ac2868313b41 478 0x20, 0x40, 0x41, 0x3F, 0x01,// J
yangzhenye 0:ac2868313b41 479 0x7F, 0x08, 0x14, 0x22, 0x41,// K
yangzhenye 0:ac2868313b41 480 0x7F, 0x40, 0x40, 0x40, 0x40,// L
yangzhenye 0:ac2868313b41 481 0x7F, 0x02, 0x04, 0x02, 0x7F,// M
yangzhenye 0:ac2868313b41 482 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
yangzhenye 0:ac2868313b41 483 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
yangzhenye 0:ac2868313b41 484 0x7F, 0x09, 0x09, 0x09, 0x06,// P
yangzhenye 0:ac2868313b41 485 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
yangzhenye 0:ac2868313b41 486 0x7F, 0x09, 0x19, 0x29, 0x46,// R
yangzhenye 0:ac2868313b41 487 0x46, 0x49, 0x49, 0x49, 0x31,// S
yangzhenye 0:ac2868313b41 488 0x01, 0x01, 0x7F, 0x01, 0x01,// T
yangzhenye 0:ac2868313b41 489 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
yangzhenye 0:ac2868313b41 490 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
yangzhenye 0:ac2868313b41 491 0x7F, 0x20, 0x18, 0x20, 0x7F,// W
yangzhenye 0:ac2868313b41 492 0x63, 0x14, 0x08, 0x14, 0x63,// X
yangzhenye 0:ac2868313b41 493 0x03, 0x04, 0x78, 0x04, 0x03,// Y
yangzhenye 0:ac2868313b41 494 0x61, 0x51, 0x49, 0x45, 0x43,// Z
yangzhenye 0:ac2868313b41 495 0x00, 0x00, 0x7F, 0x41, 0x41,// [
yangzhenye 0:ac2868313b41 496 0x02, 0x04, 0x08, 0x10, 0x20,// "\"
yangzhenye 0:ac2868313b41 497 0x41, 0x41, 0x7F, 0x00, 0x00,// ]
yangzhenye 0:ac2868313b41 498 0x04, 0x02, 0x01, 0x02, 0x04,// ^
yangzhenye 0:ac2868313b41 499 0x40, 0x40, 0x40, 0x40, 0x40,// _
yangzhenye 0:ac2868313b41 500 0x00, 0x01, 0x02, 0x04, 0x00,// `
yangzhenye 0:ac2868313b41 501 0x20, 0x54, 0x54, 0x54, 0x78,// a
yangzhenye 0:ac2868313b41 502 0x7F, 0x48, 0x44, 0x44, 0x38,// b
yangzhenye 0:ac2868313b41 503 0x38, 0x44, 0x44, 0x44, 0x20,// c
yangzhenye 0:ac2868313b41 504 0x38, 0x44, 0x44, 0x48, 0x7F,// d
yangzhenye 0:ac2868313b41 505 0x38, 0x54, 0x54, 0x54, 0x18,// e
yangzhenye 0:ac2868313b41 506 0x08, 0x7E, 0x09, 0x01, 0x02,// f
yangzhenye 0:ac2868313b41 507 0x08, 0x14, 0x54, 0x54, 0x3C,// g
yangzhenye 0:ac2868313b41 508 0x7F, 0x08, 0x04, 0x04, 0x78,// h
yangzhenye 0:ac2868313b41 509 0x00, 0x44, 0x7D, 0x40, 0x00,// i
yangzhenye 0:ac2868313b41 510 0x20, 0x40, 0x44, 0x3D, 0x00,// j
yangzhenye 0:ac2868313b41 511 0x00, 0x7F, 0x10, 0x28, 0x44,// k
yangzhenye 0:ac2868313b41 512 0x00, 0x41, 0x7F, 0x40, 0x00,// l
yangzhenye 0:ac2868313b41 513 0x7C, 0x04, 0x18, 0x04, 0x78,// m
yangzhenye 0:ac2868313b41 514 0x7C, 0x08, 0x04, 0x04, 0x78,// n
yangzhenye 0:ac2868313b41 515 0x38, 0x44, 0x44, 0x44, 0x38,// o
yangzhenye 0:ac2868313b41 516 0x7C, 0x14, 0x14, 0x14, 0x08,// p
yangzhenye 0:ac2868313b41 517 0x08, 0x14, 0x14, 0x18, 0x7C,// q
yangzhenye 0:ac2868313b41 518 0x7C, 0x08, 0x04, 0x04, 0x08,// r
yangzhenye 0:ac2868313b41 519 0x48, 0x54, 0x54, 0x54, 0x20,// s
yangzhenye 0:ac2868313b41 520 0x04, 0x3F, 0x44, 0x40, 0x20,// t
yangzhenye 0:ac2868313b41 521 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
yangzhenye 0:ac2868313b41 522 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
yangzhenye 0:ac2868313b41 523 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
yangzhenye 0:ac2868313b41 524 0x44, 0x28, 0x10, 0x28, 0x44,// x
yangzhenye 0:ac2868313b41 525 0x0C, 0x50, 0x50, 0x50, 0x3C,// y
yangzhenye 0:ac2868313b41 526 0x44, 0x64, 0x54, 0x4C, 0x44,// z
yangzhenye 0:ac2868313b41 527 0x00, 0x08, 0x36, 0x41, 0x00,// {
yangzhenye 0:ac2868313b41 528 0x00, 0x00, 0x7F, 0x00, 0x00,// |
yangzhenye 0:ac2868313b41 529 0x00, 0x41, 0x36, 0x08, 0x00,// }
yangzhenye 0:ac2868313b41 530 0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
yangzhenye 0:ac2868313b41 531 0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
yangzhenye 0:ac2868313b41 532 };
yangzhenye 5:fcad75e9b9e1 533
yangzhenye 5:fcad75e9b9e1 534 #endif
yangzhenye 5:fcad75e9b9e1 535