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.
Diff: N5110.h
- Revision:
- 50:bbb91c37f550
- Parent:
- 48:af12980ac515
--- a/N5110.h Mon Mar 19 13:44:23 2018 +0000 +++ b/N5110.h Mon May 06 09:54:02 2019 +0000 @@ -1,20 +1,20 @@ #ifndef N5110_H #define N5110_H - + #include "mbed.h" - + // number of pixels on display #define WIDTH 84 #define HEIGHT 48 #define BANKS 6 - + /// Fill types for 2D shapes enum FillType { FILL_TRANSPARENT, ///< Transparent with outline FILL_BLACK, ///< Filled black FILL_WHITE, ///< Filled white (no outline) }; - + /** N5110 Class @brief Library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed. @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). @@ -22,17 +22,17 @@ @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read. @brief The library can print primitive shapes (lines, circles, rectangles) @brief Acknowledgements to Chris Yan's Nokia_5110 Library. - + @brief Revision 1.3 - + @author Craig A. Evans @date 7th February 2017 - + @code - + #include "mbed.h" #include "N5110.h" - + // rows,cols int sprite[8][5] = { { 0,0,1,0,0 }, @@ -44,12 +44,12 @@ { 1,1,0,1,1 }, { 1,1,0,1,1 }, }; - + // VCC,SCE,RST,D/C,MOSI,SCLK,LED //N5110 lcd(p7,p8,p9,p10,p11,p13,p21); // LPC1768 - pwr from GPIO N5110 lcd(p8,p9,p10,p11,p13,p21); // LPC1768 - powered from +3V3 - JP1 in 2/3 position //N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3 - + int main() { // first need to initialise display @@ -58,23 +58,23 @@ // change set contrast in range 0.0 to 1.0 // 0.4 appears to be a good starting point lcd.setContrast(0.4); - + while(1) { - + // these are default settings so not strictly needed lcd.normalMode(); // normal colour mode lcd.setBrightness(0.5); // put LED backlight on 50% - + lcd.clear(); // x origin, y origin, rows, cols, sprite lcd.drawSprite(20,6,8,5,(int *)sprite); lcd.refresh(); wait(5.0); - + lcd.clear(); // clear buffer at start of every loop // can directly print strings at specified co-ordinates (must be less than 84 pixels to fit on display) lcd.printString("Hello, World!",0,0); - + char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) // so can display a string of a maximum 14 characters in length // or create formatted strings - ensure they aren't more than 14 characters long @@ -83,15 +83,15 @@ // it is important the format specifier ensures the length will fit in the buffer if (length <= 14) // if string will fit on display (assuming printing at x=0) lcd.printString(buffer,0,1); // display on screen - + float pressure = 1012.3; // same idea with floats length = sprintf(buffer,"P = %.2f mb",pressure); if (length <= 14) lcd.printString(buffer,0,2); - + // can also print individual characters at specified place lcd.printChar('X',5,3); - + // draw a line across the display at y = 40 pixels (origin top-left) for (int i = 0; i < WIDTH; i++) { lcd.setPixel(i,40,true); @@ -99,51 +99,51 @@ // need to refresh display after setting pixels or writing strings lcd.refresh(); wait(5.0); - + // can check status of pixel using getPixel(x,y); lcd.clear(); // clear buffer lcd.setPixel(2,2,true); // set random pixel in buffer lcd.refresh(); wait(1.0); - + int pixel_to_test = lcd.getPixel(2,2); - + if ( pixel_to_test ) { lcd.printString("2,2 is set",0,4); } - + // this one shouldn't be set lcd.setPixel(3,3,false); // clear random pixel in buffer lcd.refresh(); pixel_to_test = lcd.getPixel(3,3); - + if ( pixel_to_test == 0 ) { lcd.printString("3,3 is clear",0,5); } - + lcd.refresh(); wait(4.0); - + lcd.clear(); // clear buffer lcd.inverseMode(); // invert colours lcd.setBrightness(1.0); // put LED backlight on full - + float array[84]; - + for (int i = 0; i < 84; i++) { array[i] = 0.5 + 0.5*sin(i*2*3.14/84); } - + // can also plot graphs - 84 elements only // values must be in range 0.0 - 1.0 lcd.plotArray(array); lcd.refresh(); wait(5.0); - + lcd.clear(); lcd.normalMode(); // normal colour mode back lcd.setBrightness(0.5); // put LED backlight on 50% - + // example of drawing lines for (int x = 0; x < WIDTH ; x+=10) { // x0,y0,x1,y1,type 0-white,1-black,2-dotted @@ -151,8 +151,8 @@ } lcd.refresh(); // refresh after drawing shapes wait(5.0); - - + + lcd.clear(); // example of how to draw circles lcd.drawCircle(WIDTH/2,HEIGHT/2,20,FILL_BLACK); // x,y,radius,black fill @@ -160,7 +160,7 @@ lcd.drawCircle(WIDTH/2,HEIGHT/2,30,FILL_TRANSPARENT); // x,y,radius,transparent with outline lcd.refresh(); // refresh after drawing shapes wait(5.0); - + lcd.clear(); // example of how to draw rectangles // origin x,y,width,height,type @@ -169,11 +169,11 @@ lcd.drawRect(2,2,70,40,FILL_TRANSPARENT); // transparent, just outline lcd.refresh(); // refresh after drawing shapes wait(5.0); - + } } - - + + @endcode */ class N5110 @@ -186,10 +186,10 @@ DigitalOut *_sce; DigitalOut *_rst; DigitalOut *_dc; - + // variables unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits; - + public: /** Create a N5110 object connected to the specified pins * @@ -209,7 +209,7 @@ PinName const mosiPin, PinName const sclkPin, PinName const ledPin); - + /** Create a N5110 object connected to the specified pins (Vcc to +3V3) * * @param sce Pin connected to chip enable (pin 3) @@ -226,32 +226,32 @@ PinName const mosiPin, PinName const sclkPin, PinName const ledPin); - + /** * Free allocated memory when object goes out of scope */ ~N5110(); - + /** Initialise display * * Powers up the display and turns on backlight (50% brightness default). * Sets the display up in horizontal addressing mode and with normal video mode. */ void init(); - + /** Turn off * * Powers down the display and turns of the backlight. * Needs to be reinitialised before being re-used. */ void turnOff(); - + /** Clear * * Clears the screen buffer. */ void clear(); - + /** Set screen constrast * @param constrast - float in range 0.0 to 1.0 (0.40 to 0.60 is usually a good value) */ @@ -261,19 +261,19 @@ * Black on white */ void normalMode(); - + /** Turn on inverse video mode (default) * White on black */ void inverseMode(); - + /** Set Brightness * * Sets brightness of LED backlight. * @param brightness - float in range 0.0 to 1.0 */ void setBrightness(float const brightness); - + /** Print String * * Prints a string of characters to the screen buffer. String is cut-off after the 83rd pixel. @@ -283,7 +283,7 @@ void printString(char const *str, unsigned int const x, unsigned int const y); - + /** Print Character * * Sends a character to the screen buffer. Printed at the specified location. Character is cut-off after the 83rd pixel. @@ -294,7 +294,7 @@ void printChar(char const c, unsigned int const x, unsigned int const y); - + /** * @brief Set a Pixel * @@ -308,7 +308,7 @@ void setPixel(unsigned int const x, unsigned int const y, bool const state = true); - + /** * @brief Clear a Pixel * @@ -322,7 +322,7 @@ void clearPixel(unsigned int const x, unsigned int const y) __attribute__((deprecated("Use setPixel(x,y,false) instead"))); - + /** Get a Pixel * * This function gets the status of a pixel in the screen buffer. @@ -334,13 +334,13 @@ */ int getPixel(unsigned int const x, unsigned int const y) const; - + /** Refresh display * * This functions sends the screen buffer to the display. */ void refresh(); - + /** Randomise buffer * * This function fills the buffer with random data. Can be used to test the display. @@ -349,14 +349,14 @@ * TODO: Randomise the seed - maybe using the noise on the AnalogIn pins. */ void randomiseBuffer(); - + /** Plot Array * * This function plots a one-dimensional array in the buffer. * @param array[] - y values of the plot. Values should be normalised in the range 0.0 to 1.0. First 84 plotted. */ void plotArray(float const array[]); - + /** Draw Circle * * This function draws a circle at the specified origin with specified radius in the screen buffer @@ -371,7 +371,7 @@ unsigned int const y0, unsigned int const radius, FillType const fill); - + /** Draw Line * * This function draws a line between the specified points using linear interpolation. @@ -386,7 +386,7 @@ unsigned int const x1, unsigned int const y1, unsigned int const type); - + /** Draw Rectangle * * This function draws a rectangle. @@ -401,7 +401,7 @@ unsigned int const width, unsigned int const height, FillType const fill); - + /** Draw Sprite * * This function draws a sprite as defined in a 2D array @@ -416,8 +416,8 @@ int nrows, int ncols, int *sprite); - - + + private: // methods void setXYAddress(unsigned int const x, @@ -431,7 +431,7 @@ void setTempCoefficient(char tc); // 0 to 3 void setBias(char bias); // 0 to 7 }; - + const unsigned char font5x7[480] = { 0x00, 0x00, 0x00, 0x00, 0x00,// (space) 0x00, 0x00, 0x5F, 0x00, 0x00,// ! @@ -530,5 +530,5 @@ 0x08, 0x08, 0x2A, 0x1C, 0x08,// -> 0x08, 0x1C, 0x2A, 0x08, 0x08 // <- }; - + #endif \ No newline at end of file