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.

Committer:
infotech1
Date:
Sun Nov 02 07:10:44 2014 +0000
Revision:
0:4d2abaa4de64
Initial commit, Hardware SPI only.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
infotech1 0:4d2abaa4de64 1 /*********************************************************************
infotech1 0:4d2abaa4de64 2 This is a library for our Monochrome Nokia 5110 LCD Displays
infotech1 0:4d2abaa4de64 3
infotech1 0:4d2abaa4de64 4 Pick one up today in the adafruit shop!
infotech1 0:4d2abaa4de64 5 ------> http://www.adafruit.com/products/338
infotech1 0:4d2abaa4de64 6
infotech1 0:4d2abaa4de64 7 These displays use SPI to communicate, 4 or 5 pins are required to
infotech1 0:4d2abaa4de64 8 interface
infotech1 0:4d2abaa4de64 9
infotech1 0:4d2abaa4de64 10 Adafruit invests time and resources providing this open source code,
infotech1 0:4d2abaa4de64 11 please support Adafruit and open-source hardware by purchasing
infotech1 0:4d2abaa4de64 12 products from Adafruit!
infotech1 0:4d2abaa4de64 13
infotech1 0:4d2abaa4de64 14 Written by Limor Fried/Ladyada for Adafruit Industries.
infotech1 0:4d2abaa4de64 15 BSD license, check license.txt for more information
infotech1 0:4d2abaa4de64 16 All text above, and the splash screen must be included in any redistribution
infotech1 0:4d2abaa4de64 17
infotech1 0:4d2abaa4de64 18 Modified for MBED usage and tested with STM32F411RE on a Nucleo board.
infotech1 0:4d2abaa4de64 19 Hardware SPI only, tested using default arduino pin out D11/D13 for MOSI/SCLK, Support provided for different pin layouts
infotech1 0:4d2abaa4de64 20 by James Kidd 2014
infotech1 0:4d2abaa4de64 21 *********************************************************************/
infotech1 0:4d2abaa4de64 22 #include <stdint.h>
infotech1 0:4d2abaa4de64 23 #include <stdbool.h>
infotech1 0:4d2abaa4de64 24 #include "Adafruit_GFX.h"
infotech1 0:4d2abaa4de64 25 #include "mbed.h"
infotech1 0:4d2abaa4de64 26 #ifndef _ADAFRUIT_PCD8544_H
infotech1 0:4d2abaa4de64 27 #define _ADAFRUIT_PCD8544_H
infotech1 0:4d2abaa4de64 28
infotech1 0:4d2abaa4de64 29 #define LCD_SPI_MODE 0x01
infotech1 0:4d2abaa4de64 30 #define LCD_SPI_BITS 0x08
infotech1 0:4d2abaa4de64 31
infotech1 0:4d2abaa4de64 32 // Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
infotech1 0:4d2abaa4de64 33 // This can be modified to change the clock speed if necessary (like for supporting other hardware).
infotech1 0:4d2abaa4de64 34 #define LCD_FREQ 400000
infotech1 0:4d2abaa4de64 35 #define PIN_RST 0x00
infotech1 0:4d2abaa4de64 36 #define PIN_SCE 0x01
infotech1 0:4d2abaa4de64 37 #define PIN_DC 0x02
infotech1 0:4d2abaa4de64 38 struct AdaLcdPins
infotech1 0:4d2abaa4de64 39 {
infotech1 0:4d2abaa4de64 40 PinName mosi;
infotech1 0:4d2abaa4de64 41 PinName miso;
infotech1 0:4d2abaa4de64 42 PinName sclk;
infotech1 0:4d2abaa4de64 43 PinName dc;
infotech1 0:4d2abaa4de64 44 PinName sce;
infotech1 0:4d2abaa4de64 45 PinName rst;
infotech1 0:4d2abaa4de64 46 };
infotech1 0:4d2abaa4de64 47
infotech1 0:4d2abaa4de64 48 #define BLACK 1
infotech1 0:4d2abaa4de64 49 #define WHITE 0
infotech1 0:4d2abaa4de64 50
infotech1 0:4d2abaa4de64 51
infotech1 0:4d2abaa4de64 52 #define LCDWIDTH 84
infotech1 0:4d2abaa4de64 53 #define LCDHEIGHT 48
infotech1 0:4d2abaa4de64 54
infotech1 0:4d2abaa4de64 55 #define PCD8544_POWERDOWN 0x04
infotech1 0:4d2abaa4de64 56 #define PCD8544_ENTRYMODE 0x02
infotech1 0:4d2abaa4de64 57 #define PCD8544_EXTENDEDINSTRUCTION 0x01
infotech1 0:4d2abaa4de64 58
infotech1 0:4d2abaa4de64 59 #define PCD8544_DISPLAYBLANK 0x0
infotech1 0:4d2abaa4de64 60 #define PCD8544_DISPLAYNORMAL 0x4
infotech1 0:4d2abaa4de64 61 #define PCD8544_DISPLAYALLON 0x1
infotech1 0:4d2abaa4de64 62 #define PCD8544_DISPLAYINVERTED 0x5
infotech1 0:4d2abaa4de64 63
infotech1 0:4d2abaa4de64 64 // H = 0
infotech1 0:4d2abaa4de64 65 #define PCD8544_FUNCTIONSET 0x20
infotech1 0:4d2abaa4de64 66 #define PCD8544_DISPLAYCONTROL 0x08
infotech1 0:4d2abaa4de64 67 #define PCD8544_SETYADDR 0x40
infotech1 0:4d2abaa4de64 68 #define PCD8544_SETXADDR 0x80
infotech1 0:4d2abaa4de64 69
infotech1 0:4d2abaa4de64 70 // H = 1
infotech1 0:4d2abaa4de64 71 #define PCD8544_SETTEMP 0x04
infotech1 0:4d2abaa4de64 72 #define PCD8544_SETBIAS 0x10
infotech1 0:4d2abaa4de64 73 #define PCD8544_SETVOP 0x80
infotech1 0:4d2abaa4de64 74
infotech1 0:4d2abaa4de64 75 // Default to max SPI clock speed for PCD8544 of 4 mhz (16mhz / 4) for normal Arduinos.
infotech1 0:4d2abaa4de64 76 // This can be modified to change the clock speed if necessary (like for supporting other hardware).
infotech1 0:4d2abaa4de64 77 //#define PCD8544_SPI_CLOCK_DIV SPI_CLOCK_DIV4
infotech1 0:4d2abaa4de64 78
infotech1 0:4d2abaa4de64 79 class Adafruit_PCD8544 : public Adafruit_GFX {
infotech1 0:4d2abaa4de64 80 public:
infotech1 0:4d2abaa4de64 81 // Hardware SPI based on hardware controlled SCK (SCLK)13 and MOSI (DIN)11 pins. CS is still controlled by any IO pin.
infotech1 0:4d2abaa4de64 82 // NOTE: MISO and SS will be set as an input and output respectively, so be careful sharing those pins!
infotech1 0:4d2abaa4de64 83 Adafruit_PCD8544(PinName DC, PinName CS, PinName RST);
infotech1 0:4d2abaa4de64 84 //Untested choose clk/mosi pins
infotech1 0:4d2abaa4de64 85 Adafruit_PCD8544(PinName DC, PinName CS, PinName RST,PinName MOSI,PinName SCLK);
infotech1 0:4d2abaa4de64 86
infotech1 0:4d2abaa4de64 87 void begin(uint8_t contrast = 40, uint8_t bias = 0x04);
infotech1 0:4d2abaa4de64 88
infotech1 0:4d2abaa4de64 89 void command(uint8_t c);
infotech1 0:4d2abaa4de64 90 void data(uint8_t c);
infotech1 0:4d2abaa4de64 91
infotech1 0:4d2abaa4de64 92 void setContrast(uint8_t val);
infotech1 0:4d2abaa4de64 93 void clearDisplay(void);
infotech1 0:4d2abaa4de64 94 void display();
infotech1 0:4d2abaa4de64 95
infotech1 0:4d2abaa4de64 96 void drawPixel(int16_t x, int16_t y, uint16_t color);
infotech1 0:4d2abaa4de64 97 uint8_t getPixel(int8_t x, int8_t y);
infotech1 0:4d2abaa4de64 98
infotech1 0:4d2abaa4de64 99 private:
infotech1 0:4d2abaa4de64 100 AdaLcdPins myPins;
infotech1 0:4d2abaa4de64 101 int8_t _din, _sclk, _dc, _rst, _cs;
infotech1 0:4d2abaa4de64 102 volatile uint8_t *mosiport, *clkport;
infotech1 0:4d2abaa4de64 103 uint8_t mosipinmask, clkpinmask;
infotech1 0:4d2abaa4de64 104
infotech1 0:4d2abaa4de64 105 SPI* LcdSPI;
infotech1 0:4d2abaa4de64 106 DigitalOut** Pins;
infotech1 0:4d2abaa4de64 107 void spiWrite(uint8_t c);
infotech1 0:4d2abaa4de64 108 bool isHardwareSPI();
infotech1 0:4d2abaa4de64 109 };
infotech1 0:4d2abaa4de64 110
infotech1 0:4d2abaa4de64 111 #endif