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.
Fork of N5110 by
N5110.h
00001 /** 00002 @file N5110.h 00003 00004 @brief Header file containing member functions and variables 00005 00006 */ 00007 00008 #ifndef N5110_H 00009 #define N5110_H 00010 00011 // Command Bytes - taken from Chris Yan's library 00012 // More information can be found in the display datasheet 00013 // H = 0 - Basic instructions 00014 #define CMD_DC_CLEAR_DISPLAY 0x08 00015 #define CMD_DC_NORMAL_MODE 0x0C 00016 #define CMD_DC_FILL_DISPLAY 0x09 00017 #define CMD_DC_INVERT_VIDEO 0x0D 00018 #define CMD_FS_HORIZONTAL_MODE 0x00 00019 #define CMD_FS_VERTICAL_MODE 0x02 00020 #define CMD_FS_BASIC_MODE 0x00 00021 #define CMD_FS_EXTENDED_MODE 0x01 00022 #define CMD_FS_ACTIVE_MODE 0x00 00023 #define CMD_FS_POWER_DOWN_MODE 0x04 00024 // H = 1 - Extended instructions 00025 #define CMD_TC_TEMP_0 0x04 00026 #define CMD_TC_TEMP_1 0x05 00027 #define CMD_TC_TEMP_2 0x06 00028 #define CMD_TC_TEMP_3 0x07 00029 #define CMD_BI_MUX_24 0x15 00030 #define CMD_BI_MUX_48 0x13 00031 #define CMD_BI_MUX_100 0x10 00032 #define CMD_VOP_6V06 0xB2 00033 #define CMD_VOP_7V38 0xC8 00034 00035 // number of pixels on display 00036 #define WIDTH 84 00037 #define HEIGHT 48 00038 #define BANKS 6 00039 00040 #include "mbed.h" 00041 00042 /** 00043 @brief Library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed. 00044 @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). 00045 @brief Can print characters and strings to the display using the included 5x7 font. 00046 @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read. 00047 @brief The library can print primitive shapes (lines, circles, rectangles) 00048 @brief Acknowledgements to Chris Yan's Nokia_5110 Library. 00049 00050 @brief Revision 1.2 00051 00052 @author Craig A. Evans 00053 @date 17th March 2015 00054 * 00055 * Example: 00056 * @code 00057 00058 #include "mbed.h" 00059 #include "N5110.h" 00060 00061 // VCC,SCE,RST,D/C,MOSI,SCLK,LED 00062 N5110 lcd(p7,p8,p9,p10,p11,p13,p21); 00063 // Can also power (VCC) directly from VOUT (3.3 V) - 00064 // Can give better performance due to current limitation from GPIO pin 00065 00066 int main() 00067 { 00068 // first need to initialise display 00069 lcd.init(); 00070 00071 while(1) { 00072 00073 // these are default settings so not strictly needed 00074 lcd.normalMode(); // normal colour mode 00075 lcd.setBrightness(0.5); // put LED backlight on 50% 00076 00077 // can directly print strings at specified co-ordinates 00078 lcd.printString("Hello, World!",0,0); 00079 00080 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) 00081 // so can display a string of a maximum 14 characters in length 00082 // or create formatted strings - ensure they aren't more than 14 characters long 00083 int temperature = 27; 00084 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer 00085 // it is important the format specifier ensures the length will fit in the buffer 00086 if (length <= 14) // if string will fit on display 00087 lcd.printString(buffer,0,1); // display on screen 00088 00089 float pressure = 1012.3; // same idea with floats 00090 length = sprintf(buffer,"P = %.2f mb",pressure); 00091 if (length <= 14) 00092 lcd.printString(buffer,0,2); 00093 00094 // can also print individual characters at specified place 00095 lcd.printChar('X',5,3); 00096 00097 // draw a line across the display at y = 40 pixels (origin top-left) 00098 for (int i = 0; i < WIDTH; i++) { 00099 lcd.setPixel(i,40); 00100 } 00101 // need to refresh display after setting pixels 00102 lcd.refresh(); 00103 00104 // can also check status of pixels using getPixel(x,y) 00105 00106 wait(5.0); 00107 lcd.clear(); // clear display 00108 lcd.inverseMode(); // invert colours 00109 lcd.setBrightness(1.0); // put LED backlight on full 00110 00111 float array[84]; 00112 00113 for (int i = 0; i < 84; i++) { 00114 array[i] = 0.5 + 0.5*sin(i*2*3.14/84); 00115 } 00116 00117 // can also plot graphs - 84 elements only 00118 // values must be in range 0.0 - 1.0 00119 lcd.plotArray(array); 00120 wait(5.0); 00121 lcd.clear(); 00122 lcd.normalMode(); // normal colour mode back 00123 lcd.setBrightness(0.5); // put LED backlight on 50% 00124 00125 // example of drawing lines 00126 for (int x = 0; x < WIDTH ; x+=10) { 00127 // x0,y0,x1,y1,type 0-white,1-black,2-dotted 00128 lcd.drawLine(0,0,x,HEIGHT,2); 00129 } 00130 lcd.refresh(); // need to refresh screen after drawing lines 00131 00132 wait(5.0); 00133 lcd.clear(); 00134 00135 // example of how to draw circles 00136 lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill 00137 lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill 00138 lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // x,y,radius,transparent with outline 00139 lcd.refresh(); // need to refresh screen after drawing circles 00140 00141 wait(5.0); 00142 lcd.clear(); 00143 00144 // example of how to draw rectangles 00145 // origin x,y,width,height,type 00146 lcd.drawRect(10,10,50,30,1); // filled black rectangle 00147 lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline) 00148 lcd.drawRect(2,2,70,40,0); // transparent, just outline 00149 lcd.refresh(); // need to refresh screen after drawing rects 00150 00151 00152 wait(5.0); 00153 lcd.clear(); 00154 00155 } 00156 } 00157 00158 00159 * @endcode 00160 */ 00161 class N5110 00162 { 00163 00164 public: 00165 /** Create a N5110 object connected to the specified pins 00166 * 00167 * @param pwr Pin connected to Vcc on the LCD display (pin 1) 00168 * @param sce Pin connected to chip enable (pin 3) 00169 * @param rst Pin connected to reset (pin 4) 00170 * @param dc Pin connected to data/command select (pin 5) 00171 * @param mosi Pin connected to data input (MOSI) (pin 6) 00172 * @param sclk Pin connected to serial clock (SCLK) (pin 7) 00173 * @param led Pin connected to LED backlight (must be PWM) (pin 8) 00174 * 00175 */ 00176 N5110(PinName pwrPin, PinName scePin, PinName rstPin, PinName dcPin, PinName mosiPin, PinName sclkPin, PinName ledPin); 00177 00178 /** Initialise display 00179 * 00180 * Powers up the display and turns on backlight (50% brightness default). 00181 * Sets the display up in horizontal addressing mode and with normal video mode. 00182 */ 00183 void init(); 00184 00185 /** Turn off 00186 * 00187 * Powers down the display and turns of the backlight. 00188 * Needs to be reinitialised before being re-used. 00189 */ 00190 void turnOff(); 00191 00192 /** Clears 00193 * 00194 * Clears the screen. 00195 */ 00196 void clear(); 00197 00198 /** Turn on normal video mode (default) 00199 * Black on white 00200 */ 00201 void normalMode(); 00202 00203 /** Turn on inverse video mode (default) 00204 * White on black 00205 */ 00206 void inverseMode(); 00207 00208 /** Set Brightness 00209 * 00210 * Sets brightness of LED backlight. 00211 * @param brightness - float in range 0.0 to 1.0 00212 */ 00213 void setBrightness(float brightness); 00214 00215 /** Print String 00216 * 00217 * Prints a string of characters to the display. String is cut-off after the 83rd pixel. 00218 * @param x - the column number (0 to 83) 00219 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row 00220 */ 00221 void printString(const char * str,int x,int y); 00222 00223 /** Print Character 00224 * 00225 * Sends a character to the display. Printed at the specified location. Character is cut-off after the 83rd pixel. 00226 * @param c - the character to print. Can print ASCII as so printChar('C'). 00227 * @param x - the column number (0 to 83) 00228 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row 00229 */ 00230 void printChar(char c,int x,int y); 00231 00232 /** Set a Pixel 00233 * 00234 * This function sets a pixel in the display. A call to refresh() must be made 00235 * to update the display to reflect the change in pixels. 00236 * @param x - the x co-ordinate of the pixel (0 to 83) 00237 * @param y - the y co-ordinate of the pixel (0 to 47) 00238 */ 00239 void setPixel(int x, int y); 00240 00241 /** Clear a Pixel 00242 * 00243 * This function clears pixel in the display. A call to refresh() must be made 00244 * to update the display to reflect the change in pixels. 00245 * @param x - the x co-ordinate of the pixel (0 to 83) 00246 * @param y - the y co-ordinate of the pixel (0 to 47) 00247 */ 00248 void clearPixel(int x, int y); 00249 00250 /** Get a Pixel 00251 * 00252 * This function gets the status of a pixel in the display. 00253 * @param x - the x co-ordinate of the pixel (0 to 83) 00254 * @param y - the y co-ordinate of the pixel (0 to 47) 00255 * @returns 00256 * 0 - pixel is clear 00257 * non-zero - pixel is set 00258 */ 00259 int getPixel(int x, int y); 00260 00261 /** Refresh display 00262 * 00263 * This functions refreshes the display to reflect the current data in the buffer. 00264 */ 00265 void refresh(); 00266 00267 /** Randomise buffer 00268 * 00269 * This function fills the buffer with random data. Can be used to test the display. 00270 * A call to refresh() must be made to update the display to reflect the change in pixels. 00271 * The seed is not set and so the generated pattern will probably be the same each time. 00272 * TODO: Randomise the seed - maybe using the noise on the AnalogIn pins. 00273 */ 00274 void randomiseBuffer(); 00275 00276 /** Plot Array 00277 * 00278 * This function plots a one-dimensional array on the display. 00279 * @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted. 00280 */ 00281 void plotArray(float array[]); 00282 00283 /** Draw Circle 00284 * 00285 * This function draws a circle at the specified origin with specified radius to the display. 00286 * Uses the midpoint circle algorithm. 00287 * @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm 00288 * @param x0 - x-coordinate of centre 00289 * @param y0 - y-coordinate of centre 00290 * @param radius - radius of circle in pixels 00291 * @param fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline) 00292 */ 00293 void drawCircle(int x0,int y0,int radius,int fill); 00294 00295 /** Draw Line 00296 * 00297 * This function draws a line between the specified points using linear interpolation. 00298 * @param x0 - x-coordinate of first point 00299 * @param y0 - y-coordinate of first point 00300 * @param x1 - x-coordinate of last point 00301 * @param y1 - y-coordinate of last point 00302 * @param type - 0 white,1 black,2 dotted 00303 */ 00304 void drawLine(int x0,int y0,int x1,int y1,int type); 00305 00306 /** Draw Rectangle 00307 * 00308 * This function draws a rectangle. 00309 * @param x0 - x-coordinate of origin (top-left) 00310 * @param y0 - y-coordinate of origin (top-left) 00311 * @param width - width of rectangle 00312 * @param height - height of rectangle 00313 * @param fill - 0 transparent (w/outline), 1 filled black, 2 filled white (wo/outline) 00314 */ 00315 void drawRect(int x0,int y0,int width,int height,int fill); 00316 00317 00318 private: 00319 00320 void setXYAddress(int x, int y); 00321 void initSPI(); 00322 void turnOn(); 00323 void reset(); 00324 void clearRAM(); 00325 void clearBuffer(); 00326 void sendCommand(unsigned char command); 00327 void sendData(unsigned char data); 00328 00329 public: 00330 unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits; 00331 00332 private: // private variables 00333 SPI* spi; 00334 PwmOut* led; 00335 DigitalOut* pwr; 00336 DigitalOut* sce; 00337 DigitalOut* rst; 00338 DigitalOut* dc; 00339 00340 }; 00341 00342 const unsigned char font5x7[480] = { 00343 0x00, 0x00, 0x00, 0x00, 0x00,// (space) 00344 0x00, 0x00, 0x5F, 0x00, 0x00,// ! 00345 0x00, 0x07, 0x00, 0x07, 0x00,// " 00346 0x14, 0x7F, 0x14, 0x7F, 0x14,// # 00347 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $ 00348 0x23, 0x13, 0x08, 0x64, 0x62,// % 00349 0x36, 0x49, 0x55, 0x22, 0x50,// & 00350 0x00, 0x05, 0x03, 0x00, 0x00,// ' 00351 0x00, 0x1C, 0x22, 0x41, 0x00,// ( 00352 0x00, 0x41, 0x22, 0x1C, 0x00,// ) 00353 0x08, 0x2A, 0x1C, 0x2A, 0x08,// * 00354 0x08, 0x08, 0x3E, 0x08, 0x08,// + 00355 0x00, 0x50, 0x30, 0x00, 0x00,// , 00356 0x08, 0x08, 0x08, 0x08, 0x08,// - 00357 0x00, 0x60, 0x60, 0x00, 0x00,// . 00358 0x20, 0x10, 0x08, 0x04, 0x02,// / 00359 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 00360 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 00361 0x42, 0x61, 0x51, 0x49, 0x46,// 2 00362 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 00363 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 00364 0x27, 0x45, 0x45, 0x45, 0x39,// 5 00365 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 00366 0x01, 0x71, 0x09, 0x05, 0x03,// 7 00367 0x36, 0x49, 0x49, 0x49, 0x36,// 8 00368 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 00369 0x00, 0x36, 0x36, 0x00, 0x00,// : 00370 0x00, 0x56, 0x36, 0x00, 0x00,// ; 00371 0x00, 0x08, 0x14, 0x22, 0x41,// < 00372 0x14, 0x14, 0x14, 0x14, 0x14,// = 00373 0x41, 0x22, 0x14, 0x08, 0x00,// > 00374 0x02, 0x01, 0x51, 0x09, 0x06,// ? 00375 0x32, 0x49, 0x79, 0x41, 0x3E,// @ 00376 0x7E, 0x11, 0x11, 0x11, 0x7E,// A 00377 0x7F, 0x49, 0x49, 0x49, 0x36,// B 00378 0x3E, 0x41, 0x41, 0x41, 0x22,// C 00379 0x7F, 0x41, 0x41, 0x22, 0x1C,// D 00380 0x7F, 0x49, 0x49, 0x49, 0x41,// E 00381 0x7F, 0x09, 0x09, 0x01, 0x01,// F 00382 0x3E, 0x41, 0x41, 0x51, 0x32,// G 00383 0x7F, 0x08, 0x08, 0x08, 0x7F,// H 00384 0x00, 0x41, 0x7F, 0x41, 0x00,// I 00385 0x20, 0x40, 0x41, 0x3F, 0x01,// J 00386 0x7F, 0x08, 0x14, 0x22, 0x41,// K 00387 0x7F, 0x40, 0x40, 0x40, 0x40,// L 00388 0x7F, 0x02, 0x04, 0x02, 0x7F,// M 00389 0x7F, 0x04, 0x08, 0x10, 0x7F,// N 00390 0x3E, 0x41, 0x41, 0x41, 0x3E,// O 00391 0x7F, 0x09, 0x09, 0x09, 0x06,// P 00392 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q 00393 0x7F, 0x09, 0x19, 0x29, 0x46,// R 00394 0x46, 0x49, 0x49, 0x49, 0x31,// S 00395 0x01, 0x01, 0x7F, 0x01, 0x01,// T 00396 0x3F, 0x40, 0x40, 0x40, 0x3F,// U 00397 0x1F, 0x20, 0x40, 0x20, 0x1F,// V 00398 0x7F, 0x20, 0x18, 0x20, 0x7F,// W 00399 0x63, 0x14, 0x08, 0x14, 0x63,// X 00400 0x03, 0x04, 0x78, 0x04, 0x03,// Y 00401 0x61, 0x51, 0x49, 0x45, 0x43,// Z 00402 0x00, 0x00, 0x7F, 0x41, 0x41,// [ 00403 0x02, 0x04, 0x08, 0x10, 0x20,// "\" 00404 0x41, 0x41, 0x7F, 0x00, 0x00,// ] 00405 0x04, 0x02, 0x01, 0x02, 0x04,// ^ 00406 0x40, 0x40, 0x40, 0x40, 0x40,// _ 00407 0x00, 0x01, 0x02, 0x04, 0x00,// ` 00408 0x20, 0x54, 0x54, 0x54, 0x78,// a 00409 0x7F, 0x48, 0x44, 0x44, 0x38,// b 00410 0x38, 0x44, 0x44, 0x44, 0x20,// c 00411 0x38, 0x44, 0x44, 0x48, 0x7F,// d 00412 0x38, 0x54, 0x54, 0x54, 0x18,// e 00413 0x08, 0x7E, 0x09, 0x01, 0x02,// f 00414 0x08, 0x14, 0x54, 0x54, 0x3C,// g 00415 0x7F, 0x08, 0x04, 0x04, 0x78,// h 00416 0x00, 0x44, 0x7D, 0x40, 0x00,// i 00417 0x20, 0x40, 0x44, 0x3D, 0x00,// j 00418 0x00, 0x7F, 0x10, 0x28, 0x44,// k 00419 0x00, 0x41, 0x7F, 0x40, 0x00,// l 00420 0x7C, 0x04, 0x18, 0x04, 0x78,// m 00421 0x7C, 0x08, 0x04, 0x04, 0x78,// n 00422 0x38, 0x44, 0x44, 0x44, 0x38,// o 00423 0x7C, 0x14, 0x14, 0x14, 0x08,// p 00424 0x08, 0x14, 0x14, 0x18, 0x7C,// q 00425 0x7C, 0x08, 0x04, 0x04, 0x08,// r 00426 0x48, 0x54, 0x54, 0x54, 0x20,// s 00427 0x04, 0x3F, 0x44, 0x40, 0x20,// t 00428 0x3C, 0x40, 0x40, 0x20, 0x7C,// u 00429 0x1C, 0x20, 0x40, 0x20, 0x1C,// v 00430 0x3C, 0x40, 0x30, 0x40, 0x3C,// w 00431 0x44, 0x28, 0x10, 0x28, 0x44,// x 00432 0x0C, 0x50, 0x50, 0x50, 0x3C,// y 00433 0x44, 0x64, 0x54, 0x4C, 0x44,// z 00434 0x00, 0x08, 0x36, 0x41, 0x00,// { 00435 0x00, 0x00, 0x7F, 0x00, 0x00,// | 00436 0x00, 0x41, 0x36, 0x08, 0x00,// } 00437 0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 00438 0x08, 0x1C, 0x2A, 0x08, 0x08 // <- 00439 }; 00440 00441 #endif
Generated on Sat Jul 16 2022 21:35:30 by
