scrolling example code for SHARP LCD LS027B4DH01/LS027B7DH01, using AkiSpiLcd library
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:
- schematic example2:
- example1 photo:
- example2 photo:
- example2 movie (mpeg4 movie):
AkiSpiLcd.cpp@1:be675380f70b, 2014-05-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |