Committer:
Midimetric
Date:
Wed Dec 29 09:53:24 2010 +0000
Revision:
0:601fd83c75e0
Child:
2:d6e572640dcc
Alpha version with (poke, wipe, inv, linev, lineh, frame, rect, xchar, xfont)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Midimetric 0:601fd83c75e0 1 #include "doggy.h"
Midimetric 0:601fd83c75e0 2
Midimetric 0:601fd83c75e0 3 DogMLCD::DogMLCD( SPI& spi, PinName cs, PinName a0 ) : spi_(spi), cs_(cs), a0_(a0)
Midimetric 0:601fd83c75e0 4 {
Midimetric 0:601fd83c75e0 5 b_ = (char*)calloc( 1024, 1 );
Midimetric 0:601fd83c75e0 6 XFont = xfont_8;
Midimetric 0:601fd83c75e0 7
Midimetric 0:601fd83c75e0 8 const unsigned char c[] = {
Midimetric 0:601fd83c75e0 9 0x40, // display start line + 0-63
Midimetric 0:601fd83c75e0 10 0xa1, // ADC set 0xA1 + 0 = normal (for reverse view) / +1 = reverse (for normal view)
Midimetric 0:601fd83c75e0 11 0xc0, // common output mode + 0 = normal / + 0xF reverse
Midimetric 0:601fd83c75e0 12 0xa6, // dispaly mode 0xA6 + 0 = normal / 1 = reverse
Midimetric 0:601fd83c75e0 13 0xa2, // set bias 0xa20 + 0 = 1/9 / +1 = 1/7
Midimetric 0:601fd83c75e0 14 0x2f, // power control: 4 booster on + 2 regulator on + 1 follower on
Midimetric 0:601fd83c75e0 15 0xf8, 0x00, // set booster ratio , value 0=4x, 1=5x, 2=6x
Midimetric 0:601fd83c75e0 16 0x27, // set voltage regulator (0x20) to 7
Midimetric 0:601fd83c75e0 17 0x81, 0x14, // set electronic volume , value
Midimetric 0:601fd83c75e0 18 0xac, 0x00, // static indicator set 0xAC +0 = off / +1 = on , 0 = flash mode
Midimetric 0:601fd83c75e0 19 0xaf // display 0xAE +0 = off / +1 = on
Midimetric 0:601fd83c75e0 20 };
Midimetric 0:601fd83c75e0 21 spi_.format( 8, 0 );
Midimetric 0:601fd83c75e0 22 spi_.frequency( 1000000 );
Midimetric 0:601fd83c75e0 23 cs_ = 0;
Midimetric 0:601fd83c75e0 24 a0_ = 0;
Midimetric 0:601fd83c75e0 25 for( int i = 0 ; i < sizeof( c ); i++ )
Midimetric 0:601fd83c75e0 26 spi_.write( c[i] );
Midimetric 0:601fd83c75e0 27 cs_ = 1;
Midimetric 0:601fd83c75e0 28 }
Midimetric 0:601fd83c75e0 29 DogMLCD::~DogMLCD()
Midimetric 0:601fd83c75e0 30 {
Midimetric 0:601fd83c75e0 31 free( b_ );
Midimetric 0:601fd83c75e0 32 }
Midimetric 0:601fd83c75e0 33
Midimetric 0:601fd83c75e0 34 #define FASTPOKE( x, y ) b_[ ( ( y & 56 ) << 4 ) + ( x & 127 ) ] |= DOGMLCD_on[ y & 7 ];
Midimetric 0:601fd83c75e0 35 #define FASTWIPE( x, y ) b_[ ( ( y & 56 ) << 4 ) + ( x & 127 ) ] |= DOGMLCD_off[ y & 7 ];
Midimetric 0:601fd83c75e0 36 #define FASTINV( x, y ) b_[ ( ( y & 56 ) << 4 ) + ( x & 127 ) ] ^= DOGMLCD_on[ y & 7 ];
Midimetric 0:601fd83c75e0 37
Midimetric 0:601fd83c75e0 38 void DogMLCD::Poke( int x, int y )
Midimetric 0:601fd83c75e0 39 {
Midimetric 0:601fd83c75e0 40 if( ( x & 0xFF80 ) == 0 && ( y & 0xFFC0 ) == 0 )
Midimetric 0:601fd83c75e0 41 FASTPOKE( x, y )
Midimetric 0:601fd83c75e0 42 }
Midimetric 0:601fd83c75e0 43 void DogMLCD::Wipe( int x, int y )
Midimetric 0:601fd83c75e0 44 {
Midimetric 0:601fd83c75e0 45 if( ( x & 0xFF80 ) == 0 && ( y & 0xFFC0 ) == 0 )
Midimetric 0:601fd83c75e0 46 FASTWIPE( x, y )
Midimetric 0:601fd83c75e0 47 }
Midimetric 0:601fd83c75e0 48 void DogMLCD::Inv( int x, int y )
Midimetric 0:601fd83c75e0 49 {
Midimetric 0:601fd83c75e0 50 if( ( x & 0xFF80 ) == 0 && ( y & 0xFFC0 ) == 0 )
Midimetric 0:601fd83c75e0 51 FASTINV( x, y )
Midimetric 0:601fd83c75e0 52 }
Midimetric 0:601fd83c75e0 53 void DogMLCD::Clear()
Midimetric 0:601fd83c75e0 54 {
Midimetric 0:601fd83c75e0 55 int i = 1024;
Midimetric 0:601fd83c75e0 56 char* p = b_;
Midimetric 0:601fd83c75e0 57 while( i-- )
Midimetric 0:601fd83c75e0 58 *p++ = 0;
Midimetric 0:601fd83c75e0 59 }
Midimetric 0:601fd83c75e0 60 void DogMLCD::Flush()
Midimetric 0:601fd83c75e0 61 {
Midimetric 0:601fd83c75e0 62 char* p = b_;
Midimetric 0:601fd83c75e0 63 spi_.format( 8, 0 );
Midimetric 0:601fd83c75e0 64 spi_.frequency( DOGMLCD_MHZ );
Midimetric 0:601fd83c75e0 65 for( int page = 0xB0 ; page < 0xB8 ; page++ )
Midimetric 0:601fd83c75e0 66 {
Midimetric 0:601fd83c75e0 67 cs_ = 0;
Midimetric 0:601fd83c75e0 68 a0_ = 0;
Midimetric 0:601fd83c75e0 69 spi_.write( page ); spi_.write( 0x10 ); spi_.write( 0x00 );
Midimetric 0:601fd83c75e0 70
Midimetric 0:601fd83c75e0 71 a0_ = 1;
Midimetric 0:601fd83c75e0 72 int i = 128;
Midimetric 0:601fd83c75e0 73 while( i-- )
Midimetric 0:601fd83c75e0 74 spi_.write( *p++ );
Midimetric 0:601fd83c75e0 75 a0_ = 0;
Midimetric 0:601fd83c75e0 76 }
Midimetric 0:601fd83c75e0 77 cs_ = 1;
Midimetric 0:601fd83c75e0 78 }