Library for interfacing to Nokia 5110 LCD display (as found on the SparkFun website).

Dependents:   LV7_LCDtest LV7_Grupa5_Tim003_Zadatak1 lv7_Grupa5_Tim008_zad1 LV7_PAI_Grupa5_tim10_Zadatak1 ... more

This library is designed to make it easy to interface an mbed with a Nokia 5110 LCD display.

These can be found at Sparkfun (https://www.sparkfun.com/products/10168) and Adafruit (http://www.adafruit.com/product/338).

The library uses the SPI peripheral on the mbed which means it is much faster sending data to the display than other libraries available on other platforms that use software SPI.

The library can print strings as well as controlling individual pixels, meaning that both text and primitive graphics can be displayed.

Committer:
eencae
Date:
Sun Jan 26 20:18:45 2014 +0000
Revision:
5:6ea180eef702
Parent:
4:e923c54c1c7d
Child:
6:adb79338d40f
Updated docs.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eencae 1:df68f34cd32d 1 /**
eencae 2:e93021cfb0a9 2 @file N5110.h
eencae 1:df68f34cd32d 3
eencae 5:6ea180eef702 4 @brief Header file containing member functions and variables
eencae 4:e923c54c1c7d 5
eencae 0:d563e74f0ae9 6 */
eencae 0:d563e74f0ae9 7
eencae 0:d563e74f0ae9 8 #ifndef N5110_H
eencae 0:d563e74f0ae9 9 #define N5110_H
eencae 0:d563e74f0ae9 10
eencae 0:d563e74f0ae9 11 // Command Bytes - taken from Chris Yan's library
eencae 2:e93021cfb0a9 12 // More information can be found in the display datasheet
eencae 2:e93021cfb0a9 13 // H = 0 - Basic instructions
eencae 0:d563e74f0ae9 14 #define CMD_DC_CLEAR_DISPLAY 0x08
eencae 0:d563e74f0ae9 15 #define CMD_DC_NORMAL_MODE 0x0C
eencae 0:d563e74f0ae9 16 #define CMD_DC_FILL_DISPLAY 0x09
eencae 0:d563e74f0ae9 17 #define CMD_DC_INVERT_VIDEO 0x0D
eencae 0:d563e74f0ae9 18 #define CMD_FS_HORIZONTAL_MODE 0x00
eencae 0:d563e74f0ae9 19 #define CMD_FS_VERTICAL_MODE 0x02
eencae 0:d563e74f0ae9 20 #define CMD_FS_BASIC_MODE 0x00
eencae 0:d563e74f0ae9 21 #define CMD_FS_EXTENDED_MODE 0x01
eencae 0:d563e74f0ae9 22 #define CMD_FS_ACTIVE_MODE 0x00
eencae 0:d563e74f0ae9 23 #define CMD_FS_POWER_DOWN_MODE 0x04
eencae 2:e93021cfb0a9 24 // H = 1 - Extended instructions
eencae 0:d563e74f0ae9 25 #define CMD_TC_TEMP_0 0x04
eencae 0:d563e74f0ae9 26 #define CMD_TC_TEMP_1 0x05
eencae 0:d563e74f0ae9 27 #define CMD_TC_TEMP_2 0x06
eencae 0:d563e74f0ae9 28 #define CMD_TC_TEMP_3 0x07
eencae 0:d563e74f0ae9 29 #define CMD_BI_MUX_24 0x15
eencae 0:d563e74f0ae9 30 #define CMD_BI_MUX_48 0x13
eencae 0:d563e74f0ae9 31 #define CMD_BI_MUX_100 0x10
eencae 0:d563e74f0ae9 32 #define CMD_VOP_6V06 0xB2
eencae 0:d563e74f0ae9 33 #define CMD_VOP_7V38 0xC8
eencae 0:d563e74f0ae9 34
eencae 0:d563e74f0ae9 35 #include "mbed.h"
eencae 0:d563e74f0ae9 36
eencae 5:6ea180eef702 37 /**
eencae 5:6ea180eef702 38 @brief Simple library for interfacing with Nokia 5110 LCD display (https://www.sparkfun.com/products/10168) using the hardware SPI on the mbed.
eencae 5:6ea180eef702 39 @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).
eencae 5:6ea180eef702 40 @brief Can print characters and strings to the display using the included 5x7 font.
eencae 5:6ea180eef702 41 @brief The library also implements a screen buffer so that individual pixels on the display (84 x 48) can be set, cleared and read.
eencae 5:6ea180eef702 42
eencae 5:6ea180eef702 43 @brief Acknowledgements to Chris Yan's Nokia_5110 Library.
eencae 5:6ea180eef702 44
eencae 5:6ea180eef702 45 @brief Revision 1.0
eencae 5:6ea180eef702 46
eencae 5:6ea180eef702 47 @author Craig A. Evans
eencae 5:6ea180eef702 48 @date January 2014
eencae 2:e93021cfb0a9 49 *
eencae 2:e93021cfb0a9 50 * Example:
eencae 2:e93021cfb0a9 51 * @code
eencae 2:e93021cfb0a9 52 *
eencae 2:e93021cfb0a9 53 * @endcode
eencae 2:e93021cfb0a9 54 */
eencae 1:df68f34cd32d 55 class N5110
eencae 1:df68f34cd32d 56 {
eencae 0:d563e74f0ae9 57
eencae 1:df68f34cd32d 58 public:
eencae 1:df68f34cd32d 59 /** Create a N5110 object connected to the specified pins
eencae 1:df68f34cd32d 60 *
eencae 1:df68f34cd32d 61 * @param pwr Pin connected to Vcc on the LCD display (pin 1)
eencae 1:df68f34cd32d 62 * @param sce Pin connected to chip enable (pin 3)
eencae 1:df68f34cd32d 63 * @param rst Pin connected to reset (pin 4)
eencae 1:df68f34cd32d 64 * @param dc Pin connected to data/command select (pin 5)
eencae 1:df68f34cd32d 65 * @param mosi Pin connected to data input (MOSI) (pin 6)
eencae 1:df68f34cd32d 66 * @param sclk Pin connected to serial clock (SCLK) (pin 7)
eencae 1:df68f34cd32d 67 * @param led Pin connected to LED backlight (must be PWM) (pin 8)
eencae 1:df68f34cd32d 68 *
eencae 1:df68f34cd32d 69 */
eencae 1:df68f34cd32d 70 N5110(PinName pwrPin, PinName scePin, PinName rstPin, PinName dcPin, PinName mosiPin, PinName sclkPin, PinName ledPin);
eencae 1:df68f34cd32d 71
eencae 1:df68f34cd32d 72 /** Initialise display
eencae 1:df68f34cd32d 73 *
eencae 1:df68f34cd32d 74 * Powers up the display and turns on backlight (50% brightness default).
eencae 1:df68f34cd32d 75 * Sets the display up in horizontal addressing mode and with normal video mode.
eencae 1:df68f34cd32d 76 */
eencae 1:df68f34cd32d 77 void init();
eencae 1:df68f34cd32d 78
eencae 1:df68f34cd32d 79 /** Turn off
eencae 1:df68f34cd32d 80 *
eencae 1:df68f34cd32d 81 * Powers down the display and turns of the backlight.
eencae 1:df68f34cd32d 82 * Needs to be reinitialised before being re-used.
eencae 1:df68f34cd32d 83 */
eencae 1:df68f34cd32d 84 void turnOff();
eencae 1:df68f34cd32d 85
eencae 1:df68f34cd32d 86 /** Clears
eencae 1:df68f34cd32d 87 *
eencae 1:df68f34cd32d 88 * Clears the screen.
eencae 1:df68f34cd32d 89 */
eencae 1:df68f34cd32d 90 void clear();
eencae 1:df68f34cd32d 91
eencae 1:df68f34cd32d 92 /** Turn on normal video mode (default)
eencae 1:df68f34cd32d 93 * Black on white
eencae 1:df68f34cd32d 94 */
eencae 1:df68f34cd32d 95 void normalMode();
eencae 1:df68f34cd32d 96
eencae 1:df68f34cd32d 97 /** Turn on inverse video mode (default)
eencae 1:df68f34cd32d 98 * White on black
eencae 1:df68f34cd32d 99 */
eencae 1:df68f34cd32d 100 void inverseMode();
eencae 1:df68f34cd32d 101
eencae 1:df68f34cd32d 102 /** Set Brightness
eencae 1:df68f34cd32d 103 *
eencae 1:df68f34cd32d 104 * Sets brightness of LED backlight.
eencae 1:df68f34cd32d 105 * @param brightness - float in range 0.0 to 1.0
eencae 1:df68f34cd32d 106 */
eencae 1:df68f34cd32d 107 void setBrightness(float brightness);
eencae 1:df68f34cd32d 108
eencae 1:df68f34cd32d 109 /** Set XY Address
eencae 1:df68f34cd32d 110 *
eencae 1:df68f34cd32d 111 * Sets the X and Y address of where the next data sent to the displa will be written in RAM.
eencae 1:df68f34cd32d 112 * @param x - the column number (0 to 83) - is automatically incremented after data is written
eencae 2:e93021cfb0a9 113 * @param y - the row number (0 to 5) - the diplay is split into 6 banks - each bank can be considered a row
eencae 1:df68f34cd32d 114 */
eencae 1:df68f34cd32d 115 void setXYAddress(int x, int y);
eencae 1:df68f34cd32d 116
eencae 2:e93021cfb0a9 117 /** Print String
eencae 2:e93021cfb0a9 118 *
eencae 2:e93021cfb0a9 119 * Prints a string of characters to the display.
eencae 2:e93021cfb0a9 120 * @param x - the column number (0 to 83)
eencae 2:e93021cfb0a9 121 * @param y - the row number (0 to 5) - the display is split into 6 banks - each bank can be considered a row
eencae 2:e93021cfb0a9 122 */
eencae 1:df68f34cd32d 123 void printString(const char * str,int x,int y);
eencae 1:df68f34cd32d 124
eencae 1:df68f34cd32d 125 /** Print Character
eencae 1:df68f34cd32d 126 *
eencae 1:df68f34cd32d 127 * Sends a character to the display. Will be printed at the current address.
eencae 1:df68f34cd32d 128 * X address is autoincremented by 1 to leave a pixel between successive characters
eencae 1:df68f34cd32d 129 * @param c - the character to print. Can print ASCII as so printChar('C').
eencae 1:df68f34cd32d 130 */
eencae 1:df68f34cd32d 131 void printChar(char c);
eencae 1:df68f34cd32d 132
eencae 1:df68f34cd32d 133 void setPixel(int x, int y);
eencae 1:df68f34cd32d 134 void clearPixel(int x, int y);
eencae 1:df68f34cd32d 135 unsigned char getPixel(int x, int y);
eencae 2:e93021cfb0a9 136
eencae 2:e93021cfb0a9 137
eencae 1:df68f34cd32d 138 void refreshDisplay();
eencae 1:df68f34cd32d 139 void clearBuffer();
eencae 1:df68f34cd32d 140 void randomiseBuffer();
eencae 1:df68f34cd32d 141
eencae 1:df68f34cd32d 142 private:
eencae 1:df68f34cd32d 143 void initSPI();
eencae 1:df68f34cd32d 144 void turnOn();
eencae 1:df68f34cd32d 145 void reset();
eencae 1:df68f34cd32d 146 void clearRAM();
eencae 1:df68f34cd32d 147 void sendCommand(unsigned char command);
eencae 1:df68f34cd32d 148 void sendData(unsigned char data);
eencae 1:df68f34cd32d 149
eencae 1:df68f34cd32d 150 public:
eencae 1:df68f34cd32d 151 unsigned char buffer[84][6]; // screen buffer - the 6 is for the banks - each one is 8 bits;
eencae 1:df68f34cd32d 152
eencae 1:df68f34cd32d 153 private: // private variables
eencae 1:df68f34cd32d 154 SPI* spi;
eencae 1:df68f34cd32d 155 PwmOut* led;
eencae 1:df68f34cd32d 156 DigitalOut* pwr;
eencae 1:df68f34cd32d 157 DigitalOut* sce;
eencae 1:df68f34cd32d 158 DigitalOut* rst;
eencae 1:df68f34cd32d 159 DigitalOut* dc;
eencae 0:d563e74f0ae9 160
eencae 0:d563e74f0ae9 161 };
eencae 0:d563e74f0ae9 162
eencae 0:d563e74f0ae9 163 const unsigned char font5x7[480] = {
eencae 0:d563e74f0ae9 164 0x00, 0x00, 0x00, 0x00, 0x00,// (space)
eencae 0:d563e74f0ae9 165 0x00, 0x00, 0x5F, 0x00, 0x00,// !
eencae 0:d563e74f0ae9 166 0x00, 0x07, 0x00, 0x07, 0x00,// "
eencae 0:d563e74f0ae9 167 0x14, 0x7F, 0x14, 0x7F, 0x14,// #
eencae 0:d563e74f0ae9 168 0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
eencae 0:d563e74f0ae9 169 0x23, 0x13, 0x08, 0x64, 0x62,// %
eencae 0:d563e74f0ae9 170 0x36, 0x49, 0x55, 0x22, 0x50,// &
eencae 0:d563e74f0ae9 171 0x00, 0x05, 0x03, 0x00, 0x00,// '
eencae 0:d563e74f0ae9 172 0x00, 0x1C, 0x22, 0x41, 0x00,// (
eencae 0:d563e74f0ae9 173 0x00, 0x41, 0x22, 0x1C, 0x00,// )
eencae 0:d563e74f0ae9 174 0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
eencae 0:d563e74f0ae9 175 0x08, 0x08, 0x3E, 0x08, 0x08,// +
eencae 0:d563e74f0ae9 176 0x00, 0x50, 0x30, 0x00, 0x00,// ,
eencae 0:d563e74f0ae9 177 0x08, 0x08, 0x08, 0x08, 0x08,// -
eencae 0:d563e74f0ae9 178 0x00, 0x60, 0x60, 0x00, 0x00,// .
eencae 0:d563e74f0ae9 179 0x20, 0x10, 0x08, 0x04, 0x02,// /
eencae 0:d563e74f0ae9 180 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
eencae 0:d563e74f0ae9 181 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
eencae 0:d563e74f0ae9 182 0x42, 0x61, 0x51, 0x49, 0x46,// 2
eencae 0:d563e74f0ae9 183 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
eencae 0:d563e74f0ae9 184 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
eencae 0:d563e74f0ae9 185 0x27, 0x45, 0x45, 0x45, 0x39,// 5
eencae 0:d563e74f0ae9 186 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
eencae 0:d563e74f0ae9 187 0x01, 0x71, 0x09, 0x05, 0x03,// 7
eencae 0:d563e74f0ae9 188 0x36, 0x49, 0x49, 0x49, 0x36,// 8
eencae 0:d563e74f0ae9 189 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
eencae 0:d563e74f0ae9 190 0x00, 0x36, 0x36, 0x00, 0x00,// :
eencae 0:d563e74f0ae9 191 0x00, 0x56, 0x36, 0x00, 0x00,// ;
eencae 0:d563e74f0ae9 192 0x00, 0x08, 0x14, 0x22, 0x41,// <
eencae 0:d563e74f0ae9 193 0x14, 0x14, 0x14, 0x14, 0x14,// =
eencae 0:d563e74f0ae9 194 0x41, 0x22, 0x14, 0x08, 0x00,// >
eencae 0:d563e74f0ae9 195 0x02, 0x01, 0x51, 0x09, 0x06,// ?
eencae 0:d563e74f0ae9 196 0x32, 0x49, 0x79, 0x41, 0x3E,// @
eencae 0:d563e74f0ae9 197 0x7E, 0x11, 0x11, 0x11, 0x7E,// A
eencae 0:d563e74f0ae9 198 0x7F, 0x49, 0x49, 0x49, 0x36,// B
eencae 0:d563e74f0ae9 199 0x3E, 0x41, 0x41, 0x41, 0x22,// C
eencae 0:d563e74f0ae9 200 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
eencae 0:d563e74f0ae9 201 0x7F, 0x49, 0x49, 0x49, 0x41,// E
eencae 0:d563e74f0ae9 202 0x7F, 0x09, 0x09, 0x01, 0x01,// F
eencae 0:d563e74f0ae9 203 0x3E, 0x41, 0x41, 0x51, 0x32,// G
eencae 0:d563e74f0ae9 204 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
eencae 0:d563e74f0ae9 205 0x00, 0x41, 0x7F, 0x41, 0x00,// I
eencae 0:d563e74f0ae9 206 0x20, 0x40, 0x41, 0x3F, 0x01,// J
eencae 0:d563e74f0ae9 207 0x7F, 0x08, 0x14, 0x22, 0x41,// K
eencae 0:d563e74f0ae9 208 0x7F, 0x40, 0x40, 0x40, 0x40,// L
eencae 0:d563e74f0ae9 209 0x7F, 0x02, 0x04, 0x02, 0x7F,// M
eencae 0:d563e74f0ae9 210 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
eencae 0:d563e74f0ae9 211 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
eencae 0:d563e74f0ae9 212 0x7F, 0x09, 0x09, 0x09, 0x06,// P
eencae 0:d563e74f0ae9 213 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
eencae 0:d563e74f0ae9 214 0x7F, 0x09, 0x19, 0x29, 0x46,// R
eencae 0:d563e74f0ae9 215 0x46, 0x49, 0x49, 0x49, 0x31,// S
eencae 0:d563e74f0ae9 216 0x01, 0x01, 0x7F, 0x01, 0x01,// T
eencae 0:d563e74f0ae9 217 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
eencae 0:d563e74f0ae9 218 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
eencae 0:d563e74f0ae9 219 0x7F, 0x20, 0x18, 0x20, 0x7F,// W
eencae 0:d563e74f0ae9 220 0x63, 0x14, 0x08, 0x14, 0x63,// X
eencae 0:d563e74f0ae9 221 0x03, 0x04, 0x78, 0x04, 0x03,// Y
eencae 0:d563e74f0ae9 222 0x61, 0x51, 0x49, 0x45, 0x43,// Z
eencae 0:d563e74f0ae9 223 0x00, 0x00, 0x7F, 0x41, 0x41,// [
eencae 0:d563e74f0ae9 224 0x02, 0x04, 0x08, 0x10, 0x20,// "\"
eencae 0:d563e74f0ae9 225 0x41, 0x41, 0x7F, 0x00, 0x00,// ]
eencae 0:d563e74f0ae9 226 0x04, 0x02, 0x01, 0x02, 0x04,// ^
eencae 0:d563e74f0ae9 227 0x40, 0x40, 0x40, 0x40, 0x40,// _
eencae 0:d563e74f0ae9 228 0x00, 0x01, 0x02, 0x04, 0x00,// `
eencae 0:d563e74f0ae9 229 0x20, 0x54, 0x54, 0x54, 0x78,// a
eencae 0:d563e74f0ae9 230 0x7F, 0x48, 0x44, 0x44, 0x38,// b
eencae 0:d563e74f0ae9 231 0x38, 0x44, 0x44, 0x44, 0x20,// c
eencae 0:d563e74f0ae9 232 0x38, 0x44, 0x44, 0x48, 0x7F,// d
eencae 0:d563e74f0ae9 233 0x38, 0x54, 0x54, 0x54, 0x18,// e
eencae 0:d563e74f0ae9 234 0x08, 0x7E, 0x09, 0x01, 0x02,// f
eencae 0:d563e74f0ae9 235 0x08, 0x14, 0x54, 0x54, 0x3C,// g
eencae 0:d563e74f0ae9 236 0x7F, 0x08, 0x04, 0x04, 0x78,// h
eencae 0:d563e74f0ae9 237 0x00, 0x44, 0x7D, 0x40, 0x00,// i
eencae 0:d563e74f0ae9 238 0x20, 0x40, 0x44, 0x3D, 0x00,// j
eencae 0:d563e74f0ae9 239 0x00, 0x7F, 0x10, 0x28, 0x44,// k
eencae 0:d563e74f0ae9 240 0x00, 0x41, 0x7F, 0x40, 0x00,// l
eencae 0:d563e74f0ae9 241 0x7C, 0x04, 0x18, 0x04, 0x78,// m
eencae 0:d563e74f0ae9 242 0x7C, 0x08, 0x04, 0x04, 0x78,// n
eencae 0:d563e74f0ae9 243 0x38, 0x44, 0x44, 0x44, 0x38,// o
eencae 0:d563e74f0ae9 244 0x7C, 0x14, 0x14, 0x14, 0x08,// p
eencae 0:d563e74f0ae9 245 0x08, 0x14, 0x14, 0x18, 0x7C,// q
eencae 0:d563e74f0ae9 246 0x7C, 0x08, 0x04, 0x04, 0x08,// r
eencae 0:d563e74f0ae9 247 0x48, 0x54, 0x54, 0x54, 0x20,// s
eencae 0:d563e74f0ae9 248 0x04, 0x3F, 0x44, 0x40, 0x20,// t
eencae 0:d563e74f0ae9 249 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
eencae 0:d563e74f0ae9 250 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
eencae 0:d563e74f0ae9 251 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
eencae 0:d563e74f0ae9 252 0x44, 0x28, 0x10, 0x28, 0x44,// x
eencae 0:d563e74f0ae9 253 0x0C, 0x50, 0x50, 0x50, 0x3C,// y
eencae 0:d563e74f0ae9 254 0x44, 0x64, 0x54, 0x4C, 0x44,// z
eencae 0:d563e74f0ae9 255 0x00, 0x08, 0x36, 0x41, 0x00,// {
eencae 0:d563e74f0ae9 256 0x00, 0x00, 0x7F, 0x00, 0x00,// |
eencae 0:d563e74f0ae9 257 0x00, 0x41, 0x36, 0x08, 0x00,// }
eencae 0:d563e74f0ae9 258 0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
eencae 0:d563e74f0ae9 259 0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
eencae 0:d563e74f0ae9 260 };
eencae 0:d563e74f0ae9 261
eencae 0:d563e74f0ae9 262 #endif