Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Mon Jan 12 12:04:01 2015 +0000
Revision:
16:fa277cbcc890
Parent:
15:704dd6e688ab
Child:
17:3b47e5044518
[ NEW ] ram2lcd( int screen )

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++) {
k4zuki 9:33d5888d1fb9 280 buffer[i] = _spi.write(0);
k4zuki 9:33d5888d1fb9 281 }
k4zuki 14:812873f3a933 282 _ram_deselect();
k4zuki 14:812873f3a933 283 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 284 }
k4zuki 9:33d5888d1fb9 285
k4zuki 9:33d5888d1fb9 286 void AkiSpiLcd::ram_write(int address, uint8_t byte)
k4zuki 9:33d5888d1fb9 287 {
k4zuki 14:812873f3a933 288 _ram_prepareCommand(WRITE, address);
k4zuki 9:33d5888d1fb9 289 _spi.write(byte);
k4zuki 14:812873f3a933 290 _ram_deselect();
k4zuki 9:33d5888d1fb9 291 }
k4zuki 9:33d5888d1fb9 292
k4zuki 9:33d5888d1fb9 293 void AkiSpiLcd::ram_write(int address, uint8_t * buffer, int count)
k4zuki 9:33d5888d1fb9 294 {
k4zuki 14:812873f3a933 295 _ram_writeStatus(SEQUENTIAL_MODE);
k4zuki 14:812873f3a933 296 _ram_prepareCommand(WRITE, address);
k4zuki 9:33d5888d1fb9 297 for (int i = 0; i < count; i++) {
k4zuki 9:33d5888d1fb9 298 _spi.write(buffer[i]);
k4zuki 9:33d5888d1fb9 299 }
k4zuki 14:812873f3a933 300 _ram_deselect();
k4zuki 14:812873f3a933 301 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 302 }
k4zuki 9:33d5888d1fb9 303
k4zuki 9:33d5888d1fb9 304 uint8_t AkiSpiLcd::ram_readStatus()
k4zuki 9:33d5888d1fb9 305 {
k4zuki 14:812873f3a933 306 _ram_select();
k4zuki 9:33d5888d1fb9 307 _spi.write(READ_STATUS);
k4zuki 9:33d5888d1fb9 308 uint8_t result = (uint8_t) _spi.write(0);
k4zuki 14:812873f3a933 309 _ram_deselect();
k4zuki 9:33d5888d1fb9 310 return result;
k4zuki 9:33d5888d1fb9 311 }
k4zuki 9:33d5888d1fb9 312
k4zuki 14:812873f3a933 313 void AkiSpiLcd::_ram_writeStatus(uint8_t status)
k4zuki 9:33d5888d1fb9 314 {
k4zuki 14:812873f3a933 315 _ram_select();
k4zuki 9:33d5888d1fb9 316 _spi.write(WRITE_STATUS);
k4zuki 9:33d5888d1fb9 317 _spi.write(status);
k4zuki 14:812873f3a933 318 _ram_deselect();
k4zuki 9:33d5888d1fb9 319 }
k4zuki 9:33d5888d1fb9 320
k4zuki 14:812873f3a933 321 void AkiSpiLcd::_ram_prepareCommand(uint8_t command, int address)
k4zuki 9:33d5888d1fb9 322 {
k4zuki 14:812873f3a933 323 _ram_select();
k4zuki 9:33d5888d1fb9 324 _spi.write(command);
k4zuki 9:33d5888d1fb9 325 _spi.write(address >> 8);
k4zuki 9:33d5888d1fb9 326 _spi.write(address & 0xFF);
k4zuki 9:33d5888d1fb9 327 }
k4zuki 9:33d5888d1fb9 328
k4zuki 14:812873f3a933 329 void AkiSpiLcd::_ram_select()
k4zuki 9:33d5888d1fb9 330 {
k4zuki 14:812873f3a933 331 _csr = 0;
k4zuki 14:812873f3a933 332 }
k4zuki 14:812873f3a933 333
k4zuki 14:812873f3a933 334 void AkiSpiLcd::_ram_deselect()
k4zuki 14:812873f3a933 335 {
k4zuki 14:812873f3a933 336 _csr = 1;
k4zuki 9:33d5888d1fb9 337 }
k4zuki 9:33d5888d1fb9 338
k4zuki 14:812873f3a933 339 void AkiSpiLcd::_cls_ram( int address )
k4zuki 9:33d5888d1fb9 340 {
k4zuki 14:812873f3a933 341 _modeflag=1;
k4zuki 14:812873f3a933 342 _clearflag=0;
k4zuki 14:812873f3a933 343 _ram_writeStatus(SEQUENTIAL_MODE);
k4zuki 14:812873f3a933 344 _ram_prepareCommand(WRITE, address);
k4zuki 14:812873f3a933 345 for (int i = 1; i <= (240); i++) {
k4zuki 14:812873f3a933 346 _spi.write( (_modeflag << 7) | (_comflag << 6) | (_clearflag << 5) );
k4zuki 14:812873f3a933 347 _spi.write( (uint8_t)lcd_line[i] );
k4zuki 14:812873f3a933 348 for(int j = 0; j < 50; j++) {
k4zuki 14:812873f3a933 349 _spi.write(0x00);
k4zuki 14:812873f3a933 350 }
k4zuki 14:812873f3a933 351
k4zuki 14:812873f3a933 352 }
k4zuki 14:812873f3a933 353 _ram_deselect();
k4zuki 14:812873f3a933 354 _ram_writeStatus(BYTE_MODE);
k4zuki 9:33d5888d1fb9 355 }