Simple library for interfacing to Nokia 5110 LCD display (as found on the SparkFun website). Edited to include additional feaatures, such as 2d array loading, multiple screen buffers, and better backlight control

Dependencies:   N5110

Dependents:   Main_code_ver18

Fork of N5110 by Craig Evans

Committer:
eencae
Date:
Sun Jan 26 19:30:09 2014 +0000
Revision:
1:df68f34cd32d
Parent:
0:d563e74f0ae9
Child:
2:e93021cfb0a9
Started to add documentation.  This commit is to test the publishing and documentation.

Who changed what in which revision?

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