Basic library for SHARP LCD LS027B4DH01

Committer:
k4zuki
Date:
Tue May 06 14:44:56 2014 +0000
Revision:
0:06927342f2f1
initial version

Who changed what in which revision?

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