Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
Kazuki Yamamoto
Date:
Sun Oct 23 17:25:47 2016 +0900
Revision:
32:7e37fd2ddaa4
Parent:
31:7c7faf88edcc
[ NEW ] MemoryLcd.h/cpp for base class declaration

new class LCD_MODE has basic command definitions
new class AkiLCD_MODE inherits LCD_MODE and overrides command definitions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kazuki Yamamoto 32:7e37fd2ddaa4 1 /* Copyright (c) 2016 Kazuki Yamamoto <k.yamamoto.08136891@gmail.com>
Kazuki Yamamoto 31:7c7faf88edcc 2 Permission is hereby granted, free of charge, to any person obtaining
Kazuki Yamamoto 31:7c7faf88edcc 3 a copy of this software and associated documentation files
Kazuki Yamamoto 31:7c7faf88edcc 4 (the "Software"), to deal in the Software without restriction,
Kazuki Yamamoto 31:7c7faf88edcc 5 including without limitation the rights to use, copy, modify, merge,
Kazuki Yamamoto 31:7c7faf88edcc 6 publish, distribute, sublicense, and/or sell copies of the Software,
Kazuki Yamamoto 31:7c7faf88edcc 7 and to permit persons to whom the Software is furnished to do so,
Kazuki Yamamoto 31:7c7faf88edcc 8 subject to the following conditions:
Kazuki Yamamoto 31:7c7faf88edcc 9 The above copyright notice and this permission notice shall be
Kazuki Yamamoto 31:7c7faf88edcc 10 included in all copies or substantial portions of the Software.
Kazuki Yamamoto 31:7c7faf88edcc 11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Kazuki Yamamoto 31:7c7faf88edcc 12 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Kazuki Yamamoto 31:7c7faf88edcc 13 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Kazuki Yamamoto 31:7c7faf88edcc 14 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
Kazuki Yamamoto 31:7c7faf88edcc 15 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
Kazuki Yamamoto 31:7c7faf88edcc 16 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
Kazuki Yamamoto 31:7c7faf88edcc 17 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Kazuki Yamamoto 31:7c7faf88edcc 18 */
k4zuki 1:57de84d2025c 19 /** this is for SHARP LCD LS027B4DH01
Kazuki Yamamoto 30:d5c18e268866 20 * (c) Kazuki Yamamoto, or _K4ZUKI_
k4zuki 0:b3c8fdd01601 21 */
k4zuki 0:b3c8fdd01601 22
Kazuki Yamamoto 30:d5c18e268866 23 #include "AkiSpiLcd.h"
Kazuki Yamamoto 32:7e37fd2ddaa4 24 #include "mbed.h" //NOLINT
Kazuki Yamamoto 30:d5c18e268866 25 // #include "Ser23K256.h"
k4zuki 11:16647ecd67ce 26 extern const uint8_t lcd_line[];
k4zuki 0:b3c8fdd01601 27
Kazuki Yamamoto 30:d5c18e268866 28 AkiSpiLcd::AkiSpiLcd(PinName mosi, PinName miso, PinName sck, PinName csl,
Kazuki Yamamoto 30:d5c18e268866 29 PinName csr)
Kazuki Yamamoto 30:d5c18e268866 30 : _spi(mosi, miso, sck), _csl(csl), _csr(csr) {
Kazuki Yamamoto 30:d5c18e268866 31 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 32 _csr = 1;
Kazuki Yamamoto 30:d5c18e268866 33 _spi.format(8, 0);
Kazuki Yamamoto 32:7e37fd2ddaa4 34 _spi.frequency(1000000);
Kazuki Yamamoto 32:7e37fd2ddaa4 35 _comflag = 0;
Kazuki Yamamoto 30:d5c18e268866 36 }
Kazuki Yamamoto 30:d5c18e268866 37
Kazuki Yamamoto 30:d5c18e268866 38 void AkiSpiLcd::cls() {
Kazuki Yamamoto 32:7e37fd2ddaa4 39 _csl = 1;
Kazuki Yamamoto 30:d5c18e268866 40
Kazuki Yamamoto 32:7e37fd2ddaa4 41 _spi.write(AkiLCD_MODE::CLEAR_SCREEN | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 42 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 43
Kazuki Yamamoto 30:d5c18e268866 44 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 45
Kazuki Yamamoto 30:d5c18e268866 46 cominvert();
k4zuki 0:b3c8fdd01601 47 }
k4zuki 0:b3c8fdd01601 48
Kazuki Yamamoto 30:d5c18e268866 49 void AkiSpiLcd::cls_ram(int screen) {
Kazuki Yamamoto 30:d5c18e268866 50 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 51 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 52 _cls_ram(SCREEN0_BASE);
Kazuki Yamamoto 30:d5c18e268866 53 } else {
Kazuki Yamamoto 30:d5c18e268866 54 _cls_ram(SCREEN1_BASE);
Kazuki Yamamoto 30:d5c18e268866 55 }
Kazuki Yamamoto 30:d5c18e268866 56 }
Kazuki Yamamoto 30:d5c18e268866 57
Kazuki Yamamoto 30:d5c18e268866 58 void AkiSpiLcd::directUpdateSingle(int line, uint8_t *data) {
Kazuki Yamamoto 32:7e37fd2ddaa4 59 _csl = 1;
Kazuki Yamamoto 32:7e37fd2ddaa4 60 if (line == 0) line = 1;
Kazuki Yamamoto 30:d5c18e268866 61
Kazuki Yamamoto 32:7e37fd2ddaa4 62 _spi.write(AkiLCD_MODE::UPDATE | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 63 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 64
Kazuki Yamamoto 30:d5c18e268866 65 for (int i = 0; i < 50; i++) {
Kazuki Yamamoto 30:d5c18e268866 66 _spi.write(*(data + i));
Kazuki Yamamoto 30:d5c18e268866 67 }
Kazuki Yamamoto 30:d5c18e268866 68 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 69 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 70
Kazuki Yamamoto 30:d5c18e268866 71 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 72
Kazuki Yamamoto 30:d5c18e268866 73 cominvert();
Kazuki Yamamoto 30:d5c18e268866 74 }
Kazuki Yamamoto 30:d5c18e268866 75
Kazuki Yamamoto 30:d5c18e268866 76 void AkiSpiLcd::directUpdateMulti(int line, int length, uint8_t *data) {
Kazuki Yamamoto 32:7e37fd2ddaa4 77 if (line == 0) line = 1;
Kazuki Yamamoto 30:d5c18e268866 78
Kazuki Yamamoto 30:d5c18e268866 79 if (length > 0) {
k4zuki 18:e3f59b23dd3a 80 _csl = 1;
Kazuki Yamamoto 32:7e37fd2ddaa4 81
Kazuki Yamamoto 30:d5c18e268866 82 for (int j = 1; j <= length; j++) {
Kazuki Yamamoto 32:7e37fd2ddaa4 83 _spi.write(AkiLCD_MODE::UPDATE | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 84 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 85 for (int i = 0; i < 50; i++) {
Kazuki Yamamoto 32:7e37fd2ddaa4 86 _spi.write(*(data + (50 * j + i)));
Kazuki Yamamoto 30:d5c18e268866 87 }
Kazuki Yamamoto 30:d5c18e268866 88 line += 1;
k4zuki 0:b3c8fdd01601 89 }
k4zuki 0:b3c8fdd01601 90 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 91 _spi.write(0x00);
Kazuki Yamamoto 32:7e37fd2ddaa4 92
k4zuki 18:e3f59b23dd3a 93 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 94 }
Kazuki Yamamoto 30:d5c18e268866 95 cominvert();
k4zuki 0:b3c8fdd01601 96 }
k4zuki 0:b3c8fdd01601 97
Kazuki Yamamoto 30:d5c18e268866 98 void AkiSpiLcd::cominvert() {
Kazuki Yamamoto 30:d5c18e268866 99 _csl = 1;
k4zuki 0:b3c8fdd01601 100
Kazuki Yamamoto 32:7e37fd2ddaa4 101 _spi.write(AkiLCD_MODE::COM_INVERT | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 102 _spi.write(0x00);
Kazuki Yamamoto 32:7e37fd2ddaa4 103
Kazuki Yamamoto 30:d5c18e268866 104 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 105 if (_comflag == 0) {
Kazuki Yamamoto 30:d5c18e268866 106 _comflag = 1;
Kazuki Yamamoto 30:d5c18e268866 107 } else {
Kazuki Yamamoto 30:d5c18e268866 108 _comflag = 0;
Kazuki Yamamoto 30:d5c18e268866 109 }
k4zuki 0:b3c8fdd01601 110 }
k4zuki 14:812873f3a933 111
k4zuki 14:812873f3a933 112 /** Reads single line (16 + 400 bits = 52 bytes) from a screen
k4zuki 3:f835b8daf9a0 113 */
Kazuki Yamamoto 30:d5c18e268866 114 void AkiSpiLcd::ramReadSingleLine(int line, uint8_t *buffer, int screen) {
Kazuki Yamamoto 30:d5c18e268866 115 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 116 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 117 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 118 } else {
Kazuki Yamamoto 30:d5c18e268866 119 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 120 }
k4zuki 14:812873f3a933 121
Kazuki Yamamoto 30:d5c18e268866 122 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 123 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 124 ram_read(address, buffer, RAMLINE_LENGTH);
k4zuki 4:844693a617dc 125 }
k4zuki 4:844693a617dc 126
k4zuki 14:812873f3a933 127 /** Reads multi lines( (16 + 400) x N bits = 52 x N bytes) from a screen
k4zuki 9:33d5888d1fb9 128 */
Kazuki Yamamoto 30:d5c18e268866 129 void AkiSpiLcd::ramReadMultiLine(int line, int length, uint8_t *buffer,
Kazuki Yamamoto 30:d5c18e268866 130 int screen) {
Kazuki Yamamoto 30:d5c18e268866 131 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 132 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 133 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 134 } else {
Kazuki Yamamoto 30:d5c18e268866 135 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 136 }
Kazuki Yamamoto 30:d5c18e268866 137 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 138 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 139 ram_read(address, buffer, RAMLINE_LENGTH * length);
k4zuki 4:844693a617dc 140 }
k4zuki 9:33d5888d1fb9 141
k4zuki 9:33d5888d1fb9 142 /** Writes single line (400 bits = 50 bytes) into a screen
k4zuki 9:33d5888d1fb9 143 */
Kazuki Yamamoto 30:d5c18e268866 144 void AkiSpiLcd::ramWriteSingleLine(int line, uint8_t *data, int screen) {
Kazuki Yamamoto 30:d5c18e268866 145 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 146 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 147 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 148 } else {
Kazuki Yamamoto 30:d5c18e268866 149 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 150 }
Kazuki Yamamoto 30:d5c18e268866 151 line--;
Kazuki Yamamoto 30:d5c18e268866 152 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 153 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 154 ram_write(address, data, 50);
k4zuki 14:812873f3a933 155 }
k4zuki 14:812873f3a933 156
k4zuki 14:812873f3a933 157 /** Writes multi lines(400 x N bits = 50 x N bytes) into a screen
k4zuki 14:812873f3a933 158 */
Kazuki Yamamoto 30:d5c18e268866 159 void AkiSpiLcd::ramWriteMultiLine(int line, int length, uint8_t *data,
Kazuki Yamamoto 30:d5c18e268866 160 int screen) {
Kazuki Yamamoto 30:d5c18e268866 161 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 162 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 163 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 164 } else {
Kazuki Yamamoto 30:d5c18e268866 165 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 166 }
Kazuki Yamamoto 30:d5c18e268866 167 // line--;
Kazuki Yamamoto 30:d5c18e268866 168 // line*=RAMLINE_LENGTH;
k4zuki 14:812873f3a933 169
Kazuki Yamamoto 30:d5c18e268866 170 int address = screen + line * RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 171 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 172 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 173 for (int i = 0; i < length; i++) {
Kazuki Yamamoto 32:7e37fd2ddaa4 174 _spi.write(AkiLCD_MODE::UPDATE | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 175 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 176 for (int j = 0; j < LINE_LENGTH; j++) {
Kazuki Yamamoto 30:d5c18e268866 177 _spi.write(*data);
Kazuki Yamamoto 30:d5c18e268866 178 data++;
k4zuki 4:844693a617dc 179 }
Kazuki Yamamoto 30:d5c18e268866 180 line++;
Kazuki Yamamoto 30:d5c18e268866 181 }
Kazuki Yamamoto 30:d5c18e268866 182 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 183 _ram_writeStatus(BYTE_MODE);
Kazuki Yamamoto 30:d5c18e268866 184 // ram_write(address,data,50*length);
k4zuki 4:844693a617dc 185 }
k4zuki 4:844693a617dc 186
k4zuki 9:33d5888d1fb9 187 /** copies whole data in screen into LCD
k4zuki 9:33d5888d1fb9 188 */
Kazuki Yamamoto 30:d5c18e268866 189 void AkiSpiLcd::ram2lcd(int startline, int length, int screen) {
Kazuki Yamamoto 30:d5c18e268866 190 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 191 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 192 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 193 } else {
Kazuki Yamamoto 30:d5c18e268866 194 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 195 }
Kazuki Yamamoto 32:7e37fd2ddaa4 196 if (startline == 0) startline = 1;
k4zuki 14:812873f3a933 197
Kazuki Yamamoto 30:d5c18e268866 198 if (length > 0) {
Kazuki Yamamoto 30:d5c18e268866 199 int address = screen + startline * RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 200 // uint8_t dummy[RAMLINE_LENGTH+2];
Kazuki Yamamoto 30:d5c18e268866 201 int dummy = 0;
k4zuki 4:844693a617dc 202
Kazuki Yamamoto 30:d5c18e268866 203 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 204 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 205 _spi.format(16, 0);
Kazuki Yamamoto 30:d5c18e268866 206 _csl = 1;
Kazuki Yamamoto 30:d5c18e268866 207 // wait_us(5);
k4zuki 18:e3f59b23dd3a 208
Kazuki Yamamoto 30:d5c18e268866 209 for (int j = 0; j <= length; j++) {
Kazuki Yamamoto 30:d5c18e268866 210 // _csl=1;
Kazuki Yamamoto 30:d5c18e268866 211 for (int k = 0; k < RAMLINE_LENGTH; k += 4) {
Kazuki Yamamoto 30:d5c18e268866 212 dummy = _spi.write(0x55de);
Kazuki Yamamoto 30:d5c18e268866 213 // dummy = _spi.write(0xde);
Kazuki Yamamoto 30:d5c18e268866 214 dummy = _spi.write(0xadaa);
Kazuki Yamamoto 30:d5c18e268866 215 // dummy = _spi.write(0xbe);
Kazuki Yamamoto 30:d5c18e268866 216 // dummy = _spi.write(0xaf);
Kazuki Yamamoto 30:d5c18e268866 217 // dummy = _spi.write(0xaa);
Kazuki Yamamoto 30:d5c18e268866 218 }
Kazuki Yamamoto 30:d5c18e268866 219 // _csl = 0;
k4zuki 4:844693a617dc 220 }
Kazuki Yamamoto 30:d5c18e268866 221 }
Kazuki Yamamoto 30:d5c18e268866 222 _spi.write(0xdead);
Kazuki Yamamoto 30:d5c18e268866 223 // wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 224 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 225 // _spi.write(0xde);
Kazuki Yamamoto 30:d5c18e268866 226 // _spi.write(0xad);
Kazuki Yamamoto 30:d5c18e268866 227 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 228 _spi.format(8, 0);
Kazuki Yamamoto 30:d5c18e268866 229 cominvert();
k4zuki 4:844693a617dc 230 }
k4zuki 9:33d5888d1fb9 231
k4zuki 16:fa277cbcc890 232 /** copies whole data in screen into LCD
k4zuki 16:fa277cbcc890 233 */
Kazuki Yamamoto 30:d5c18e268866 234 void AkiSpiLcd::ram2lcd(int screen) {
Kazuki Yamamoto 30:d5c18e268866 235 uint8_t lineBuffer[RAMLINE_LENGTH];
Kazuki Yamamoto 30:d5c18e268866 236 for (int y = 0; y < 240; y++) {
Kazuki Yamamoto 30:d5c18e268866 237 ram_read(y * RAMLINE_LENGTH + 2, lineBuffer, RAMLINE_LENGTH);
Kazuki Yamamoto 30:d5c18e268866 238 directUpdateSingle(y + 1, lineBuffer);
Kazuki Yamamoto 30:d5c18e268866 239 }
k4zuki 16:fa277cbcc890 240 }
Kazuki Yamamoto 30:d5c18e268866 241 uint8_t AkiSpiLcd::ram_read(int address) {
Kazuki Yamamoto 30:d5c18e268866 242 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 243 int result = _spi.write(0);
Kazuki Yamamoto 30:d5c18e268866 244 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 245 return (uint8_t)result;
k4zuki 9:33d5888d1fb9 246 }
k4zuki 9:33d5888d1fb9 247
Kazuki Yamamoto 30:d5c18e268866 248 void AkiSpiLcd::ram_read(int address, uint8_t *buffer, int count) {
Kazuki Yamamoto 30:d5c18e268866 249 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 250 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 251 for (int i = 0; i < count; i++) {
Kazuki Yamamoto 30:d5c18e268866 252 buffer[i] = _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 253 }
Kazuki Yamamoto 30:d5c18e268866 254 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 255 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 256 }
k4zuki 9:33d5888d1fb9 257
Kazuki Yamamoto 30:d5c18e268866 258 void AkiSpiLcd::ram_write(int address, uint8_t byte) {
Kazuki Yamamoto 30:d5c18e268866 259 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 260 _spi.write(byte);
Kazuki Yamamoto 30:d5c18e268866 261 _ram_deselect();
k4zuki 9:33d5888d1fb9 262 }
k4zuki 9:33d5888d1fb9 263
Kazuki Yamamoto 30:d5c18e268866 264 void AkiSpiLcd::ram_write(int address, uint8_t *buffer, int count) {
Kazuki Yamamoto 30:d5c18e268866 265 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 266 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 267 for (int i = 0; i < count; i++) {
Kazuki Yamamoto 30:d5c18e268866 268 _spi.write(buffer[i]);
Kazuki Yamamoto 30:d5c18e268866 269 }
Kazuki Yamamoto 30:d5c18e268866 270 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 271 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 272 }
k4zuki 9:33d5888d1fb9 273
Kazuki Yamamoto 30:d5c18e268866 274 uint8_t AkiSpiLcd::ram_readStatus() {
Kazuki Yamamoto 30:d5c18e268866 275 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 276 _spi.write(READ_STATUS);
Kazuki Yamamoto 30:d5c18e268866 277 uint8_t result = (uint8_t)_spi.write(0);
Kazuki Yamamoto 30:d5c18e268866 278 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 279 return result;
k4zuki 9:33d5888d1fb9 280 }
k4zuki 9:33d5888d1fb9 281
Kazuki Yamamoto 30:d5c18e268866 282 void AkiSpiLcd::_ram_writeStatus(uint8_t status) {
Kazuki Yamamoto 30:d5c18e268866 283 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 284 _spi.write(WRITE_STATUS);
Kazuki Yamamoto 30:d5c18e268866 285 _spi.write(status);
Kazuki Yamamoto 30:d5c18e268866 286 _ram_deselect();
k4zuki 9:33d5888d1fb9 287 }
k4zuki 9:33d5888d1fb9 288
Kazuki Yamamoto 30:d5c18e268866 289 void AkiSpiLcd::_ram_prepareCommand(uint8_t command, int address) {
Kazuki Yamamoto 30:d5c18e268866 290 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 291 _spi.write(command);
Kazuki Yamamoto 30:d5c18e268866 292 _spi.write(address >> 8);
Kazuki Yamamoto 30:d5c18e268866 293 _spi.write(address & 0xFF);
k4zuki 9:33d5888d1fb9 294 }
k4zuki 9:33d5888d1fb9 295
Kazuki Yamamoto 30:d5c18e268866 296 void AkiSpiLcd::_ram_select() { _csr = 0; }
Kazuki Yamamoto 30:d5c18e268866 297
Kazuki Yamamoto 30:d5c18e268866 298 void AkiSpiLcd::_ram_deselect() { _csr = 1; }
k4zuki 14:812873f3a933 299
Kazuki Yamamoto 30:d5c18e268866 300 void AkiSpiLcd::_cls_ram(int address) {
Kazuki Yamamoto 30:d5c18e268866 301 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 302 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 303 for (int i = 1; i <= (240); i++) {
Kazuki Yamamoto 32:7e37fd2ddaa4 304 _spi.write(AkiLCD_MODE::UPDATE | (_comflag << 6));
Kazuki Yamamoto 30:d5c18e268866 305 _spi.write((uint8_t)lcd_line[i]);
Kazuki Yamamoto 30:d5c18e268866 306 for (int j = 0; j < 50; j++) {
Kazuki Yamamoto 30:d5c18e268866 307 _spi.write(0x00);
k4zuki 14:812873f3a933 308 }
Kazuki Yamamoto 30:d5c18e268866 309 }
Kazuki Yamamoto 30:d5c18e268866 310 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 311 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 312 }