Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Mon Sep 15 14:12:33 2014 +0000
Revision:
10:eed99ef09e63
Parent:
9:33d5888d1fb9
Child:
11:16647ecd67ce
.

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