Initial version for Modtronix LCD2S I2C and SPI serial LCD displays. For details, see http://modtronix.com/products-serial-lcd-board/

Committer:
modtronix
Date:
Tue Aug 04 18:54:37 2015 +1000
Revision:
1:429b7d3f7b95
Parent:
0:cea36bae632b
Child:
2:fe0c1e27f362
Added functionality

Who changed what in which revision?

UserRevisionLine numberNew contents of line
modtronix 1:429b7d3f7b95 1 /**
modtronix 1:429b7d3f7b95 2 * File: lcd2s.h
modtronix 1:429b7d3f7b95 3 *
modtronix 1:429b7d3f7b95 4 * Author: Modtronix Engineering - www.modtronix.com
modtronix 1:429b7d3f7b95 5 *
modtronix 1:429b7d3f7b95 6 * Description:
modtronix 1:429b7d3f7b95 7 *
modtronix 1:429b7d3f7b95 8 * Software License Agreement:
modtronix 1:429b7d3f7b95 9 * This software has been written or modified by Modtronix Engineering. The code
modtronix 1:429b7d3f7b95 10 * may be modified and can be used free of charge for commercial and non commercial
modtronix 1:429b7d3f7b95 11 * applications. If this is modified software, any license conditions from original
modtronix 1:429b7d3f7b95 12 * software also apply. Any redistribution must include reference to 'Modtronix
modtronix 1:429b7d3f7b95 13 * Engineering' and web link(www.modtronix.com) in the file header.
modtronix 1:429b7d3f7b95 14 *
modtronix 1:429b7d3f7b95 15 * THIS SOFTWARE IS PROVIDED IN AN 'AS IS' CONDITION. NO WARRANTIES, WHETHER EXPRESS,
modtronix 1:429b7d3f7b95 16 * IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
modtronix 1:429b7d3f7b95 17 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE
modtronix 1:429b7d3f7b95 18 * COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
modtronix 1:429b7d3f7b95 19 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
modtronix 1:429b7d3f7b95 20 */
modtronix 1:429b7d3f7b95 21
modtronix 1:429b7d3f7b95 22 #ifndef MODTRONIX_LCD2S_LCD2S_H_
modtronix 1:429b7d3f7b95 23 #define MODTRONIX_LCD2S_LCD2S_H_
modtronix 1:429b7d3f7b95 24
modtronix 1:429b7d3f7b95 25 #include "mbed.h"
modtronix 1:429b7d3f7b95 26
modtronix 1:429b7d3f7b95 27 //LCD2S Commands
modtronix 1:429b7d3f7b95 28 /** Cursor moves backwards, no parameters */
modtronix 1:429b7d3f7b95 29 #define LCD2S_CMD_CURSOR_MOVES_BACKWARDS 0x01
modtronix 1:429b7d3f7b95 30
modtronix 1:429b7d3f7b95 31 /** Cursor moves forward, no parameters */
modtronix 1:429b7d3f7b95 32 #define LCD2S_CMD_CURSOR_MOVES_FORWARD 0x09
modtronix 1:429b7d3f7b95 33
modtronix 1:429b7d3f7b95 34 /** Blink Block cursor off, No parameters */
modtronix 1:429b7d3f7b95 35 #define LCD2S_CMD_BLINK_BLOCK_CURSOR_OFF 0x10
modtronix 1:429b7d3f7b95 36
modtronix 1:429b7d3f7b95 37 /** Underline cursor on, No parameters */
modtronix 1:429b7d3f7b95 38 #define LCD2S_CMD_UNDERLINE_CURSOR_ON 0x19
modtronix 1:429b7d3f7b95 39
modtronix 1:429b7d3f7b95 40 /** Display on, No parameters */
modtronix 1:429b7d3f7b95 41 #define LCD2S_CMD_DISPLAY_ON 0x1A
modtronix 1:429b7d3f7b95 42
modtronix 1:429b7d3f7b95 43 /** Display off, No parameters */
modtronix 1:429b7d3f7b95 44 #define LCD2S_CMD_DISPLAY_OFF 0x12
modtronix 1:429b7d3f7b95 45
modtronix 1:429b7d3f7b95 46 /** Configure interrupt pin as a push-pull output (not open collector), No parameters */
modtronix 1:429b7d3f7b95 47 #define LCD2S_CMD_INTERRUPT_PIN_PUSH_PULL 0x22
modtronix 1:429b7d3f7b95 48
modtronix 1:429b7d3f7b95 49 /** Backlight on, No parameters */
modtronix 1:429b7d3f7b95 50 #define LCD2S_CMD_BACKLIGHT_ON 0x28
modtronix 1:429b7d3f7b95 51
modtronix 1:429b7d3f7b95 52 /** Backlight off, No parameter */
modtronix 1:429b7d3f7b95 53 #define LCD2S_CMD_BACKLIGHT_OFF 0x20
modtronix 1:429b7d3f7b95 54
modtronix 1:429b7d3f7b95 55 /** OUT1 off, No parameterss */
modtronix 1:429b7d3f7b95 56 #define LCD2S_CMD_OUT1_OFF 0x30
modtronix 1:429b7d3f7b95 57
modtronix 1:429b7d3f7b95 58 /** OUT2 off, No parameterss */
modtronix 1:429b7d3f7b95 59 #define LCD2S_CMD_OUT2_OFF 0x31
modtronix 1:429b7d3f7b95 60
modtronix 1:429b7d3f7b95 61 /** OUT1 on, No parameterss */
modtronix 1:429b7d3f7b95 62 #define LCD2S_CMD_OUT1_ON 0x38
modtronix 1:429b7d3f7b95 63
modtronix 1:429b7d3f7b95 64 /** OU21 on, No parameterss */
modtronix 1:429b7d3f7b95 65 #define LCD2S_CMD_OUT2_ON 0x39
modtronix 1:429b7d3f7b95 66
modtronix 1:429b7d3f7b95 67 /** GPIO1 off, No parameterss */
modtronix 1:429b7d3f7b95 68 #define LCD2S_CMD_GPIO1_OFF 0x40
modtronix 1:429b7d3f7b95 69
modtronix 1:429b7d3f7b95 70 /** GPIO2 off, No parameterss */
modtronix 1:429b7d3f7b95 71 #define LCD2S_CMD_GPIO2_OFF 0x41
modtronix 1:429b7d3f7b95 72
modtronix 1:429b7d3f7b95 73 /** GPIO1 on, No parameterss */
modtronix 1:429b7d3f7b95 74 #define LCD2S_CMD_GPIO1_ON 0x48
modtronix 1:429b7d3f7b95 75
modtronix 1:429b7d3f7b95 76 /** GPIO2 on, No parameterss */
modtronix 1:429b7d3f7b95 77 #define LCD2S_CMD_GPIO2_ON 0x49
modtronix 1:429b7d3f7b95 78
modtronix 1:429b7d3f7b95 79 /** Write string, string to follow */
modtronix 1:429b7d3f7b95 80 #define LCD2S_CMD_WRITE_STRING 0x80
modtronix 1:429b7d3f7b95 81
modtronix 1:429b7d3f7b95 82 /** Set Backlight, byte to follow (0-255) */
modtronix 1:429b7d3f7b95 83 #define LCD2S_CMD_SET_BACKLIGHT 0x81
modtronix 1:429b7d3f7b95 84
modtronix 1:429b7d3f7b95 85 /** Set contrast, byte to follow (0-254) */
modtronix 1:429b7d3f7b95 86 #define LCD2S_CMD_SET_CONTRAST 0x82
modtronix 1:429b7d3f7b95 87
modtronix 1:429b7d3f7b95 88 /** Move cursor right, no parameters */
modtronix 1:429b7d3f7b95 89 #define LCD2S_CMD_MOVE_CURSOR_RIGHT 0x83
modtronix 1:429b7d3f7b95 90
modtronix 1:429b7d3f7b95 91 /** Move cursor left, no parameters */
modtronix 1:429b7d3f7b95 92 #define LCD2S_CMD_MOVE_CURSOR_LEFT 0x84
modtronix 1:429b7d3f7b95 93
modtronix 1:429b7d3f7b95 94 /** Shift display right, No parameters */
modtronix 1:429b7d3f7b95 95 #define LCD2S_CMD_SHIFT_DISPLAY_RIGHT 0x85
modtronix 1:429b7d3f7b95 96
modtronix 1:429b7d3f7b95 97 /** Shift display left, No parameters */
modtronix 1:429b7d3f7b95 98 #define LCD2S_CMD_SHIFT_DISPLAY_LEFT 0x86
modtronix 1:429b7d3f7b95 99
modtronix 1:429b7d3f7b95 100 /** Shift display up, No parameters */
modtronix 1:429b7d3f7b95 101 #define LCD2S_CMD_SHIFT_DISPLAY_UP 0x85
modtronix 1:429b7d3f7b95 102
modtronix 1:429b7d3f7b95 103 /** Shift display down, No parameters */
modtronix 1:429b7d3f7b95 104 #define LCD2S_CMD_SHIFT_DISPLAY_DOWN 0x86
modtronix 1:429b7d3f7b95 105
modtronix 1:429b7d3f7b95 106 /** Set cursor address, byte to follow (0-254) */
modtronix 1:429b7d3f7b95 107 #define LCD2S_CMD_SET_CURSOR_ADDRESS 0x89
modtronix 1:429b7d3f7b95 108
modtronix 1:429b7d3f7b95 109 /** Set cursor address, next byte is row (1-n), next byte is column (1-n) */
modtronix 1:429b7d3f7b95 110 #define LCD2S_CMD_SET_CURSOR_POSITION 0x8A
modtronix 1:429b7d3f7b95 111
modtronix 1:429b7d3f7b95 112 /** Clear Display, No parameters */
modtronix 1:429b7d3f7b95 113 #define LCD2S_CMD_CLEAR_DISPLAY 0x8C
modtronix 1:429b7d3f7b95 114
modtronix 1:429b7d3f7b95 115 /** Remember next command, No parameters */
modtronix 1:429b7d3f7b95 116 #define LCD2S_CMD_REMEMBER 0x8D
modtronix 1:429b7d3f7b95 117
modtronix 1:429b7d3f7b95 118 /** Set I2C base address, next byte is character set code (0=vert bar graph, 1=nrw v.bar graph, 2=larg num) */
modtronix 1:429b7d3f7b95 119 #define LCD2S_CMD_LOAD_CUSTOM_CHAR_SET 0x8E
modtronix 1:429b7d3f7b95 120
modtronix 1:429b7d3f7b95 121 /** Write large number string, string to follow with numbers (0 1 2 3 4 5 6 7 8 9 . : space) */
modtronix 1:429b7d3f7b95 122 #define LCD2S_CMD_WRITE_LARGE_NUM_STING 0x8F
modtronix 1:429b7d3f7b95 123
modtronix 1:429b7d3f7b95 124 /** Set startup screen for a single line. Next byte is line number (1-4), followed by string (message for that line */
modtronix 1:429b7d3f7b95 125 #define LCD2S_CMD_SET_STARTUP_SCREEN 0x90
modtronix 1:429b7d3f7b95 126
modtronix 1:429b7d3f7b95 127 /** Set I2C base address, next byte is address */
modtronix 1:429b7d3f7b95 128 #define LCD2S_CMD_SET_I2C_BASE_ADR 0x91
modtronix 1:429b7d3f7b95 129
modtronix 1:429b7d3f7b95 130 /** Set I2C base address, next byte is adr (0-7), next 8 bytes are pixels */
modtronix 1:429b7d3f7b95 131 #define LCD2S_CMD_DEFINE_CUSTOM_CHAR 0x92
modtronix 1:429b7d3f7b95 132
modtronix 1:429b7d3f7b95 133 /** Draw vert. bar graph, next byte is row (1-n), next byte is column (1-n), next byte is height (0-8) */
modtronix 1:429b7d3f7b95 134 #define LCD2S_CMD_DRAW_VERT_BAR_GRAPH 0x93
modtronix 1:429b7d3f7b95 135
modtronix 1:429b7d3f7b95 136 /** Draw tall vert. bar graph (span 2 rows), next byte is row (1-n), next byte is column (1-n), next byte is height (0-8) */
modtronix 1:429b7d3f7b95 137 #define LCD2S_CMD_DRAW_TALL_VERT_BAR_GRAPH 0x94
modtronix 1:429b7d3f7b95 138
modtronix 1:429b7d3f7b95 139 /** Configure device, followed by 4 bytes */
modtronix 1:429b7d3f7b95 140 #define LCD2S_CMD_CONFIG_DEVICE 0x95
modtronix 1:429b7d3f7b95 141
modtronix 1:429b7d3f7b95 142 /** Set keypad repeat delay, byte to follow is 16ms multiples time (1-100 = 16-1600ms) */
modtronix 1:429b7d3f7b95 143 #define LCD2S_CMD_SET_KEYPAD_REPEAT_DELAY 0xA0
modtronix 1:429b7d3f7b95 144
modtronix 1:429b7d3f7b95 145 /** Set keypad repeat rate, byte to follow is 16ms multiples time (1-100 = 16-1600ms) */
modtronix 1:429b7d3f7b95 146 #define LCD2S_CMD_SET_KEYPAD_REPEAT_RATE 0xA1
modtronix 1:429b7d3f7b95 147
modtronix 1:429b7d3f7b95 148 /** Set keypad buzzer period, byte to follow is 16ms multiples time (1-100 = 16-1600ms) */
modtronix 1:429b7d3f7b95 149 #define LCD2S_CMD_SET_KEYPAD_BUZZER_PERIOD 0xA2
modtronix 1:429b7d3f7b95 150
modtronix 1:429b7d3f7b95 151 /** Set maximum brightness, byte to follow (1-255) */
modtronix 1:429b7d3f7b95 152 #define LCD2S_CMD_MAX_BACKLIGHT 0xA3
modtronix 1:429b7d3f7b95 153
modtronix 1:429b7d3f7b95 154 /** Get status. Next byte read is status. Bit 7 indicates if keypad buffer contains data (keys). Bits 0-6 = receive buffer space available. */
modtronix 1:429b7d3f7b95 155 #define LCD2S_CMD_GET_STATUS 0xD0
modtronix 1:429b7d3f7b95 156
modtronix 1:429b7d3f7b95 157 /** Read next key from buffer. Next byte read is key */
modtronix 1:429b7d3f7b95 158 #define LCD2S_CMD_GET_KEY 0xD1
modtronix 1:429b7d3f7b95 159
modtronix 1:429b7d3f7b95 160 /** Read GPIO1, GPIO2 and GPIO3. Next byte read is values in bits 0 - 2 */
modtronix 1:429b7d3f7b95 161 #define LCD2S_CMD_GET_GPIO1_TO_GPIO3 0xD3
modtronix 1:429b7d3f7b95 162
modtronix 1:429b7d3f7b95 163 /** Configure keypad and IO, byte to follow */
modtronix 1:429b7d3f7b95 164 #define LCD2S_CMD_CONFIG_KEYPAD_AND_IO 0xE0
modtronix 1:429b7d3f7b95 165
modtronix 1:429b7d3f7b95 166 /** Set keypad debounce time, byte to follow is 8ms multiples time (1-15 = 8-120ms) */
modtronix 1:429b7d3f7b95 167 #define LCD2S_CMD_SET_KEYPAD_DEBOUNCE_TIME 0xE1
modtronix 1:429b7d3f7b95 168
modtronix 1:429b7d3f7b95 169 /** Set OUT1 and OUT2, byte to follow is value (bit 0=OUT1, bit 1=OUT2) */
modtronix 1:429b7d3f7b95 170 #define LCD2S_CMD_SET_OUT1_AND_OUT2 0xE2
modtronix 1:429b7d3f7b95 171
modtronix 1:429b7d3f7b95 172 /** Configure GPIO1, byte to follow */
modtronix 1:429b7d3f7b95 173 #define LCD2S_CMD_CONFIG_GPIO1 0xE3
modtronix 1:429b7d3f7b95 174
modtronix 1:429b7d3f7b95 175 /** Configure GPIO1, byte to follow */
modtronix 1:429b7d3f7b95 176 #define LCD2S_CMD_CONFIG_GPIO2 0xE4
modtronix 1:429b7d3f7b95 177
modtronix 1:429b7d3f7b95 178
modtronix 1:429b7d3f7b95 179 class LCD2S : public Stream {
modtronix 1:429b7d3f7b95 180 public:
modtronix 1:429b7d3f7b95 181 LCD2S(uint8_t rows = 4, uint8_t columns = 20);
modtronix 1:429b7d3f7b95 182
modtronix 1:429b7d3f7b95 183 // Stream implementation - provides printf() interface
modtronix 1:429b7d3f7b95 184 // You would otherwise be forced to use writeChar()
modtronix 1:429b7d3f7b95 185 virtual int _putc(int value) { return writeChar(value); };
modtronix 1:429b7d3f7b95 186 virtual int _getc() { return -1; };
modtronix 1:429b7d3f7b95 187
modtronix 1:429b7d3f7b95 188 /** Initializes the LCD2S device with default values
modtronix 1:429b7d3f7b95 189 * - Interrupt pin is Open Collector output type
modtronix 1:429b7d3f7b95 190 * - Backlight On
modtronix 1:429b7d3f7b95 191 * - Display On
modtronix 1:429b7d3f7b95 192 * - Backlight 200 (value from 0 to 255)
modtronix 1:429b7d3f7b95 193 * - Cursor off, block cursor off
modtronix 1:429b7d3f7b95 194 * - Cursor moves forward
modtronix 1:429b7d3f7b95 195 * - Keypad is 4x4 button type (if present)
modtronix 1:429b7d3f7b95 196 * - OUT1 disabled
modtronix 1:429b7d3f7b95 197 * - GPIO1 to 3 disabled
modtronix 1:429b7d3f7b95 198 * - Keypad Buzzer off
modtronix 1:429b7d3f7b95 199 * - Keypad repeat rate = 320ms
modtronix 1:429b7d3f7b95 200 * - Keypad Repeat Delay = 1 second
modtronix 1:429b7d3f7b95 201 * - Keypad Debounce Time = 64ms
modtronix 1:429b7d3f7b95 202 *
modtronix 1:429b7d3f7b95 203 * @param contrast The display contrast, a value from 0 to 255
modtronix 1:429b7d3f7b95 204 */
modtronix 1:429b7d3f7b95 205 virtual void initDefault(uint8_t contrast) = 0;
modtronix 1:429b7d3f7b95 206
modtronix 1:429b7d3f7b95 207 /** Causes the display to be updated with buffer content
modtronix 1:429b7d3f7b95 208 */
modtronix 1:429b7d3f7b95 209 virtual void display() = 0;
modtronix 1:429b7d3f7b95 210
modtronix 1:429b7d3f7b95 211 void clearDisplay();
modtronix 1:429b7d3f7b95 212
modtronix 1:429b7d3f7b95 213 /** Set the text cursor location, based on the size of the text
modtronix 1:429b7d3f7b95 214 *
modtronix 1:429b7d3f7b95 215 * @param row A value from 1-n
modtronix 1:429b7d3f7b95 216 * @param col A value from 1-n
modtronix 1:429b7d3f7b95 217 */
modtronix 1:429b7d3f7b95 218 void setCursor(int8_t row, int8_t col);
modtronix 1:429b7d3f7b95 219
modtronix 1:429b7d3f7b95 220 virtual int writeChar(uint8_t c) = 0;
modtronix 1:429b7d3f7b95 221
modtronix 1:429b7d3f7b95 222 // virtual void write(const char* str) = 0;
modtronix 1:429b7d3f7b95 223
modtronix 1:429b7d3f7b95 224 protected:
modtronix 1:429b7d3f7b95 225 uint8_t* pBuf; //Display buffer
modtronix 1:429b7d3f7b95 226 uint16_t bufSize; //Sixe of display buffer, is rows * columns by default
modtronix 1:429b7d3f7b95 227 uint8_t rows; //Number of rows that this display has
modtronix 1:429b7d3f7b95 228 uint8_t columns; //Number of columns that this display has
modtronix 1:429b7d3f7b95 229 uint8_t cursor_row; //Current row, a value from 0 to (rows-1)
modtronix 1:429b7d3f7b95 230 uint8_t cursor_col; //Current column, a value from 0 to (columns-1)
modtronix 1:429b7d3f7b95 231 uint8_t brightness;
modtronix 1:429b7d3f7b95 232 uint8_t contrast;
modtronix 1:429b7d3f7b95 233
modtronix 1:429b7d3f7b95 234 uint32_t* pDirtyRows; //Each bit indicates if any characters are dirty in row
modtronix 1:429b7d3f7b95 235 };
modtronix 1:429b7d3f7b95 236
modtronix 1:429b7d3f7b95 237
modtronix 1:429b7d3f7b95 238
modtronix 1:429b7d3f7b95 239 #endif /* MODTRONIX_LCD2S_LCD2S_H_ */