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