Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

Dependents:   AkiSpiLcd_demo AkiSpiLcd_demo2 LCDRAM AkiSpiLcd_example

Committer:
k4zuki
Date:
Tue May 06 17:25:03 2014 +0000
Revision:
2:01979b296ab5
Parent:
1:57de84d2025c
Child:
3:f835b8daf9a0
documentation created

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 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 }