PCF2119 lcd I2c library

Committer:
aracosta
Date:
Tue Sep 20 23:04:16 2016 +0000
Revision:
0:7a19be4cc166
First working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aracosta 0:7a19be4cc166 1 /* mbed CD Library, for a i2c LCD based on PCF2119
aracosta 0:7a19be4cc166 2 * Copyright (c) 2016, aracosta, http://mbed.org
aracosta 0:7a19be4cc166 3 * Copyright (c) 2007-2010, sford, http://mbed.org
aracosta 0:7a19be4cc166 4 *
aracosta 0:7a19be4cc166 5 * Permission is hereby granted, free of charge, to any person obtaining a copy
aracosta 0:7a19be4cc166 6 * of this software and associated documentation files (the "Software"), to deal
aracosta 0:7a19be4cc166 7 * in the Software without restriction, including without limitation the rights
aracosta 0:7a19be4cc166 8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
aracosta 0:7a19be4cc166 9 * copies of the Software, and to permit persons to whom the Software is
aracosta 0:7a19be4cc166 10 * furnished to do so, subject to the following conditions:
aracosta 0:7a19be4cc166 11 *
aracosta 0:7a19be4cc166 12 * The above copyright notice and this permission notice shall be included in
aracosta 0:7a19be4cc166 13 * all copies or substantial portions of the Software.
aracosta 0:7a19be4cc166 14 *
aracosta 0:7a19be4cc166 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
aracosta 0:7a19be4cc166 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
aracosta 0:7a19be4cc166 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
aracosta 0:7a19be4cc166 18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
aracosta 0:7a19be4cc166 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
aracosta 0:7a19be4cc166 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
aracosta 0:7a19be4cc166 21 * THE SOFTWARE.
aracosta 0:7a19be4cc166 22 */
aracosta 0:7a19be4cc166 23
aracosta 0:7a19be4cc166 24 #ifndef MBED_PCF2119_H
aracosta 0:7a19be4cc166 25 #define MBED_PCF2119_H
aracosta 0:7a19be4cc166 26
aracosta 0:7a19be4cc166 27 #include "mbed.h"
aracosta 0:7a19be4cc166 28
aracosta 0:7a19be4cc166 29 /** A TextLCD interface for driving PCF2119-based LCDs
aracosta 0:7a19be4cc166 30 *
aracosta 0:7a19be4cc166 31 * Currently supports 16x2, 20x2 and 20x4 panels
aracosta 0:7a19be4cc166 32 *
aracosta 0:7a19be4cc166 33 * @code
aracosta 0:7a19be4cc166 34 * #include "mbed.h"
aracosta 0:7a19be4cc166 35 * #include "NewTextLCD.h"
aracosta 0:7a19be4cc166 36 *
aracosta 0:7a19be4cc166 37 * TextLCD lcd(p10, p12, p13, p15, p16, p29, p30); // rs, e, d0-d3
aracosta 0:7a19be4cc166 38 *
aracosta 0:7a19be4cc166 39 * int main() {
aracosta 0:7a19be4cc166 40 * lcd.printf("Hello mbed\n");
aracosta 0:7a19be4cc166 41 *
aracosta 0:7a19be4cc166 42 * //define user chars
aracosta 0:7a19be4cc166 43 * int pattern[8];
aracosta 0:7a19be4cc166 44 * int pattern1[8];
aracosta 0:7a19be4cc166 45 * pattern[0] = 1; // *
aracosta 0:7a19be4cc166 46 * pattern[1] = 3; // **
aracosta 0:7a19be4cc166 47 * pattern[2] = 5; // * *
aracosta 0:7a19be4cc166 48 * pattern[3] = 9; // * *
aracosta 0:7a19be4cc166 49 * pattern[4] = 0x11; // * *
aracosta 0:7a19be4cc166 50 * pattern[5] = 0x19; // ** *
aracosta 0:7a19be4cc166 51 * pattern[6] = 0x1d; // *** *
aracosta 0:7a19be4cc166 52 * pattern[7] = 0x1f; // *****
aracosta 0:7a19be4cc166 53 *
aracosta 0:7a19be4cc166 54 * pattern1[0] = 0x10; // *
aracosta 0:7a19be4cc166 55 * pattern1[1] = 0x18; // **
aracosta 0:7a19be4cc166 56 * pattern1[2] = 0x14; // * *
aracosta 0:7a19be4cc166 57 * pattern1[3] = 0x12; // * *
aracosta 0:7a19be4cc166 58 * pattern1[4] = 0x11; // * *
aracosta 0:7a19be4cc166 59 * pattern1[5] = 0x13; // * **
aracosta 0:7a19be4cc166 60 * pattern1[6] = 0x17; // * ***
aracosta 0:7a19be4cc166 61 * pattern1[7] = 0x1f; // *****
aracosta 0:7a19be4cc166 62 *
aracosta 0:7a19be4cc166 63 * lcd.writeCGRAM(0, pattern);
aracosta 0:7a19be4cc166 64 * lcd.writeCGRAM(1, pattern1);
aracosta 0:7a19be4cc166 65 *
aracosta 0:7a19be4cc166 66 * lcd.locate(15,0);
aracosta 0:7a19be4cc166 67 * lcd.putc(0); // user pattern 0
aracosta 0:7a19be4cc166 68 * lcd.putc(1); // user pattern 1
aracosta 0:7a19be4cc166 69 * }
aracosta 0:7a19be4cc166 70 * @endcode
aracosta 0:7a19be4cc166 71 */
aracosta 0:7a19be4cc166 72 class TextLCD : public Stream {
aracosta 0:7a19be4cc166 73 public:
aracosta 0:7a19be4cc166 74
aracosta 0:7a19be4cc166 75 /** LCD panel format */
aracosta 0:7a19be4cc166 76 enum LCDType {
aracosta 0:7a19be4cc166 77 LCD16x2 /**< 16x2 LCD panel (default) */
aracosta 0:7a19be4cc166 78 , LCD16x2B /**< 16x2 LCD panel alternate addressing */
aracosta 0:7a19be4cc166 79 , LCD20x2 /**< 20x2 LCD panel */
aracosta 0:7a19be4cc166 80 , LCD20x4 /**< 20x4 LCD panel */
aracosta 0:7a19be4cc166 81 , LCD24x2 /**< 24x2 LCD panel */
aracosta 0:7a19be4cc166 82 , LCDuser /** User defined LCD, rows/columns must be set */
aracosta 0:7a19be4cc166 83 };
aracosta 0:7a19be4cc166 84
aracosta 0:7a19be4cc166 85 TextLCD(void);
aracosta 0:7a19be4cc166 86 /** Create a TextLCD interface
aracosta 0:7a19be4cc166 87 *
aracosta 0:7a19be4cc166 88 * @param rs Instruction/data control line
aracosta 0:7a19be4cc166 89 * @param e Enable line (clock)
aracosta 0:7a19be4cc166 90 * @param d4-d7 Data lines
aracosta 0:7a19be4cc166 91 * @param type Sets the panel size/addressing mode (default = LCD16x2)
aracosta 0:7a19be4cc166 92 */
aracosta 0:7a19be4cc166 93 TextLCD(PinName pSDA, PinName pSCL, PinName pReset, LCDType type = LCD16x2);
aracosta 0:7a19be4cc166 94
aracosta 0:7a19be4cc166 95 #if DOXYGEN_ONLY
aracosta 0:7a19be4cc166 96 /** Write a character to the LCD
aracosta 0:7a19be4cc166 97 *
aracosta 0:7a19be4cc166 98 * @param c The character to write to the display
aracosta 0:7a19be4cc166 99 */
aracosta 0:7a19be4cc166 100 int putc(int c);
aracosta 0:7a19be4cc166 101
aracosta 0:7a19be4cc166 102 /** Write a formated string to the LCD
aracosta 0:7a19be4cc166 103 *
aracosta 0:7a19be4cc166 104 * @param format A printf-style format string, followed by the
aracosta 0:7a19be4cc166 105 * variables to use in formating the string.
aracosta 0:7a19be4cc166 106 */
aracosta 0:7a19be4cc166 107 int printf(const char* format, ...);
aracosta 0:7a19be4cc166 108 #endif
aracosta 0:7a19be4cc166 109
aracosta 0:7a19be4cc166 110 /** Locate to a screen column and row
aracosta 0:7a19be4cc166 111 *
aracosta 0:7a19be4cc166 112 * @param column The horizontal position from the left, indexed from 0
aracosta 0:7a19be4cc166 113 * @param row The vertical position from the top, indexed from 0
aracosta 0:7a19be4cc166 114 */
aracosta 0:7a19be4cc166 115 void locate(int column, int row);
aracosta 0:7a19be4cc166 116
aracosta 0:7a19be4cc166 117 /** Clear the screen and locate to 0,0 */
aracosta 0:7a19be4cc166 118 void cls();
aracosta 0:7a19be4cc166 119
aracosta 0:7a19be4cc166 120 struct LCDparam {
aracosta 0:7a19be4cc166 121 char i2c_address;
aracosta 0:7a19be4cc166 122 int rows; // number of lines //
aracosta 0:7a19be4cc166 123 int columns; // number of columns //
aracosta 0:7a19be4cc166 124 int delay; // delay for commands microseconds //
aracosta 0:7a19be4cc166 125 int addresses[4]; // start adresses for 4 lines //
aracosta 0:7a19be4cc166 126 } LCDparam;
aracosta 0:7a19be4cc166 127
aracosta 0:7a19be4cc166 128 /** write a user defined char
aracosta 0:7a19be4cc166 129 *
aracosta 0:7a19be4cc166 130 * @param address The user defined char (0-7)
aracosta 0:7a19be4cc166 131 * @param pattern[8] bit pattern 5*8 of char
aracosta 0:7a19be4cc166 132 */
aracosta 0:7a19be4cc166 133 void writeCGRAM(int address, int pattern[8]);
aracosta 0:7a19be4cc166 134
aracosta 0:7a19be4cc166 135 /** Get the char at the current position
aracosta 0:7a19be4cc166 136 *
aracosta 0:7a19be4cc166 137 * int getc()
aracosta 0:7a19be4cc166 138 */
aracosta 0:7a19be4cc166 139 void writeCommand(int command);
aracosta 0:7a19be4cc166 140
aracosta 0:7a19be4cc166 141 protected:
aracosta 0:7a19be4cc166 142
aracosta 0:7a19be4cc166 143 // Stream implementation functions
aracosta 0:7a19be4cc166 144 virtual int _putc(int value);
aracosta 0:7a19be4cc166 145 virtual int _getc();
aracosta 0:7a19be4cc166 146
aracosta 0:7a19be4cc166 147 int address(int column, int row);
aracosta 0:7a19be4cc166 148 void character(int column, int row, int c);
aracosta 0:7a19be4cc166 149 void writeData(int data);
aracosta 0:7a19be4cc166 150 void setLCDparam(LCDType _type);
aracosta 0:7a19be4cc166 151
aracosta 0:7a19be4cc166 152 I2C _i2c;
aracosta 0:7a19be4cc166 153 DigitalOut _reset;
aracosta 0:7a19be4cc166 154 char _i2cbuffer[4]; // i2c data buffer
aracosta 0:7a19be4cc166 155 LCDType _type;
aracosta 0:7a19be4cc166 156
aracosta 0:7a19be4cc166 157 int _column;
aracosta 0:7a19be4cc166 158 int _row;
aracosta 0:7a19be4cc166 159 };
aracosta 0:7a19be4cc166 160
aracosta 0:7a19be4cc166 161 #endif