scrolling example code for SHARP LCD LS027B4DH01/LS027B7DH01, using AkiSpiLcd library

Dependencies:   AkiSpiLcd mbed

This is very basic library example to access a graphic LCD LS027B4DH01 or LS027B7DH01

Import libraryAkiSpiLcd

Basic library for SHARP LCD LS027B4DH01/LS027B7DH01

  • schematic example1: /media/uploads/k4zuki/akispilcd_v2.1m.sch.png
  • schematic example2: /media/uploads/k4zuki/2.7inchshield.sch.png
  • example1 photo: /media/uploads/k4zuki/2014-09-17_20.22.26.jpg /media/uploads/k4zuki/2014-09-17_20.22.48.jpg
  • example2 photo: /media/uploads/k4zuki/2014-04-29_13.17.57.jpg
  • example2 movie (mpeg4 movie):
Committer:
k4zuki
Date:
Sun May 04 03:34:28 2014 +0000
Revision:
1:be675380f70b
Parent:
0:3569e2cfb60b
Child:
2:3554ec6df722
library fix / scrolling hogepic

Who changed what in which revision?

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