Initial version for Modtronix LCD2S I2C and SPI serial LCD displays. For details, see http://modtronix.com/products-serial-lcd-board/
lcd2s.h@1:429b7d3f7b95, 2015-08-04 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |