Basic library for SHARP LCD LS027B4DH01/LS027B7DH01
Dependents: AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example
AkiSpiLcd.cpp@1:57de84d2025c, 2014-05-06 (annotated)
- Committer:
- k4zuki
- Date:
- Tue May 06 17:16:05 2014 +0000
- Revision:
- 1:57de84d2025c
- Parent:
- 0:b3c8fdd01601
- Child:
- 2:01979b296ab5
typo fix
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 | 0:b3c8fdd01601 | 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 | 0:b3c8fdd01601 | 7 | |
k4zuki | 0:b3c8fdd01601 | 8 | AkiSpiLcd::AkiSpiLcd(PinName mosi,PinName sck, PinName cs, PinName disp) |
k4zuki | 0:b3c8fdd01601 | 9 | :_spi(mosi,NC,sck), _cs(cs), _disp(disp) |
k4zuki | 0:b3c8fdd01601 | 10 | { |
k4zuki | 0:b3c8fdd01601 | 11 | _cs=0; |
k4zuki | 0:b3c8fdd01601 | 12 | _spi.format(8,0); |
k4zuki | 0:b3c8fdd01601 | 13 | _spi.frequency(2000000); |
k4zuki | 0:b3c8fdd01601 | 14 | comflag = modeflag = clearflag = 0; |
k4zuki | 0:b3c8fdd01601 | 15 | _disp=1; |
k4zuki | 0:b3c8fdd01601 | 16 | } |
k4zuki | 0:b3c8fdd01601 | 17 | |
k4zuki | 0:b3c8fdd01601 | 18 | void AkiSpiLcd::cls() |
k4zuki | 0:b3c8fdd01601 | 19 | { |
k4zuki | 0:b3c8fdd01601 | 20 | modeflag=0; |
k4zuki | 0:b3c8fdd01601 | 21 | clearflag=1; |
k4zuki | 0:b3c8fdd01601 | 22 | |
k4zuki | 0:b3c8fdd01601 | 23 | _cs=1; |
k4zuki | 0:b3c8fdd01601 | 24 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 25 | |
k4zuki | 0:b3c8fdd01601 | 26 | _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); |
k4zuki | 0:b3c8fdd01601 | 27 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 28 | |
k4zuki | 0:b3c8fdd01601 | 29 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 30 | _cs=0; |
k4zuki | 0:b3c8fdd01601 | 31 | |
k4zuki | 0:b3c8fdd01601 | 32 | if(comflag == 0) { |
k4zuki | 0:b3c8fdd01601 | 33 | comflag = 1; |
k4zuki | 0:b3c8fdd01601 | 34 | } else { |
k4zuki | 0:b3c8fdd01601 | 35 | comflag = 0; |
k4zuki | 0:b3c8fdd01601 | 36 | } |
k4zuki | 0:b3c8fdd01601 | 37 | } |
k4zuki | 0:b3c8fdd01601 | 38 | |
k4zuki | 0:b3c8fdd01601 | 39 | void AkiSpiLcd::updateSingle(int line, uint8_t* data) |
k4zuki | 0:b3c8fdd01601 | 40 | { |
k4zuki | 0:b3c8fdd01601 | 41 | modeflag=1; |
k4zuki | 0:b3c8fdd01601 | 42 | clearflag=0; |
k4zuki | 0:b3c8fdd01601 | 43 | |
k4zuki | 0:b3c8fdd01601 | 44 | _cs=1; |
k4zuki | 0:b3c8fdd01601 | 45 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 46 | |
k4zuki | 0:b3c8fdd01601 | 47 | _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); |
k4zuki | 0:b3c8fdd01601 | 48 | _spi.write( |
k4zuki | 0:b3c8fdd01601 | 49 | ( ( (line+1) & 0x01 ) << 7 )| |
k4zuki | 0:b3c8fdd01601 | 50 | ( ( (line+1) & 0x02 ) << 5 )| |
k4zuki | 0:b3c8fdd01601 | 51 | ( ( (line+1) & 0x04 ) << 3 )| |
k4zuki | 0:b3c8fdd01601 | 52 | ( ( (line+1) & 0x08 ) << 1 )| |
k4zuki | 0:b3c8fdd01601 | 53 | ( ( (line+1) & 0x10 ) >> 1 )| |
k4zuki | 0:b3c8fdd01601 | 54 | ( ( (line+1) & 0x20 ) >> 3 )| |
k4zuki | 0:b3c8fdd01601 | 55 | ( ( (line+1) & 0x40 ) >> 5 )| |
k4zuki | 0:b3c8fdd01601 | 56 | ( ( (line+1) & 0x80 ) >> 7 ) |
k4zuki | 0:b3c8fdd01601 | 57 | ); |
k4zuki | 0:b3c8fdd01601 | 58 | |
k4zuki | 0:b3c8fdd01601 | 59 | for(int i=0; i<50; i++) { |
k4zuki | 0:b3c8fdd01601 | 60 | _spi.write( *(data+i) ); |
k4zuki | 0:b3c8fdd01601 | 61 | } |
k4zuki | 0:b3c8fdd01601 | 62 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 63 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 64 | |
k4zuki | 0:b3c8fdd01601 | 65 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 66 | _cs=0; |
k4zuki | 0:b3c8fdd01601 | 67 | |
k4zuki | 0:b3c8fdd01601 | 68 | if(comflag == 0) { |
k4zuki | 0:b3c8fdd01601 | 69 | comflag = 1; |
k4zuki | 0:b3c8fdd01601 | 70 | } else { |
k4zuki | 0:b3c8fdd01601 | 71 | comflag = 0; |
k4zuki | 0:b3c8fdd01601 | 72 | } |
k4zuki | 0:b3c8fdd01601 | 73 | } |
k4zuki | 0:b3c8fdd01601 | 74 | |
k4zuki | 0:b3c8fdd01601 | 75 | void AkiSpiLcd::updateMulti(int line, int length, uint8_t* data) |
k4zuki | 0:b3c8fdd01601 | 76 | { |
k4zuki | 0:b3c8fdd01601 | 77 | modeflag=1; |
k4zuki | 0:b3c8fdd01601 | 78 | clearflag=0; |
k4zuki | 0:b3c8fdd01601 | 79 | |
k4zuki | 0:b3c8fdd01601 | 80 | if(length>0) { |
k4zuki | 0:b3c8fdd01601 | 81 | _cs=1; |
k4zuki | 0:b3c8fdd01601 | 82 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 83 | for (int j=0; j<length; j++) { |
k4zuki | 0:b3c8fdd01601 | 84 | _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); |
k4zuki | 0:b3c8fdd01601 | 85 | _spi.write( |
k4zuki | 0:b3c8fdd01601 | 86 | ( ( (line+1) & 0x01 ) << 7 )| |
k4zuki | 0:b3c8fdd01601 | 87 | ( ( (line+1) & 0x02 ) << 5 )| |
k4zuki | 0:b3c8fdd01601 | 88 | ( ( (line+1) & 0x04 ) << 3 )| |
k4zuki | 0:b3c8fdd01601 | 89 | ( ( (line+1) & 0x08 ) << 1 )| |
k4zuki | 0:b3c8fdd01601 | 90 | ( ( (line+1) & 0x10 ) >> 1 )| |
k4zuki | 0:b3c8fdd01601 | 91 | ( ( (line+1) & 0x20 ) >> 3 )| |
k4zuki | 0:b3c8fdd01601 | 92 | ( ( (line+1) & 0x40 ) >> 5 )| |
k4zuki | 0:b3c8fdd01601 | 93 | ( ( (line+1) & 0x80 ) >> 7 ) |
k4zuki | 0:b3c8fdd01601 | 94 | ); |
k4zuki | 0:b3c8fdd01601 | 95 | |
k4zuki | 0:b3c8fdd01601 | 96 | for(int i=0; i<50; i++) { |
k4zuki | 0:b3c8fdd01601 | 97 | _spi.write( *(data+(50*j+i)) );//hogepic[50*j+i] |
k4zuki | 0:b3c8fdd01601 | 98 | } |
k4zuki | 0:b3c8fdd01601 | 99 | line+=1; |
k4zuki | 0:b3c8fdd01601 | 100 | } |
k4zuki | 0:b3c8fdd01601 | 101 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 102 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 103 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 104 | _cs=0; |
k4zuki | 0:b3c8fdd01601 | 105 | } |
k4zuki | 0:b3c8fdd01601 | 106 | if(comflag == 0) { |
k4zuki | 0:b3c8fdd01601 | 107 | comflag = 1; |
k4zuki | 0:b3c8fdd01601 | 108 | } else { |
k4zuki | 0:b3c8fdd01601 | 109 | comflag = 0; |
k4zuki | 0:b3c8fdd01601 | 110 | } |
k4zuki | 0:b3c8fdd01601 | 111 | } |
k4zuki | 0:b3c8fdd01601 | 112 | |
k4zuki | 0:b3c8fdd01601 | 113 | void AkiSpiLcd::cominvert() |
k4zuki | 0:b3c8fdd01601 | 114 | { |
k4zuki | 0:b3c8fdd01601 | 115 | modeflag=0; |
k4zuki | 0:b3c8fdd01601 | 116 | clearflag=0; |
k4zuki | 0:b3c8fdd01601 | 117 | |
k4zuki | 0:b3c8fdd01601 | 118 | _cs=1; |
k4zuki | 0:b3c8fdd01601 | 119 | |
k4zuki | 0:b3c8fdd01601 | 120 | _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); |
k4zuki | 0:b3c8fdd01601 | 121 | _spi.write(0x00); |
k4zuki | 0:b3c8fdd01601 | 122 | wait_us(5); |
k4zuki | 0:b3c8fdd01601 | 123 | _cs=0; |
k4zuki | 0:b3c8fdd01601 | 124 | if(comflag == 0) { |
k4zuki | 0:b3c8fdd01601 | 125 | comflag = 1; |
k4zuki | 0:b3c8fdd01601 | 126 | } else { |
k4zuki | 0:b3c8fdd01601 | 127 | comflag = 0; |
k4zuki | 0:b3c8fdd01601 | 128 | } |
k4zuki | 0:b3c8fdd01601 | 129 | } |
k4zuki | 0:b3c8fdd01601 | 130 | |
k4zuki | 0:b3c8fdd01601 | 131 | void AkiSpiLcd::dispOn(bool disp) |
k4zuki | 0:b3c8fdd01601 | 132 | { |
k4zuki | 0:b3c8fdd01601 | 133 | if(disp) { |
k4zuki | 0:b3c8fdd01601 | 134 | _disp=1; |
k4zuki | 0:b3c8fdd01601 | 135 | } else { |
k4zuki | 0:b3c8fdd01601 | 136 | _disp=0; |
k4zuki | 0:b3c8fdd01601 | 137 | } |
k4zuki | 0:b3c8fdd01601 | 138 | } |