added puticon() for SB1602B

Dependencies:   mbed

Fork of TextLCD_SB1602E by Tedd OKANO

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TextLCD_SB1602E_test.cpp Source File

TextLCD_SB1602E_test.cpp

00001 /*
00002  *  LCD module "SB1602E" test application
00003  *
00004  *  SB1602E is an I2C based low voltage text LCD panel (based Sitronix ST7032 chip)
00005  *  The module by StrawberryLinux
00006  *  http://strawberry-linux.com/catalog/items?code=27002 (Online shop page (Japanese))
00007  *  http://strawberry-linux.com/pub/ST7032i.pdf (datasheet of the chip)
00008  *
00009  *  Copyright (c) 2010 Tedd OKANO
00010  *  Released under the MIT License: http://mbed.org/license/mit
00011  *
00012  *  revision 1.0  22-Jan-2010   a. 1st release
00013  *  revision 1.1  23-Jan-2010   a. class and app name has been changed from lcd_SB1602E to TextLCD_SB1602E
00014  *                              b. printf() test added
00015  *                              c. copyright notice added
00016  */
00017 
00018 #include    "mbed.h"
00019 #include    "TextLCD_SB1602E.h"
00020 
00021 #define        TEST_LOOP                    1
00022 #define        DEFAULT_TIME_INTERVAL        1.0
00023 #define        DEFAULT_TIME_INTERVAL_PUTx   0.2
00024 
00025 #define        CONTRAST_ADJUST_TEST
00026 #define        PRINTF_TEST
00027 #define        CGRAM_FUNCTION_TEST
00028 #define        PUTS_TEST_WITH_ESCAPE
00029 #define        PUTS_TEST_WITHOUT_ESCAPE
00030 #define        PUTC_TEST
00031 #define        ICON_TEST
00032 
00033 #if defined(TARGET_LPC1768)
00034 I2C                i2c( p9, p10 );        // sda, scl
00035 #else //
00036 I2C                i2c( D14, D15 );        // sda, scl
00037 #endif
00038 Serial            pc( USBTX, USBRX ); // tx, rx
00039 TextLCD_SB1602E    lcd( &i2c );
00040 
00041 static char    cg[8][8]        =    {// I hope I can improve this bitmap sometime in future (^^;
00042     { 0x1E, 0x1F, 0x1F, 0x1D, 0x1C, 0x1C, 0x1C, 0x1C },
00043     { 0x01, 0x02, 0x13, 0x1B, 0x1F, 0x1F, 0x0F, 0x15 },
00044     { 0x19, 0x1D, 0x1F, 0x0F, 0x1F, 0x0F, 0x1D, 0x18 },
00045     { 0x1F, 0x1D, 0x16, 0x1E, 0x17, 0x1F, 0x1A, 0x1C },
00046     { 0x1E, 0x1F, 0x07, 0x07, 0x1F, 0x1E, 0x00, 0x00 },
00047     { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 },
00048     { 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11 },
00049     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
00050 };
00051 
00052 void lcd_test( void );
00053 void set_lines_fixed_value( char line, char value );
00054 void block_pattaern( char direction, char polarity );
00055 
00056 
00057 int main() {
00058     lcd.puts( 0, "TextLCD_SB1602E \r" );
00059 
00060     for ( int i = 10; i > 0; i-- ) {
00061         lcd.printf( 1, "  count down: %2d\r", i );
00062         wait( 1.0 );
00063     }
00064 
00065     do {
00066         lcd_test();
00067     } while ( TEST_LOOP );
00068 }
00069 
00070 void lcd_test( void ) {
00071     char    s[ 18 ];
00072     int        i;
00073 
00074     pc.printf( "LCD test runing\n" );
00075     lcd.contrast( default_Contrast );
00076 
00077 #ifdef CONTRAST_ADJUST_TEST
00078     pc.printf( "  CONTRAST_ADJUST_TEST\n" );
00079     lcd.clear();
00080     lcd.puts( 1, "\x07\x07\x07\x07\x07 contrast()\r" );
00081     wait( DEFAULT_TIME_INTERVAL );
00082 
00083     lcd.puts( 0, "ABCDEFGHIJKLMNOP\r" );
00084 
00085     for ( int t = 0; t < 2; t++ ) {
00086         for ( i = 0; i <= 0x3F; i++ ) {
00087 
00088             lcd.printf( 1, "  cntrst = 0x%02X\r", i );
00089             lcd.contrast( i );
00090             wait ( 0.02 );
00091         }
00092 
00093         for ( i = 0x3E; i > 0 ; i-- ) {
00094             sprintf( s, "  cntrst = 0x%02X\r", i );
00095             lcd.puts( 1, s );
00096             lcd.contrast( i );
00097             wait ( 0.02 );
00098         }
00099 
00100     }
00101 
00102     lcd.contrast( default_Contrast );
00103 
00104 #endif
00105 #ifdef PRINTF_TEST
00106 
00107     pc.printf( "  PRINTF_TEST\n" );
00108     lcd.clear();
00109     lcd.puts( 1, "\x07\x07\x07\x07\x07\x07\x07 printf()\r" );
00110     wait( DEFAULT_TIME_INTERVAL );
00111 
00112     lcd.printf( 0, "%%6.4f, %%c, %%X\"\r" );
00113     for ( i = -37; i < 37; i++ ) {
00114         lcd.printf( 1, "%6.4f, %c, %x\r", (float)i / 37.0, 'a' + i, i + 37 );
00115         wait ( 0.1 );
00116     }
00117 
00118 #endif
00119 #ifdef CGRAM_FUNCTION_TEST
00120     pc.printf( "  CGRAM_FUNCTION_TEST\n" );
00121     lcd.clear();
00122     lcd.puts( 1, "\x07\x07\x07\x07 set_CGRAM()\r" );
00123     wait( DEFAULT_TIME_INTERVAL );
00124 
00125     for ( i = 0; i < 8; i++ )
00126         lcd.put_custom_char( i, cg[ i ], i, 0 );
00127 
00128     for ( i = 0; i < 8; i++ )
00129         lcd.put_custom_char( i, cg[ i ], i + 8, 0 );
00130 
00131     for ( i = 0; i < 8; i++ )
00132         lcd.put_custom_char( i, cg[ i ], i, 1 );
00133 
00134     for ( i = 0; i < 8; i++ )
00135         lcd.put_custom_char( i, cg[ i ], i + 8, 1 );
00136 
00137     wait( DEFAULT_TIME_INTERVAL );
00138     lcd.clear();
00139     lcd.set_CGRAM( 7, '\x1F' );
00140 
00141     lcd.set_CGRAM( 0, '\0' );
00142     lcd.set_CGRAM( 1, '\0' );
00143     lcd.set_CGRAM( 0, '\0' );
00144     lcd.set_CGRAM( 1, '\0' );
00145     set_lines_fixed_value( 0, 1 );
00146     set_lines_fixed_value( 1, 0 );
00147 
00148     block_pattaern( 0, 0 );
00149     block_pattaern( 0, 1 );
00150     block_pattaern( 1, 0 );
00151     block_pattaern( 1, 1 );
00152 
00153 
00154 #endif
00155 #ifdef PUTS_TEST_WITH_ESCAPE
00156     pc.printf( "  PUTS_TEST_WITH_ESCAPE\n" );
00157     lcd.clear();
00158     lcd.puts( 1, "\x07\x07\x07 puts(\"..\\r\")\r" );
00159     wait( DEFAULT_TIME_INTERVAL );
00160 
00161     lcd.puts( 0, "\rWelcome to mbed!\r" );
00162     lcd.puts( 1, "\rwww.mbed.com\r" );
00163     wait( DEFAULT_TIME_INTERVAL );
00164     lcd.puts( 0, "       This is a\r" );
00165     lcd.puts( 1, "        LCD test\r" );
00166     wait( DEFAULT_TIME_INTERVAL );
00167     lcd.puts( 0, "  22-Jan-2010\r" );
00168     lcd.puts( 1, "  Hello world!\r" );
00169     wait( DEFAULT_TIME_INTERVAL );
00170 
00171 #endif
00172 #ifdef PUTS_TEST_WITHOUT_ESCAPE
00173     pc.printf( "  PUTS_TEST_WITHOUT_ESCAPE\n" );
00174     lcd.clear();
00175     lcd.puts( 0, "\r" );
00176     lcd.puts( 1, "\x07\x07\x07\x07\x07 puts(\"..\")\r" );
00177     wait( DEFAULT_TIME_INTERVAL );
00178 
00179     lcd.puts( 0, "0" );
00180     lcd.puts( 1, "ABC" );
00181     wait( DEFAULT_TIME_INTERVAL_PUTx );
00182     lcd.puts( 0, "1" );
00183     lcd.puts( 1, "DEF" );
00184     wait( DEFAULT_TIME_INTERVAL_PUTx );
00185     lcd.puts( 0, "2" );
00186     lcd.puts( 1, "GHI" );
00187     wait( DEFAULT_TIME_INTERVAL_PUTx );
00188     lcd.puts( 0, "3" );
00189     lcd.puts( 1, "JKL" );
00190     wait( DEFAULT_TIME_INTERVAL_PUTx );
00191     lcd.puts( 0, "4" );
00192     lcd.puts( 1, "MNO" );
00193     wait( DEFAULT_TIME_INTERVAL_PUTx );
00194     lcd.puts( 0, "5" );
00195     lcd.puts( 1, "PQR" );
00196     wait( DEFAULT_TIME_INTERVAL_PUTx );
00197     lcd.puts( 0, "6" );
00198     wait( DEFAULT_TIME_INTERVAL_PUTx );
00199     lcd.puts( 0, "7" );
00200     wait( DEFAULT_TIME_INTERVAL_PUTx );
00201     lcd.puts( 0, "8" );
00202     wait( DEFAULT_TIME_INTERVAL_PUTx );
00203     lcd.puts( 0, "9" );
00204     wait( DEFAULT_TIME_INTERVAL_PUTx );
00205     lcd.puts( 0, "A" );
00206     wait( DEFAULT_TIME_INTERVAL_PUTx );
00207     lcd.puts( 0, "B" );
00208     wait( DEFAULT_TIME_INTERVAL_PUTx );
00209     lcd.puts( 0, "C" );
00210     wait( DEFAULT_TIME_INTERVAL_PUTx );
00211     lcd.puts( 0, "D" );
00212     wait( DEFAULT_TIME_INTERVAL_PUTx );
00213     lcd.puts( 0, "E" );
00214     wait( DEFAULT_TIME_INTERVAL_PUTx );
00215     lcd.puts( 0, "F" );
00216     wait( DEFAULT_TIME_INTERVAL_PUTx );
00217 
00218 #endif
00219 #ifdef PUTC_TEST
00220     pc.printf( "  PUTC_TEST\n" );
00221     lcd.clear();
00222     lcd.puts( 1, "\x07\x07\x07\x07\x07\x07\x07\x07\x07 putc()\r" );
00223     wait( DEFAULT_TIME_INTERVAL );
00224 
00225     for ( i = 0; i < 16; i++ ) {
00226         lcd.putc( 0, '0' + i );
00227         lcd.putc( 1, 'A' + i );
00228         wait( DEFAULT_TIME_INTERVAL_PUTx );
00229     }
00230 #endif
00231 #ifdef ICON_TEST
00232     pc.printf( "  ICON_TEST\n" );
00233     lcd.clear();
00234     lcd.puts( 1, "\x07\x07\x07\x07\x07\x07 puticon()\r" );
00235     unsigned short flg = 0;
00236     for (i = 0; i < 13; i++) {
00237         flg |= (1 << i);
00238         lcd.puticon(flg);
00239         wait( DEFAULT_TIME_INTERVAL_PUTx );
00240     }
00241     wait( DEFAULT_TIME_INTERVAL );
00242     lcd.puticon(0);
00243 #endif
00244 }
00245 
00246 void set_lines_fixed_value( char line, char value ) {
00247     for ( int i = 0; i < 16; i++ )
00248         lcd.putc( line, value );
00249 
00250     lcd.puts( line, "\r" );
00251 }
00252 
00253 
00254 void block_pattaern( char direction, char polarity ) {
00255     char    c[ 8 ];
00256 
00257     for ( int x = 0; x < 2; x++ ) {
00258         for ( int i = 0; i < 8; i++ ) {
00259             for ( int j = 0; j < 8; j++ ) {
00260                 if ( j <= i )
00261                     c[ (direction ? j : 7 - j) ]    = (polarity ?  0x00: ~0x00 );
00262                 else
00263                     c[ (direction ? j : 7 - j) ]    = (polarity ? ~0x00 : 0x00 );
00264             }
00265 
00266             lcd.set_CGRAM( (x ? (direction ? 0 : 1) : (direction ? 1 : 0)), c );
00267             wait( 0.05 );
00268         }
00269     }
00270 }