Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
m_wakayama
Date:
Fri Jan 23 11:39:54 2015 +0000
Revision:
17:3b47e5044518
Parent:
16:fa277cbcc890
Child:
18:e3f59b23dd3a
screen base address change; remove RAMLINE_BASE; 0x3000 -> 0x4000 (SCREEN1_BASE)

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