Basic library for SHARP LCD LS027B4DH01
Revision 0:06927342f2f1, committed 2014-05-06
- Comitter:
- k4zuki
- Date:
- Tue May 06 14:44:56 2014 +0000
- Child:
- 1:03519229f093
- Commit message:
- initial version
Changed in this revision
AkiSpiLcd.cpp | Show annotated file Show diff for this revision Revisions of this file |
AkiSpiLcd.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AkiSpiLcd.cpp Tue May 06 14:44:56 2014 +0000 @@ -0,0 +1,137 @@ +/* +this is for SHARP LCD LS027B4DH01 +by Kazuki Yamamoto, or _K4ZUKI_ +*/ +#include "AkiSpiLcd.h" + +AkiSpiLcd::AkiSpiLcd(PinName mosi,PinName sck, PinName cs, PinName disp) + :_spi(mosi,NC,sck), _cs(cs), _disp(disp) +{ + _cs=0; + _spi.format(8,0); + _spi.frequency(2000000); + comflag = modeflag = clearflag = 0; + _disp=1; +} + +void AkiSpiLcd::cls() +{ + modeflag=0; + clearflag=1; + + _cs=1; + wait_us(5); + + _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); + _spi.write(0x00); + + wait_us(5); + _cs=0; + + if(comflag == 0) { + comflag = 1; + } else { + comflag = 0; + } +} + +void AkiSpiLcd::updateSingle(int line, uint8_t* data) +{ + modeflag=1; + clearflag=0; + + _cs=1; + wait_us(5); + + _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); + _spi.write( + ( ( (line+1) & 0x01 ) << 7 )| + ( ( (line+1) & 0x02 ) << 5 )| + ( ( (line+1) & 0x04 ) << 3 )| + ( ( (line+1) & 0x08 ) << 1 )| + ( ( (line+1) & 0x10 ) >> 1 )| + ( ( (line+1) & 0x20 ) >> 3 )| + ( ( (line+1) & 0x40 ) >> 5 )| + ( ( (line+1) & 0x80 ) >> 7 ) + ); + + for(int i=0; i<50; i++) { + _spi.write( *(data+i) ); + } + _spi.write(0x00); + _spi.write(0x00); + + wait_us(5); + _cs=0; + + if(comflag == 0) { + comflag = 1; + } else { + comflag = 0; + } +} + +void AkiSpiLcd::updateMulti(int line, int length, uint8_t* data) +{ + modeflag=1; + clearflag=0; + + if(length>0) { + _cs=1; + wait_us(5); + for (int j=0; j<length; j++) { + _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); + _spi.write( + ( ( (line+1) & 0x01 ) << 7 )| + ( ( (line+1) & 0x02 ) << 5 )| + ( ( (line+1) & 0x04 ) << 3 )| + ( ( (line+1) & 0x08 ) << 1 )| + ( ( (line+1) & 0x10 ) >> 1 )| + ( ( (line+1) & 0x20 ) >> 3 )| + ( ( (line+1) & 0x40 ) >> 5 )| + ( ( (line+1) & 0x80 ) >> 7 ) + ); + + for(int i=0; i<50; i++) { + _spi.write( *(data+(50*j+i)) );//hogepic[50*j+i] + } + line+=1; + } + _spi.write(0x00); + _spi.write(0x00); + wait_us(5); + _cs=0; + } + if(comflag == 0) { + comflag = 1; + } else { + comflag = 0; + } +} + +void AkiSpiLcd::cominvert() +{ + modeflag=0; + clearflag=0; + + _cs=1; + + _spi.write( (modeflag << 7) | (comflag << 6) | (clearflag << 5) ); + _spi.write(0x00); + wait_us(5); + _cs=0; + if(comflag == 0) { + comflag = 1; + } else { + comflag = 0; + } +} + +void AkiSpiLcd::dispOn(bool disp) +{ + if(disp) { + _disp=1; + } else { + _disp=0; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AkiSpiLcd.h Tue May 06 14:44:56 2014 +0000 @@ -0,0 +1,23 @@ +/* +this is for SHARP LCD LS027B4DH01 +by Kazuki Yamamoto, or _K4ZUKI_ +*/ +#include "mbed.h" + +class AkiSpiLcd +{ +public: + AkiSpiLcd(PinName mosi,PinName sck, PinName cs, PinName disp); + void cls(); + void updateSingle(int line, uint8_t* data); + void updateMulti(int line, int length, uint8_t* data); + void cominvert(); + void dispOn(bool disp); +private: + int comflag; + int modeflag; + int clearflag; + SPI _spi; + DigitalOut _cs; + DigitalOut _disp; +};