Orignal AVR Tiny USI Based I2C slave LCD Driver.
Dependents: MyLCD_OSARU MyLCD_printf
MyLCD.cpp@1:794acd9a0b9c, 2013-12-12 (annotated)
- Committer:
- bant62
- Date:
- Thu Dec 12 00:31:44 2013 +0000
- Revision:
- 1:794acd9a0b9c
- Parent:
- 0:2ba6a6510880
Fixed the software description;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bant62 | 0:2ba6a6510880 | 1 | /** |
bant62 | 0:2ba6a6510880 | 2 | ***************************************************************************** |
bant62 | 0:2ba6a6510880 | 3 | * File Name : MyLCD.cpp |
bant62 | 0:2ba6a6510880 | 4 | * |
bant62 | 0:2ba6a6510880 | 5 | * Title : ORGINAL I2C LCD Display Claass Source File |
bant62 | 0:2ba6a6510880 | 6 | * Revision : 0.1 |
bant62 | 0:2ba6a6510880 | 7 | * Notes : |
bant62 | 0:2ba6a6510880 | 8 | * Target Board : mbed NXP LPC1768, mbed LPC1114FN28 etc |
bant62 | 0:2ba6a6510880 | 9 | * Tool Chain : ???? |
bant62 | 0:2ba6a6510880 | 10 | * |
bant62 | 0:2ba6a6510880 | 11 | * Revision History: |
bant62 | 0:2ba6a6510880 | 12 | * When Who Description of change |
bant62 | 0:2ba6a6510880 | 13 | * ----------- ----------- ----------------------- |
bant62 | 1:794acd9a0b9c | 14 | * 2013/12/11 Hiroshi M init |
bant62 | 0:2ba6a6510880 | 15 | ***************************************************************************** |
bant62 | 0:2ba6a6510880 | 16 | * |
bant62 | 0:2ba6a6510880 | 17 | * Copyright (C) 2013 Hiroshi M, MIT License |
bant62 | 0:2ba6a6510880 | 18 | * |
bant62 | 0:2ba6a6510880 | 19 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
bant62 | 0:2ba6a6510880 | 20 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
bant62 | 0:2ba6a6510880 | 21 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
bant62 | 0:2ba6a6510880 | 22 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
bant62 | 0:2ba6a6510880 | 23 | * furnished to do so, subject to the following conditions: |
bant62 | 0:2ba6a6510880 | 24 | * |
bant62 | 0:2ba6a6510880 | 25 | * The above copyright notice and this permission notice shall be included in all copies or |
bant62 | 0:2ba6a6510880 | 26 | * substantial portions of the Software. |
bant62 | 0:2ba6a6510880 | 27 | * |
bant62 | 0:2ba6a6510880 | 28 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
bant62 | 0:2ba6a6510880 | 29 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
bant62 | 0:2ba6a6510880 | 30 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
bant62 | 0:2ba6a6510880 | 31 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
bant62 | 0:2ba6a6510880 | 32 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
bant62 | 0:2ba6a6510880 | 33 | * |
bant62 | 0:2ba6a6510880 | 34 | **/ |
bant62 | 0:2ba6a6510880 | 35 | |
bant62 | 0:2ba6a6510880 | 36 | /* Includes ----------------------------------------------------------------- */ |
bant62 | 0:2ba6a6510880 | 37 | #include "mbed.h" |
bant62 | 0:2ba6a6510880 | 38 | #include "MyLCD.h" |
bant62 | 0:2ba6a6510880 | 39 | #include <string.h> |
bant62 | 0:2ba6a6510880 | 40 | |
bant62 | 0:2ba6a6510880 | 41 | /* Private typedef ---------------------------------------------------------- */ |
bant62 | 0:2ba6a6510880 | 42 | /* Private define ----------------------------------------------------------- */ |
bant62 | 0:2ba6a6510880 | 43 | /* Private macro ------------------------------------------------------------ */ |
bant62 | 0:2ba6a6510880 | 44 | /* Private variables -------------------------------------------------------- */ |
bant62 | 0:2ba6a6510880 | 45 | |
bant62 | 0:2ba6a6510880 | 46 | /* member fanctions --------------------------------------------------------- */ |
bant62 | 0:2ba6a6510880 | 47 | |
bant62 | 0:2ba6a6510880 | 48 | |
bant62 | 0:2ba6a6510880 | 49 | // Constractor |
bant62 | 0:2ba6a6510880 | 50 | MyLCD::MyLCD(I2C *i2c): _i2c(i2c) |
bant62 | 0:2ba6a6510880 | 51 | { |
bant62 | 0:2ba6a6510880 | 52 | _column = 0; |
bant62 | 0:2ba6a6510880 | 53 | _row = 0; |
bant62 | 0:2ba6a6510880 | 54 | } |
bant62 | 0:2ba6a6510880 | 55 | |
bant62 | 0:2ba6a6510880 | 56 | int MyLCD::writeBytes(const char *data, int length, bool repeated) |
bant62 | 0:2ba6a6510880 | 57 | { |
bant62 | 0:2ba6a6510880 | 58 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 59 | _i2c->start(); |
bant62 | 0:2ba6a6510880 | 60 | |
bant62 | 0:2ba6a6510880 | 61 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 62 | if (_i2c->write(i2c_addr) != 1) |
bant62 | 0:2ba6a6510880 | 63 | { |
bant62 | 0:2ba6a6510880 | 64 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 65 | _i2c->stop(); |
bant62 | 0:2ba6a6510880 | 66 | return _i2cFAILURE; |
bant62 | 0:2ba6a6510880 | 67 | } |
bant62 | 0:2ba6a6510880 | 68 | |
bant62 | 0:2ba6a6510880 | 69 | for (int i = 0; i < length; i++) |
bant62 | 0:2ba6a6510880 | 70 | { |
bant62 | 0:2ba6a6510880 | 71 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 72 | if (_i2c->write(data[i]) != 1) |
bant62 | 0:2ba6a6510880 | 73 | { |
bant62 | 0:2ba6a6510880 | 74 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 75 | _i2c->stop(); |
bant62 | 0:2ba6a6510880 | 76 | return _i2cFAILURE; |
bant62 | 0:2ba6a6510880 | 77 | } |
bant62 | 0:2ba6a6510880 | 78 | } |
bant62 | 0:2ba6a6510880 | 79 | if (!repeated) |
bant62 | 0:2ba6a6510880 | 80 | { |
bant62 | 0:2ba6a6510880 | 81 | wait_us(i2c_bit_wait_us); |
bant62 | 0:2ba6a6510880 | 82 | _i2c->stop(); |
bant62 | 0:2ba6a6510880 | 83 | } |
bant62 | 0:2ba6a6510880 | 84 | return _i2cSUCCESS; |
bant62 | 0:2ba6a6510880 | 85 | } |
bant62 | 0:2ba6a6510880 | 86 | |
bant62 | 0:2ba6a6510880 | 87 | int MyLCD::gotoCursor( int x, int y ) |
bant62 | 0:2ba6a6510880 | 88 | { |
bant62 | 0:2ba6a6510880 | 89 | char buff[4] = { ESC, 'L', x, y }; |
bant62 | 0:2ba6a6510880 | 90 | |
bant62 | 0:2ba6a6510880 | 91 | _column = x; |
bant62 | 0:2ba6a6510880 | 92 | _row = y; |
bant62 | 0:2ba6a6510880 | 93 | |
bant62 | 0:2ba6a6510880 | 94 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 95 | } |
bant62 | 0:2ba6a6510880 | 96 | |
bant62 | 0:2ba6a6510880 | 97 | |
bant62 | 0:2ba6a6510880 | 98 | int MyLCD::home(void) |
bant62 | 0:2ba6a6510880 | 99 | { |
bant62 | 0:2ba6a6510880 | 100 | char buff[2] = { ESC, 'H' }; |
bant62 | 0:2ba6a6510880 | 101 | |
bant62 | 0:2ba6a6510880 | 102 | _column = 0; |
bant62 | 0:2ba6a6510880 | 103 | _row = 0; |
bant62 | 0:2ba6a6510880 | 104 | |
bant62 | 0:2ba6a6510880 | 105 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 106 | } |
bant62 | 0:2ba6a6510880 | 107 | |
bant62 | 0:2ba6a6510880 | 108 | int MyLCD::clear(void) |
bant62 | 0:2ba6a6510880 | 109 | { |
bant62 | 0:2ba6a6510880 | 110 | char buff[2] = { ESC, 'C' }; |
bant62 | 0:2ba6a6510880 | 111 | |
bant62 | 0:2ba6a6510880 | 112 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 113 | } |
bant62 | 0:2ba6a6510880 | 114 | |
bant62 | 0:2ba6a6510880 | 115 | int MyLCD::saveCustomCharacter(int romCharNum, char lcdCharData[]) |
bant62 | 0:2ba6a6510880 | 116 | { |
bant62 | 0:2ba6a6510880 | 117 | int ret; |
bant62 | 0:2ba6a6510880 | 118 | |
bant62 | 0:2ba6a6510880 | 119 | char buff[3] = { ESC, 'S', romCharNum }; |
bant62 | 0:2ba6a6510880 | 120 | |
bant62 | 0:2ba6a6510880 | 121 | ret = writeBytes(buff, sizeof(buff), true); |
bant62 | 0:2ba6a6510880 | 122 | |
bant62 | 0:2ba6a6510880 | 123 | if (ret == _i2cSUCCESS) |
bant62 | 0:2ba6a6510880 | 124 | { |
bant62 | 0:2ba6a6510880 | 125 | ret = writeBytes(lcdCharData, 8, false); |
bant62 | 0:2ba6a6510880 | 126 | } |
bant62 | 0:2ba6a6510880 | 127 | wait_ms(100); |
bant62 | 0:2ba6a6510880 | 128 | |
bant62 | 0:2ba6a6510880 | 129 | return ret; |
bant62 | 0:2ba6a6510880 | 130 | } |
bant62 | 0:2ba6a6510880 | 131 | |
bant62 | 0:2ba6a6510880 | 132 | int MyLCD::mapCustomCharacter(int romCharNum, int lcdCharNum) |
bant62 | 0:2ba6a6510880 | 133 | { |
bant62 | 0:2ba6a6510880 | 134 | char buff[4] = { ESC, 'M', romCharNum, lcdCharNum }; |
bant62 | 0:2ba6a6510880 | 135 | |
bant62 | 0:2ba6a6510880 | 136 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 137 | } |
bant62 | 0:2ba6a6510880 | 138 | |
bant62 | 0:2ba6a6510880 | 139 | |
bant62 | 0:2ba6a6510880 | 140 | int MyLCD::offDisplay(void) |
bant62 | 0:2ba6a6510880 | 141 | { |
bant62 | 0:2ba6a6510880 | 142 | char buff[2] = { ESC, 'X' }; |
bant62 | 0:2ba6a6510880 | 143 | |
bant62 | 0:2ba6a6510880 | 144 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 145 | } |
bant62 | 0:2ba6a6510880 | 146 | |
bant62 | 0:2ba6a6510880 | 147 | int MyLCD::onDisplay(void) |
bant62 | 0:2ba6a6510880 | 148 | { |
bant62 | 0:2ba6a6510880 | 149 | char buff[2] = { ESC, 'N' }; |
bant62 | 0:2ba6a6510880 | 150 | |
bant62 | 0:2ba6a6510880 | 151 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 152 | } |
bant62 | 0:2ba6a6510880 | 153 | |
bant62 | 0:2ba6a6510880 | 154 | int MyLCD::blinkCharacter(void) |
bant62 | 0:2ba6a6510880 | 155 | { |
bant62 | 0:2ba6a6510880 | 156 | char buff[2] = { ESC, 'B' }; |
bant62 | 0:2ba6a6510880 | 157 | |
bant62 | 0:2ba6a6510880 | 158 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 159 | } |
bant62 | 0:2ba6a6510880 | 160 | |
bant62 | 0:2ba6a6510880 | 161 | int MyLCD::dispCursor(void) |
bant62 | 0:2ba6a6510880 | 162 | { |
bant62 | 0:2ba6a6510880 | 163 | char buff[2] = { ESC, 'D' }; |
bant62 | 0:2ba6a6510880 | 164 | |
bant62 | 0:2ba6a6510880 | 165 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 166 | } |
bant62 | 0:2ba6a6510880 | 167 | |
bant62 | 0:2ba6a6510880 | 168 | int MyLCD::blinkCursor(void) |
bant62 | 0:2ba6a6510880 | 169 | { |
bant62 | 0:2ba6a6510880 | 170 | char buff[2] = { ESC, 'E' }; |
bant62 | 0:2ba6a6510880 | 171 | |
bant62 | 0:2ba6a6510880 | 172 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 173 | } |
bant62 | 0:2ba6a6510880 | 174 | |
bant62 | 0:2ba6a6510880 | 175 | int MyLCD::hideCursor(void) |
bant62 | 0:2ba6a6510880 | 176 | { |
bant62 | 0:2ba6a6510880 | 177 | char buff[2] = { ESC, 'H' }; |
bant62 | 0:2ba6a6510880 | 178 | |
bant62 | 0:2ba6a6510880 | 179 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 180 | } |
bant62 | 0:2ba6a6510880 | 181 | |
bant62 | 0:2ba6a6510880 | 182 | int MyLCD::moveLeftCursor(void) |
bant62 | 0:2ba6a6510880 | 183 | { |
bant62 | 0:2ba6a6510880 | 184 | char buff[2] = { ESC, '-' }; |
bant62 | 0:2ba6a6510880 | 185 | |
bant62 | 0:2ba6a6510880 | 186 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 187 | } |
bant62 | 0:2ba6a6510880 | 188 | |
bant62 | 0:2ba6a6510880 | 189 | int MyLCD::moveRightCursor(void) |
bant62 | 0:2ba6a6510880 | 190 | { |
bant62 | 0:2ba6a6510880 | 191 | char buff[2] = { ESC, '+' }; |
bant62 | 0:2ba6a6510880 | 192 | |
bant62 | 0:2ba6a6510880 | 193 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 194 | } |
bant62 | 0:2ba6a6510880 | 195 | |
bant62 | 0:2ba6a6510880 | 196 | int MyLCD::moveLeftDisplay(void) |
bant62 | 0:2ba6a6510880 | 197 | { |
bant62 | 0:2ba6a6510880 | 198 | char buff[2] = { ESC, '<' }; |
bant62 | 0:2ba6a6510880 | 199 | |
bant62 | 0:2ba6a6510880 | 200 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 201 | } |
bant62 | 0:2ba6a6510880 | 202 | |
bant62 | 0:2ba6a6510880 | 203 | int MyLCD::moveRightDisplay(void) |
bant62 | 0:2ba6a6510880 | 204 | { |
bant62 | 0:2ba6a6510880 | 205 | char buff[2] = { ESC, '>' }; |
bant62 | 0:2ba6a6510880 | 206 | |
bant62 | 0:2ba6a6510880 | 207 | return writeBytes(buff, sizeof(buff)); |
bant62 | 0:2ba6a6510880 | 208 | } |
bant62 | 0:2ba6a6510880 | 209 | |
bant62 | 0:2ba6a6510880 | 210 | // 一文字表示 |
bant62 | 0:2ba6a6510880 | 211 | int MyLCD::printChar(char chr) |
bant62 | 0:2ba6a6510880 | 212 | { |
bant62 | 0:2ba6a6510880 | 213 | return writeBytes(&chr, 1); |
bant62 | 0:2ba6a6510880 | 214 | } |
bant62 | 0:2ba6a6510880 | 215 | |
bant62 | 0:2ba6a6510880 | 216 | int MyLCD::printStr(const char *s) |
bant62 | 0:2ba6a6510880 | 217 | { |
bant62 | 0:2ba6a6510880 | 218 | return writeBytes(s, strlen(s)); |
bant62 | 0:2ba6a6510880 | 219 | } |
bant62 | 0:2ba6a6510880 | 220 | |
bant62 | 0:2ba6a6510880 | 221 | |
bant62 | 0:2ba6a6510880 | 222 | int MyLCD::_putc(int value) |
bant62 | 0:2ba6a6510880 | 223 | { |
bant62 | 0:2ba6a6510880 | 224 | if (value == '\n') |
bant62 | 0:2ba6a6510880 | 225 | { |
bant62 | 0:2ba6a6510880 | 226 | _column = 0; |
bant62 | 0:2ba6a6510880 | 227 | _row++; |
bant62 | 0:2ba6a6510880 | 228 | if (_row >= rows()) |
bant62 | 0:2ba6a6510880 | 229 | { |
bant62 | 0:2ba6a6510880 | 230 | _row = 0; |
bant62 | 0:2ba6a6510880 | 231 | } |
bant62 | 0:2ba6a6510880 | 232 | } |
bant62 | 0:2ba6a6510880 | 233 | else |
bant62 | 0:2ba6a6510880 | 234 | { |
bant62 | 0:2ba6a6510880 | 235 | character(_column, _row, value); |
bant62 | 0:2ba6a6510880 | 236 | _column++; |
bant62 | 0:2ba6a6510880 | 237 | if (_column >= columns()) |
bant62 | 0:2ba6a6510880 | 238 | { |
bant62 | 0:2ba6a6510880 | 239 | _column = 0; |
bant62 | 0:2ba6a6510880 | 240 | _row++; |
bant62 | 0:2ba6a6510880 | 241 | if (_row >= rows()) |
bant62 | 0:2ba6a6510880 | 242 | { |
bant62 | 0:2ba6a6510880 | 243 | _row = 0; |
bant62 | 0:2ba6a6510880 | 244 | } |
bant62 | 0:2ba6a6510880 | 245 | } |
bant62 | 0:2ba6a6510880 | 246 | } |
bant62 | 0:2ba6a6510880 | 247 | return value; |
bant62 | 0:2ba6a6510880 | 248 | } |
bant62 | 0:2ba6a6510880 | 249 | |
bant62 | 0:2ba6a6510880 | 250 | int MyLCD::_getc() |
bant62 | 0:2ba6a6510880 | 251 | { |
bant62 | 0:2ba6a6510880 | 252 | return -1; |
bant62 | 0:2ba6a6510880 | 253 | } |
bant62 | 0:2ba6a6510880 | 254 | |
bant62 | 0:2ba6a6510880 | 255 | void MyLCD::character(int column, int row, int c) |
bant62 | 0:2ba6a6510880 | 256 | { |
bant62 | 0:2ba6a6510880 | 257 | gotoCursor(_column, row ); |
bant62 | 0:2ba6a6510880 | 258 | printChar(c); |
bant62 | 0:2ba6a6510880 | 259 | } |
bant62 | 0:2ba6a6510880 | 260 | |
bant62 | 0:2ba6a6510880 | 261 | int MyLCD::columns() |
bant62 | 0:2ba6a6510880 | 262 | { |
bant62 | 0:2ba6a6510880 | 263 | return display_columns; |
bant62 | 0:2ba6a6510880 | 264 | } |
bant62 | 0:2ba6a6510880 | 265 | |
bant62 | 0:2ba6a6510880 | 266 | int MyLCD::rows() |
bant62 | 0:2ba6a6510880 | 267 | { |
bant62 | 0:2ba6a6510880 | 268 | return display_rows; |
bant62 | 0:2ba6a6510880 | 269 | } |