Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Wed Jul 13 07:20:18 2016 +0000
Revision:
18:e3f59b23dd3a
Parent:
17:3b47e5044518
Child:
30:d5c18e268866
formatting

Who changed what in which revision?

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