Port of the Adafruit PCD8544 Driver @ https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library for use in MBED Inital version only supports hardware SPI, and has been tested on a Nucleo test board. BSD license

Requires http://developer.mbed.org/users/infotech1/code/Adafruit_GFX_MBED/ to provide drawing capabilities.

Revision:
0:4d2abaa4de64
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Adafruit_PCD8544.h	Sun Nov 02 07:10:44 2014 +0000
@@ -0,0 +1,111 @@
+/*********************************************************************
+This is a library for our Monochrome Nokia 5110 LCD Displays
+
+  Pick one up today in the adafruit shop!
+  ------> http://www.adafruit.com/products/338
+
+These displays use SPI to communicate, 4 or 5 pins are required to  
+interface
+
+Adafruit invests time and resources providing this open source code, 
+please support Adafruit and open-source hardware by purchasing 
+products from Adafruit!
+
+Written by Limor Fried/Ladyada  for Adafruit Industries.  
+BSD license, check license.txt for more information
+All text above, and the splash screen must be included in any redistribution
+
+Modified for MBED usage and tested with STM32F411RE on a Nucleo board.
+Hardware SPI only, tested using default arduino pin out D11/D13 for MOSI/SCLK, Support provided for different pin layouts
+by James Kidd 2014
+*********************************************************************/
+#include <stdint.h>
+#include <stdbool.h>
+#include "Adafruit_GFX.h"
+#include "mbed.h"
+#ifndef _ADAFRUIT_PCD8544_H
+#define _ADAFRUIT_PCD8544_H
+
+#define LCD_SPI_MODE 0x01
+#define LCD_SPI_BITS 0x08
+
+// Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
+// This can be modified to change the clock speed if necessary (like for supporting other hardware).
+#define LCD_FREQ 400000
+#define PIN_RST  0x00
+#define PIN_SCE  0x01
+#define PIN_DC   0x02
+struct AdaLcdPins
+{
+    PinName mosi;
+    PinName miso;
+    PinName sclk;
+    PinName dc;
+    PinName sce;
+    PinName rst;
+};
+
+#define BLACK 1
+#define WHITE 0
+
+
+#define LCDWIDTH 84
+#define LCDHEIGHT 48
+
+#define PCD8544_POWERDOWN 0x04
+#define PCD8544_ENTRYMODE 0x02
+#define PCD8544_EXTENDEDINSTRUCTION 0x01
+
+#define PCD8544_DISPLAYBLANK 0x0
+#define PCD8544_DISPLAYNORMAL 0x4
+#define PCD8544_DISPLAYALLON 0x1
+#define PCD8544_DISPLAYINVERTED 0x5
+
+// H = 0
+#define PCD8544_FUNCTIONSET 0x20
+#define PCD8544_DISPLAYCONTROL 0x08
+#define PCD8544_SETYADDR 0x40
+#define PCD8544_SETXADDR 0x80
+
+// H = 1
+#define PCD8544_SETTEMP 0x04
+#define PCD8544_SETBIAS 0x10
+#define PCD8544_SETVOP 0x80
+
+// Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
+// This can be modified to change the clock speed if necessary (like for supporting other hardware).
+//#define PCD8544_SPI_CLOCK_DIV SPI_CLOCK_DIV4
+
+class Adafruit_PCD8544 : public Adafruit_GFX {
+ public:
+  // Hardware SPI based on hardware controlled SCK (SCLK)13 and MOSI (DIN)11 pins. CS is still controlled by any IO pin.
+  // NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
+  Adafruit_PCD8544(PinName DC, PinName CS, PinName RST);
+  //Untested choose clk/mosi pins
+  Adafruit_PCD8544(PinName DC, PinName CS, PinName RST,PinName MOSI,PinName SCLK);
+
+  void begin(uint8_t contrast = 40, uint8_t bias = 0x04);
+  
+  void command(uint8_t c);
+  void data(uint8_t c);
+  
+  void setContrast(uint8_t val);
+  void clearDisplay(void);
+  void display();
+  
+  void drawPixel(int16_t x, int16_t y, uint16_t color);
+  uint8_t getPixel(int8_t x, int8_t y);
+
+ private:
+    AdaLcdPins myPins;
+  int8_t _din, _sclk, _dc, _rst, _cs;
+  volatile uint8_t *mosiport, *clkport;
+  uint8_t mosipinmask, clkpinmask;
+
+  SPI* LcdSPI;
+  DigitalOut** Pins;
+  void spiWrite(uint8_t c);
+  bool isHardwareSPI();
+};
+
+#endif