Basic library for SHARP LCD LS027B4DH01/LS027B7DH01
Dependents: AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example
AkiSpiLcd.cpp@18:e3f59b23dd3a, 2016-07-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |