Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
Kazuki Yamamoto
Date:
Wed Oct 19 22:26:33 2016 +0900
Revision:
30:d5c18e268866
Parent:
18:e3f59b23dd3a
Child:
31:7c7faf88edcc
apply clang-format formatter

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 1:57de84d2025c 1 /** this is for SHARP LCD LS027B4DH01
Kazuki Yamamoto 30:d5c18e268866 2 * (c) Kazuki Yamamoto, or _K4ZUKI_
k4zuki 0:b3c8fdd01601 3 */
k4zuki 0:b3c8fdd01601 4
Kazuki Yamamoto 30:d5c18e268866 5 #include "AkiSpiLcd.h"
k4zuki 0:b3c8fdd01601 6 #include "mbed.h"
Kazuki Yamamoto 30:d5c18e268866 7 // #include "Ser23K256.h"
k4zuki 11:16647ecd67ce 8 extern const uint8_t lcd_line[];
k4zuki 0:b3c8fdd01601 9
Kazuki Yamamoto 30:d5c18e268866 10 AkiSpiLcd::AkiSpiLcd(PinName mosi, PinName miso, PinName sck, PinName csl,
Kazuki Yamamoto 30:d5c18e268866 11 PinName csr)
Kazuki Yamamoto 30:d5c18e268866 12 : _spi(mosi, miso, sck), _csl(csl), _csr(csr) {
Kazuki Yamamoto 30:d5c18e268866 13 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 14 _csr = 1;
Kazuki Yamamoto 30:d5c18e268866 15 _spi.format(8, 0);
Kazuki Yamamoto 30:d5c18e268866 16 _spi.frequency(10000000);
Kazuki Yamamoto 30:d5c18e268866 17 _comflag = _modeflag = _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 18 }
Kazuki Yamamoto 30:d5c18e268866 19
Kazuki Yamamoto 30:d5c18e268866 20 void AkiSpiLcd::cls() {
Kazuki Yamamoto 30:d5c18e268866 21 _modeflag = 0;
Kazuki Yamamoto 30:d5c18e268866 22 _clearflag = 1;
Kazuki Yamamoto 30:d5c18e268866 23
Kazuki Yamamoto 30:d5c18e268866 24 _csl = 1;
Kazuki Yamamoto 30:d5c18e268866 25 wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 26
Kazuki Yamamoto 30:d5c18e268866 27 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 28 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 29
Kazuki Yamamoto 30:d5c18e268866 30 wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 31 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 32
Kazuki Yamamoto 30:d5c18e268866 33 cominvert();
k4zuki 0:b3c8fdd01601 34 }
k4zuki 0:b3c8fdd01601 35
Kazuki Yamamoto 30:d5c18e268866 36 void AkiSpiLcd::cls_ram(int screen) {
Kazuki Yamamoto 30:d5c18e268866 37 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 38 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 39 _cls_ram(SCREEN0_BASE);
Kazuki Yamamoto 30:d5c18e268866 40 } else {
Kazuki Yamamoto 30:d5c18e268866 41 _cls_ram(SCREEN1_BASE);
Kazuki Yamamoto 30:d5c18e268866 42 }
Kazuki Yamamoto 30:d5c18e268866 43 }
Kazuki Yamamoto 30:d5c18e268866 44
Kazuki Yamamoto 30:d5c18e268866 45 void AkiSpiLcd::directUpdateSingle(int line, uint8_t *data) {
Kazuki Yamamoto 30:d5c18e268866 46 _modeflag = 1;
Kazuki Yamamoto 30:d5c18e268866 47 _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 48
Kazuki Yamamoto 30:d5c18e268866 49 _csl = 1;
Kazuki Yamamoto 30:d5c18e268866 50 wait_us(1);
Kazuki Yamamoto 30:d5c18e268866 51
Kazuki Yamamoto 30:d5c18e268866 52 if (line == 0)
Kazuki Yamamoto 30:d5c18e268866 53 line = 1;
k4zuki 0:b3c8fdd01601 54
Kazuki Yamamoto 30:d5c18e268866 55 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 56 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 57
Kazuki Yamamoto 30:d5c18e268866 58 for (int i = 0; i < 50; i++) {
Kazuki Yamamoto 30:d5c18e268866 59 _spi.write(*(data + i));
Kazuki Yamamoto 30:d5c18e268866 60 }
Kazuki Yamamoto 30:d5c18e268866 61 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 62 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 63
Kazuki Yamamoto 30:d5c18e268866 64 wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 65 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 66
Kazuki Yamamoto 30:d5c18e268866 67 cominvert();
Kazuki Yamamoto 30:d5c18e268866 68 }
Kazuki Yamamoto 30:d5c18e268866 69
Kazuki Yamamoto 30:d5c18e268866 70 void AkiSpiLcd::directUpdateMulti(int line, int length, uint8_t *data) {
Kazuki Yamamoto 30:d5c18e268866 71 _modeflag = 1;
Kazuki Yamamoto 30:d5c18e268866 72 _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 73
Kazuki Yamamoto 30:d5c18e268866 74 if (line == 0)
Kazuki Yamamoto 30:d5c18e268866 75 line = 1;
Kazuki Yamamoto 30:d5c18e268866 76
Kazuki Yamamoto 30:d5c18e268866 77 if (length > 0) {
k4zuki 18:e3f59b23dd3a 78 _csl = 1;
k4zuki 0:b3c8fdd01601 79 wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 80 for (int j = 1; j <= length; j++) {
Kazuki Yamamoto 30:d5c18e268866 81 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 82 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 83 for (int i = 0; i < 50; i++) {
Kazuki Yamamoto 30:d5c18e268866 84 _spi.write(*(data + (50 * j + i))); // hogepic[50*j+i]
Kazuki Yamamoto 30:d5c18e268866 85 }
Kazuki Yamamoto 30:d5c18e268866 86 line += 1;
k4zuki 0:b3c8fdd01601 87 }
k4zuki 0:b3c8fdd01601 88 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 89 _spi.write(0x00);
k4zuki 0:b3c8fdd01601 90 wait_us(5);
k4zuki 18:e3f59b23dd3a 91 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 92 }
Kazuki Yamamoto 30:d5c18e268866 93 cominvert();
k4zuki 0:b3c8fdd01601 94 }
k4zuki 0:b3c8fdd01601 95
Kazuki Yamamoto 30:d5c18e268866 96 void AkiSpiLcd::cominvert() {
Kazuki Yamamoto 30:d5c18e268866 97 _modeflag = 0;
Kazuki Yamamoto 30:d5c18e268866 98 _clearflag = 0;
k4zuki 14:812873f3a933 99
Kazuki Yamamoto 30:d5c18e268866 100 _csl = 1;
k4zuki 0:b3c8fdd01601 101
Kazuki Yamamoto 30:d5c18e268866 102 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 103 _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 104 // wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 105 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 106 if (_comflag == 0) {
Kazuki Yamamoto 30:d5c18e268866 107 _comflag = 1;
Kazuki Yamamoto 30:d5c18e268866 108 } else {
Kazuki Yamamoto 30:d5c18e268866 109 _comflag = 0;
Kazuki Yamamoto 30:d5c18e268866 110 }
k4zuki 0:b3c8fdd01601 111 }
k4zuki 14:812873f3a933 112
k4zuki 14:812873f3a933 113 /** Reads single line (16 + 400 bits = 52 bytes) from a screen
k4zuki 3:f835b8daf9a0 114 */
Kazuki Yamamoto 30:d5c18e268866 115 void AkiSpiLcd::ramReadSingleLine(int line, uint8_t *buffer, int screen) {
Kazuki Yamamoto 30:d5c18e268866 116 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 117 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 118 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 119 } else {
Kazuki Yamamoto 30:d5c18e268866 120 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 121 }
k4zuki 14:812873f3a933 122
Kazuki Yamamoto 30:d5c18e268866 123 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 124 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 125 ram_read(address, buffer, RAMLINE_LENGTH);
k4zuki 4:844693a617dc 126 }
k4zuki 4:844693a617dc 127
k4zuki 14:812873f3a933 128 /** Reads multi lines( (16 + 400) x N bits = 52 x N bytes) from a screen
k4zuki 9:33d5888d1fb9 129 */
Kazuki Yamamoto 30:d5c18e268866 130 void AkiSpiLcd::ramReadMultiLine(int line, int length, uint8_t *buffer,
Kazuki Yamamoto 30:d5c18e268866 131 int screen) {
Kazuki Yamamoto 30:d5c18e268866 132 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 133 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 134 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 135 } else {
Kazuki Yamamoto 30:d5c18e268866 136 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 137 }
Kazuki Yamamoto 30:d5c18e268866 138 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 139 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 140 ram_read(address, buffer, RAMLINE_LENGTH * length);
k4zuki 4:844693a617dc 141 }
k4zuki 9:33d5888d1fb9 142
k4zuki 9:33d5888d1fb9 143 /** Writes single line (400 bits = 50 bytes) into a screen
k4zuki 9:33d5888d1fb9 144 */
Kazuki Yamamoto 30:d5c18e268866 145 void AkiSpiLcd::ramWriteSingleLine(int line, uint8_t *data, int screen) {
Kazuki Yamamoto 30:d5c18e268866 146 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 147 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 148 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 149 } else {
Kazuki Yamamoto 30:d5c18e268866 150 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 151 }
Kazuki Yamamoto 30:d5c18e268866 152 line--;
Kazuki Yamamoto 30:d5c18e268866 153 line *= RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 154 int address = screen + line;
Kazuki Yamamoto 30:d5c18e268866 155 ram_write(address, data, 50);
k4zuki 14:812873f3a933 156 }
k4zuki 14:812873f3a933 157
k4zuki 14:812873f3a933 158 /** Writes multi lines(400 x N bits = 50 x N bytes) into a screen
k4zuki 14:812873f3a933 159 */
Kazuki Yamamoto 30:d5c18e268866 160 void AkiSpiLcd::ramWriteMultiLine(int line, int length, uint8_t *data,
Kazuki Yamamoto 30:d5c18e268866 161 int screen) {
Kazuki Yamamoto 30:d5c18e268866 162 _modeflag = 1;
Kazuki Yamamoto 30:d5c18e268866 163 _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 164 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 165 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 166 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 167 } else {
Kazuki Yamamoto 30:d5c18e268866 168 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 169 }
Kazuki Yamamoto 30:d5c18e268866 170 // line--;
Kazuki Yamamoto 30:d5c18e268866 171 // line*=RAMLINE_LENGTH;
k4zuki 14:812873f3a933 172
Kazuki Yamamoto 30:d5c18e268866 173 int address = screen + line * RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 174 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 175 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 176 for (int i = 0; i < length; i++) {
Kazuki Yamamoto 30:d5c18e268866 177 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 178 _spi.write((uint8_t)lcd_line[line]);
Kazuki Yamamoto 30:d5c18e268866 179 for (int j = 0; j < LINE_LENGTH; j++) {
Kazuki Yamamoto 30:d5c18e268866 180 _spi.write(*data);
Kazuki Yamamoto 30:d5c18e268866 181 data++;
k4zuki 4:844693a617dc 182 }
Kazuki Yamamoto 30:d5c18e268866 183 line++;
Kazuki Yamamoto 30:d5c18e268866 184 }
Kazuki Yamamoto 30:d5c18e268866 185 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 186 _ram_writeStatus(BYTE_MODE);
Kazuki Yamamoto 30:d5c18e268866 187 // ram_write(address,data,50*length);
k4zuki 4:844693a617dc 188 }
k4zuki 4:844693a617dc 189
k4zuki 9:33d5888d1fb9 190 /** copies whole data in screen into LCD
k4zuki 9:33d5888d1fb9 191 */
Kazuki Yamamoto 30:d5c18e268866 192 void AkiSpiLcd::ram2lcd(int startline, int length, int screen) {
Kazuki Yamamoto 30:d5c18e268866 193 _modeflag = 1;
Kazuki Yamamoto 30:d5c18e268866 194 _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 195 screen &= 1;
Kazuki Yamamoto 30:d5c18e268866 196 if (screen == SCREEN0) {
Kazuki Yamamoto 30:d5c18e268866 197 screen = SCREEN0_BASE;
Kazuki Yamamoto 30:d5c18e268866 198 } else {
Kazuki Yamamoto 30:d5c18e268866 199 screen = SCREEN1_BASE;
Kazuki Yamamoto 30:d5c18e268866 200 }
Kazuki Yamamoto 30:d5c18e268866 201 if (startline == 0)
Kazuki Yamamoto 30:d5c18e268866 202 startline = 1;
k4zuki 14:812873f3a933 203
Kazuki Yamamoto 30:d5c18e268866 204 if (length > 0) {
k4zuki 14:812873f3a933 205
Kazuki Yamamoto 30:d5c18e268866 206 int address = screen + startline * RAMLINE_LENGTH;
Kazuki Yamamoto 30:d5c18e268866 207 // uint8_t dummy[RAMLINE_LENGTH+2];
Kazuki Yamamoto 30:d5c18e268866 208 int dummy = 0;
k4zuki 4:844693a617dc 209
Kazuki Yamamoto 30:d5c18e268866 210 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 211 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 212 _spi.format(16, 0);
Kazuki Yamamoto 30:d5c18e268866 213 _csl = 1;
Kazuki Yamamoto 30:d5c18e268866 214 // wait_us(5);
k4zuki 18:e3f59b23dd3a 215
Kazuki Yamamoto 30:d5c18e268866 216 for (int j = 0; j <= length; j++) {
Kazuki Yamamoto 30:d5c18e268866 217 // _csl=1;
Kazuki Yamamoto 30:d5c18e268866 218 for (int k = 0; k < RAMLINE_LENGTH; k += 4) {
Kazuki Yamamoto 30:d5c18e268866 219 dummy = _spi.write(0x55de);
Kazuki Yamamoto 30:d5c18e268866 220 // dummy = _spi.write(0xde);
Kazuki Yamamoto 30:d5c18e268866 221 dummy = _spi.write(0xadaa);
Kazuki Yamamoto 30:d5c18e268866 222 // dummy = _spi.write(0xbe);
Kazuki Yamamoto 30:d5c18e268866 223 // dummy = _spi.write(0xaf);
Kazuki Yamamoto 30:d5c18e268866 224 // dummy = _spi.write(0xaa);
Kazuki Yamamoto 30:d5c18e268866 225 }
Kazuki Yamamoto 30:d5c18e268866 226 // _csl = 0;
k4zuki 4:844693a617dc 227 }
Kazuki Yamamoto 30:d5c18e268866 228 }
Kazuki Yamamoto 30:d5c18e268866 229 _spi.write(0xdead);
Kazuki Yamamoto 30:d5c18e268866 230 // wait_us(5);
Kazuki Yamamoto 30:d5c18e268866 231 _csl = 0;
Kazuki Yamamoto 30:d5c18e268866 232 // _spi.write(0xde);
Kazuki Yamamoto 30:d5c18e268866 233 // _spi.write(0xad);
Kazuki Yamamoto 30:d5c18e268866 234 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 235 _spi.format(8, 0);
Kazuki Yamamoto 30:d5c18e268866 236 cominvert();
k4zuki 4:844693a617dc 237 }
k4zuki 9:33d5888d1fb9 238
k4zuki 16:fa277cbcc890 239 /** copies whole data in screen into LCD
k4zuki 16:fa277cbcc890 240 */
Kazuki Yamamoto 30:d5c18e268866 241 void AkiSpiLcd::ram2lcd(int screen) {
Kazuki Yamamoto 30:d5c18e268866 242 uint8_t lineBuffer[RAMLINE_LENGTH];
Kazuki Yamamoto 30:d5c18e268866 243 for (int y = 0; y < 240; y++) {
Kazuki Yamamoto 30:d5c18e268866 244 ram_read(y * RAMLINE_LENGTH + 2, lineBuffer, RAMLINE_LENGTH);
Kazuki Yamamoto 30:d5c18e268866 245 directUpdateSingle(y + 1, lineBuffer);
Kazuki Yamamoto 30:d5c18e268866 246 }
k4zuki 16:fa277cbcc890 247 }
Kazuki Yamamoto 30:d5c18e268866 248 uint8_t AkiSpiLcd::ram_read(int address) {
Kazuki Yamamoto 30:d5c18e268866 249 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 250 int result = _spi.write(0);
Kazuki Yamamoto 30:d5c18e268866 251 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 252 return (uint8_t)result;
k4zuki 9:33d5888d1fb9 253 }
k4zuki 9:33d5888d1fb9 254
Kazuki Yamamoto 30:d5c18e268866 255 void AkiSpiLcd::ram_read(int address, uint8_t *buffer, int count) {
Kazuki Yamamoto 30:d5c18e268866 256 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 257 _ram_prepareCommand(READ, address);
Kazuki Yamamoto 30:d5c18e268866 258 for (int i = 0; i < count; i++) {
Kazuki Yamamoto 30:d5c18e268866 259 buffer[i] = _spi.write(0x00);
Kazuki Yamamoto 30:d5c18e268866 260 }
Kazuki Yamamoto 30:d5c18e268866 261 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 262 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 263 }
k4zuki 9:33d5888d1fb9 264
Kazuki Yamamoto 30:d5c18e268866 265 void AkiSpiLcd::ram_write(int address, uint8_t byte) {
Kazuki Yamamoto 30:d5c18e268866 266 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 267 _spi.write(byte);
Kazuki Yamamoto 30:d5c18e268866 268 _ram_deselect();
k4zuki 9:33d5888d1fb9 269 }
k4zuki 9:33d5888d1fb9 270
Kazuki Yamamoto 30:d5c18e268866 271 void AkiSpiLcd::ram_write(int address, uint8_t *buffer, int count) {
Kazuki Yamamoto 30:d5c18e268866 272 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 273 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 274 for (int i = 0; i < count; i++) {
Kazuki Yamamoto 30:d5c18e268866 275 _spi.write(buffer[i]);
Kazuki Yamamoto 30:d5c18e268866 276 }
Kazuki Yamamoto 30:d5c18e268866 277 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 278 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 279 }
k4zuki 9:33d5888d1fb9 280
Kazuki Yamamoto 30:d5c18e268866 281 uint8_t AkiSpiLcd::ram_readStatus() {
Kazuki Yamamoto 30:d5c18e268866 282 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 283 _spi.write(READ_STATUS);
Kazuki Yamamoto 30:d5c18e268866 284 uint8_t result = (uint8_t)_spi.write(0);
Kazuki Yamamoto 30:d5c18e268866 285 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 286 return result;
k4zuki 9:33d5888d1fb9 287 }
k4zuki 9:33d5888d1fb9 288
Kazuki Yamamoto 30:d5c18e268866 289 void AkiSpiLcd::_ram_writeStatus(uint8_t status) {
Kazuki Yamamoto 30:d5c18e268866 290 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 291 _spi.write(WRITE_STATUS);
Kazuki Yamamoto 30:d5c18e268866 292 _spi.write(status);
Kazuki Yamamoto 30:d5c18e268866 293 _ram_deselect();
k4zuki 9:33d5888d1fb9 294 }
k4zuki 9:33d5888d1fb9 295
Kazuki Yamamoto 30:d5c18e268866 296 void AkiSpiLcd::_ram_prepareCommand(uint8_t command, int address) {
Kazuki Yamamoto 30:d5c18e268866 297 _ram_select();
Kazuki Yamamoto 30:d5c18e268866 298 _spi.write(command);
Kazuki Yamamoto 30:d5c18e268866 299 _spi.write(address >> 8);
Kazuki Yamamoto 30:d5c18e268866 300 _spi.write(address & 0xFF);
k4zuki 9:33d5888d1fb9 301 }
k4zuki 9:33d5888d1fb9 302
Kazuki Yamamoto 30:d5c18e268866 303 void AkiSpiLcd::_ram_select() { _csr = 0; }
Kazuki Yamamoto 30:d5c18e268866 304
Kazuki Yamamoto 30:d5c18e268866 305 void AkiSpiLcd::_ram_deselect() { _csr = 1; }
k4zuki 14:812873f3a933 306
Kazuki Yamamoto 30:d5c18e268866 307 void AkiSpiLcd::_cls_ram(int address) {
Kazuki Yamamoto 30:d5c18e268866 308 _modeflag = 1;
Kazuki Yamamoto 30:d5c18e268866 309 _clearflag = 0;
Kazuki Yamamoto 30:d5c18e268866 310 _ram_writeStatus(SEQUENTIAL_MODE);
Kazuki Yamamoto 30:d5c18e268866 311 _ram_prepareCommand(WRITE, address);
Kazuki Yamamoto 30:d5c18e268866 312 for (int i = 1; i <= (240); i++) {
Kazuki Yamamoto 30:d5c18e268866 313 _spi.write((_modeflag << 7) | (_comflag << 6) | (_clearflag << 5));
Kazuki Yamamoto 30:d5c18e268866 314 _spi.write((uint8_t)lcd_line[i]);
Kazuki Yamamoto 30:d5c18e268866 315 for (int j = 0; j < 50; j++) {
Kazuki Yamamoto 30:d5c18e268866 316 _spi.write(0x00);
k4zuki 14:812873f3a933 317 }
Kazuki Yamamoto 30:d5c18e268866 318 }
Kazuki Yamamoto 30:d5c18e268866 319 _ram_deselect();
Kazuki Yamamoto 30:d5c18e268866 320 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 321 }