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.
Adafruit_PCD8544.h@0:4d2abaa4de64, 2014-11-02 (annotated)
- 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?
User | Revision | Line number | New 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 |