Basic library for SHARP LCD LS027B4DH01

Files at this revision

API Documentation at this revision

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