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:
- 24:342bdb6679a1
- Parent:
- 23:eb7e6632fc9e
- Child:
- 25:444e55e2e419
--- a/N5110.h Wed Feb 01 16:26:22 2017 +0000
+++ b/N5110.h Tue Feb 07 10:21:43 2017 +0000
@@ -2,6 +2,143 @@
@file N5110.h
@brief Header file containing member functions and variables
+@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).
+@brief Can print characters and strings to the display using the included 5x7 font.
+@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"
+
+// VCC,SCE,RST,D/C,MOSI,SCLK,LED
+//N5110 lcd(p7,p8,p9,p10,p11,p13,p21); // LPC1768 - pwr from GPIO
+N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); // K64F - pwr from 3V3
+
+int main()
+{
+ // first need to initialise display
+ lcd.init();
+
+ 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(); // 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
+ int temperature = 27;
+ int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
+ // 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);
+ }
+ // 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); // set random pixel in buffer
+ lcd.refresh();
+ wait(1.0);
+
+ int pixel_to_test = lcd.getPixel(2,2);
+
+ printf("2,2 Pixel value = %i\n",pixel_to_test);
+
+ if ( pixel_to_test ) {
+ lcd.printString("2,2 is set",0,4);
+ }
+
+ // this one shouldn't be set
+ pixel_to_test = lcd.getPixel(3,3);
+
+ printf("3,3 Pixel value = %i\n",pixel_to_test);
+
+ 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
+ lcd.drawLine(0,0,x,HEIGHT,2);
+ }
+ lcd.refresh(); // refresh after drawing shapes
+ wait(5.0);
+
+
+ lcd.clear();
+ // example of how to draw circles
+ lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill
+ lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill
+ lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // 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
+ lcd.drawRect(10,10,50,30,1); // filled black rectangle
+ lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline)
+ lcd.drawRect(2,2,70,40,0); // transparent, just outline
+ lcd.refresh(); // refresh after drawing shapes
+ wait(5.0);
+
+ }
+}
+
+@endcode
*/
@@ -39,125 +176,6 @@
#include "mbed.h"
-/**
-@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).
-@brief Can print characters and strings to the display using the included 5x7 font.
-@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.2
-
-@author Craig A. Evans
-@date 17th March 2015
-*
-* Example:
-* @code
-
-#include "mbed.h"
-#include "N5110.h"
-
-// VCC,SCE,RST,D/C,MOSI,SCLK,LED
-N5110 lcd(p7,p8,p9,p10,p11,p13,p21);
-// Can also power (VCC) directly from VOUT (3.3 V) -
-// Can give better performance due to current limitation from GPIO pin
-
-int main()
-{
-// first need to initialise display
-lcd.init();
-
-while(1) {
-
- // these are default settings so not strictly needed
- lcd.normalMode(); // normal colour mode
- lcd.setBrightness(0.5); // put LED backlight on 50%
-
- // can directly print strings at specified co-ordinates
- 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
- int temperature = 27;
- int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
- // it is important the format specifier ensures the length will fit in the buffer
- if (length <= 14) // if string will fit on display
- 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);
- }
- // need to refresh display after setting pixels
- lcd.refresh();
-
- // can also check status of pixels using getPixel(x,y)
-
- wait(5.0);
- lcd.clear(); // clear display
- 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);
- 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
- lcd.drawLine(0,0,x,HEIGHT,2);
- }
- lcd.refresh(); // need to refresh screen after drawing lines
-
- wait(5.0);
- lcd.clear();
-
- // example of how to draw circles
- lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill
- lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill
- lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // x,y,radius,transparent with outline
- lcd.refresh(); // need to refresh screen after drawing circles
-
- wait(5.0);
- lcd.clear();
-
- // example of how to draw rectangles
- // origin x,y,width,height,type
- lcd.drawRect(10,10,50,30,1); // filled black rectangle
- lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline)
- lcd.drawRect(2,2,70,40,0); // transparent, just outline
- lcd.refresh(); // need to refresh screen after drawing rects
-
-
- wait(5.0);
- lcd.clear();
-
-}
-}
-
-
-* @endcode
-*/
class N5110
{
@@ -201,9 +219,9 @@
*/
void turnOff();
-/** Clears
+/** Clear
*
-* Clears the screen.
+* Clears the screen buffer.
*/
void clear();
@@ -226,7 +244,7 @@
/** Print String
*
-* Prints a string of characters to the display. String is cut-off after the 83rd pixel.
+* Prints a string of characters to the screen buffer. String is cut-off after the 83rd pixel.
* @param x - the column number (0 to 83)
* @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
*/
@@ -234,7 +252,7 @@
/** Print Character
*
-* Sends a character to the display. Printed at the specified location. Character is cut-off after the 83rd pixel.
+* Sends a character to the screen buffer. Printed at the specified location. Character is cut-off after the 83rd pixel.
* @param c - the character to print. Can print ASCII as so printChar('C').
* @param x - the column number (0 to 83)
* @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
@@ -243,8 +261,7 @@
/** Set a Pixel
*
-* This function sets a pixel in the display. A call to refresh() must be made
-* to update the display to reflect the change in pixels.
+* This function sets a pixel in the screen buffer.
* @param x - the x co-ordinate of the pixel (0 to 83)
* @param y - the y co-ordinate of the pixel (0 to 47)
*/
@@ -252,8 +269,7 @@
/** Clear a Pixel
*
-* This function clears pixel in the display. A call to refresh() must be made
-* to update the display to reflect the change in pixels.
+* This function clears pixel in the screen buffer
* @param x - the x co-ordinate of the pixel (0 to 83)
* @param y - the y co-ordinate of the pixel (0 to 47)
*/
@@ -261,18 +277,18 @@
/** Get a Pixel
*
-* This function gets the status of a pixel in the display.
+* This function gets the status of a pixel in the screen buffer.
* @param x - the x co-ordinate of the pixel (0 to 83)
* @param y - the y co-ordinate of the pixel (0 to 47)
* @returns
* 0 - pixel is clear
-* non-zero - pixel is set
+* 1 - pixel is set
*/
int getPixel(int x, int y);
/** Refresh display
*
-* This functions refreshes the display to reflect the current data in the buffer.
+* This functions sends the screen buffer to the display.
*/
void refresh();
@@ -287,14 +303,14 @@
/** Plot Array
*
-* This function plots a one-dimensional array on the display.
+* 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 array[]);
/** Draw Circle
*
-* This function draws a circle at the specified origin with specified radius to the display.
+* This function draws a circle at the specified origin with specified radius in the screen buffer
* Uses the midpoint circle algorithm.
* @see http://en.wikipedia.org/wiki/Midpoint_circle_algorithm
* @param x0 - x-coordinate of centre
@@ -326,22 +342,9 @@
*/
void drawRect(int x0,int y0,int width,int height,int fill);
-
private:
-void setXYAddress(int x, int y);
-void initSPI();
-void turnOn();
-void reset();
-void clearRAM();
-void clearBuffer();
-void sendCommand(unsigned char command);
-void sendData(unsigned char data);
-
-public:
-
-private: // private variables
-unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
+// objects
SPI* spi;
PwmOut* led;
DigitalOut* pwr;
@@ -349,6 +352,18 @@
DigitalOut* rst;
DigitalOut* dc;
+// methods
+void setXYAddress(int x, int y);
+void initSPI();
+void turnOn();
+void reset();
+void clearRAM();
+void sendCommand(unsigned char command);
+void sendData(unsigned char data);
+
+// variables
+unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
+
};
const unsigned char font5x7[480] = {