added puticon() for SB1602B
Fork of TextLCD_SB1602E by
Tedd OKANO さんの Strawberry Linux の i2c LCD SB1602E ライブラリに SB1602B のアイコン表示メソッドを追加。STM32 Nucleo L152RE/mbed でテストしてます。
こういう時は Pull Request すべきなのかな。
TextLCD_SB1602E_test.cpp@1:39110c58e55c, 2014-05-03 (annotated)
- Committer:
- masato
- Date:
- Sat May 03 13:33:42 2014 +0000
- Revision:
- 1:39110c58e55c
- Parent:
- 0:694061176edf
add puticon() for SB1602B
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 0:694061176edf | 1 | /* |
okano | 0:694061176edf | 2 | * LCD module "SB1602E" test application |
okano | 0:694061176edf | 3 | * |
okano | 0:694061176edf | 4 | * SB1602E is an I2C based low voltage text LCD panel (based Sitronix ST7032 chip) |
okano | 0:694061176edf | 5 | * The module by StrawberryLinux |
okano | 0:694061176edf | 6 | * http://strawberry-linux.com/catalog/items?code=27002 (Online shop page (Japanese)) |
okano | 0:694061176edf | 7 | * http://strawberry-linux.com/pub/ST7032i.pdf (datasheet of the chip) |
okano | 0:694061176edf | 8 | * |
okano | 0:694061176edf | 9 | * Copyright (c) 2010 Tedd OKANO |
okano | 0:694061176edf | 10 | * Released under the MIT License: http://mbed.org/license/mit |
okano | 0:694061176edf | 11 | * |
okano | 0:694061176edf | 12 | * revision 1.0 22-Jan-2010 a. 1st release |
okano | 0:694061176edf | 13 | * revision 1.1 23-Jan-2010 a. class and app name has been changed from lcd_SB1602E to TextLCD_SB1602E |
okano | 0:694061176edf | 14 | * b. printf() test added |
okano | 0:694061176edf | 15 | * c. copyright notice added |
okano | 0:694061176edf | 16 | */ |
okano | 0:694061176edf | 17 | |
okano | 0:694061176edf | 18 | #include "mbed.h" |
okano | 0:694061176edf | 19 | #include "TextLCD_SB1602E.h" |
okano | 0:694061176edf | 20 | |
okano | 0:694061176edf | 21 | #define TEST_LOOP 1 |
okano | 0:694061176edf | 22 | #define DEFAULT_TIME_INTERVAL 1.0 |
okano | 0:694061176edf | 23 | #define DEFAULT_TIME_INTERVAL_PUTx 0.2 |
okano | 0:694061176edf | 24 | |
okano | 0:694061176edf | 25 | #define CONTRAST_ADJUST_TEST |
okano | 0:694061176edf | 26 | #define PRINTF_TEST |
okano | 0:694061176edf | 27 | #define CGRAM_FUNCTION_TEST |
okano | 0:694061176edf | 28 | #define PUTS_TEST_WITH_ESCAPE |
okano | 0:694061176edf | 29 | #define PUTS_TEST_WITHOUT_ESCAPE |
okano | 0:694061176edf | 30 | #define PUTC_TEST |
masato | 1:39110c58e55c | 31 | #define ICON_TEST |
okano | 0:694061176edf | 32 | |
masato | 1:39110c58e55c | 33 | #if defined(TARGET_LPC1768) |
okano | 0:694061176edf | 34 | I2C i2c( p9, p10 ); // sda, scl |
masato | 1:39110c58e55c | 35 | #else // |
masato | 1:39110c58e55c | 36 | I2C i2c( D14, D15 ); // sda, scl |
masato | 1:39110c58e55c | 37 | #endif |
okano | 0:694061176edf | 38 | Serial pc( USBTX, USBRX ); // tx, rx |
okano | 0:694061176edf | 39 | TextLCD_SB1602E lcd( &i2c ); |
okano | 0:694061176edf | 40 | |
okano | 0:694061176edf | 41 | static char cg[8][8] = {// I hope I can improve this bitmap sometime in future (^^; |
okano | 0:694061176edf | 42 | { 0x1E, 0x1F, 0x1F, 0x1D, 0x1C, 0x1C, 0x1C, 0x1C }, |
okano | 0:694061176edf | 43 | { 0x01, 0x02, 0x13, 0x1B, 0x1F, 0x1F, 0x0F, 0x15 }, |
okano | 0:694061176edf | 44 | { 0x19, 0x1D, 0x1F, 0x0F, 0x1F, 0x0F, 0x1D, 0x18 }, |
okano | 0:694061176edf | 45 | { 0x1F, 0x1D, 0x16, 0x1E, 0x17, 0x1F, 0x1A, 0x1C }, |
okano | 0:694061176edf | 46 | { 0x1E, 0x1F, 0x07, 0x07, 0x1F, 0x1E, 0x00, 0x00 }, |
okano | 0:694061176edf | 47 | { 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55 }, |
okano | 0:694061176edf | 48 | { 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11 }, |
okano | 0:694061176edf | 49 | { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, |
okano | 0:694061176edf | 50 | }; |
okano | 0:694061176edf | 51 | |
okano | 0:694061176edf | 52 | void lcd_test( void ); |
okano | 0:694061176edf | 53 | void set_lines_fixed_value( char line, char value ); |
okano | 0:694061176edf | 54 | void block_pattaern( char direction, char polarity ); |
okano | 0:694061176edf | 55 | |
okano | 0:694061176edf | 56 | |
okano | 0:694061176edf | 57 | int main() { |
okano | 0:694061176edf | 58 | lcd.puts( 0, "TextLCD_SB1602E \r" ); |
okano | 0:694061176edf | 59 | |
okano | 0:694061176edf | 60 | for ( int i = 10; i > 0; i-- ) { |
okano | 0:694061176edf | 61 | lcd.printf( 1, " count down: %2d\r", i ); |
okano | 0:694061176edf | 62 | wait( 1.0 ); |
okano | 0:694061176edf | 63 | } |
okano | 0:694061176edf | 64 | |
okano | 0:694061176edf | 65 | do { |
okano | 0:694061176edf | 66 | lcd_test(); |
okano | 0:694061176edf | 67 | } while ( TEST_LOOP ); |
okano | 0:694061176edf | 68 | } |
okano | 0:694061176edf | 69 | |
okano | 0:694061176edf | 70 | void lcd_test( void ) { |
okano | 0:694061176edf | 71 | char s[ 18 ]; |
okano | 0:694061176edf | 72 | int i; |
okano | 0:694061176edf | 73 | |
okano | 0:694061176edf | 74 | pc.printf( "LCD test runing\n" ); |
okano | 0:694061176edf | 75 | lcd.contrast( default_Contrast ); |
okano | 0:694061176edf | 76 | |
okano | 0:694061176edf | 77 | #ifdef CONTRAST_ADJUST_TEST |
okano | 0:694061176edf | 78 | pc.printf( " CONTRAST_ADJUST_TEST\n" ); |
okano | 0:694061176edf | 79 | lcd.clear(); |
okano | 0:694061176edf | 80 | lcd.puts( 1, "\x07\x07\x07\x07\x07 contrast()\r" ); |
okano | 0:694061176edf | 81 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 82 | |
okano | 0:694061176edf | 83 | lcd.puts( 0, "ABCDEFGHIJKLMNOP\r" ); |
okano | 0:694061176edf | 84 | |
okano | 0:694061176edf | 85 | for ( int t = 0; t < 2; t++ ) { |
okano | 0:694061176edf | 86 | for ( i = 0; i <= 0x3F; i++ ) { |
okano | 0:694061176edf | 87 | |
okano | 0:694061176edf | 88 | lcd.printf( 1, " cntrst = 0x%02X\r", i ); |
okano | 0:694061176edf | 89 | lcd.contrast( i ); |
okano | 0:694061176edf | 90 | wait ( 0.02 ); |
okano | 0:694061176edf | 91 | } |
okano | 0:694061176edf | 92 | |
okano | 0:694061176edf | 93 | for ( i = 0x3E; i > 0 ; i-- ) { |
okano | 0:694061176edf | 94 | sprintf( s, " cntrst = 0x%02X\r", i ); |
okano | 0:694061176edf | 95 | lcd.puts( 1, s ); |
okano | 0:694061176edf | 96 | lcd.contrast( i ); |
okano | 0:694061176edf | 97 | wait ( 0.02 ); |
okano | 0:694061176edf | 98 | } |
okano | 0:694061176edf | 99 | |
okano | 0:694061176edf | 100 | } |
okano | 0:694061176edf | 101 | |
okano | 0:694061176edf | 102 | lcd.contrast( default_Contrast ); |
okano | 0:694061176edf | 103 | |
okano | 0:694061176edf | 104 | #endif |
okano | 0:694061176edf | 105 | #ifdef PRINTF_TEST |
okano | 0:694061176edf | 106 | |
okano | 0:694061176edf | 107 | pc.printf( " PRINTF_TEST\n" ); |
okano | 0:694061176edf | 108 | lcd.clear(); |
okano | 0:694061176edf | 109 | lcd.puts( 1, "\x07\x07\x07\x07\x07\x07\x07 printf()\r" ); |
okano | 0:694061176edf | 110 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 111 | |
okano | 0:694061176edf | 112 | lcd.printf( 0, "%%6.4f, %%c, %%X\"\r" ); |
okano | 0:694061176edf | 113 | for ( i = -37; i < 37; i++ ) { |
okano | 0:694061176edf | 114 | lcd.printf( 1, "%6.4f, %c, %x\r", (float)i / 37.0, 'a' + i, i + 37 ); |
okano | 0:694061176edf | 115 | wait ( 0.1 ); |
okano | 0:694061176edf | 116 | } |
okano | 0:694061176edf | 117 | |
okano | 0:694061176edf | 118 | #endif |
okano | 0:694061176edf | 119 | #ifdef CGRAM_FUNCTION_TEST |
okano | 0:694061176edf | 120 | pc.printf( " CGRAM_FUNCTION_TEST\n" ); |
okano | 0:694061176edf | 121 | lcd.clear(); |
okano | 0:694061176edf | 122 | lcd.puts( 1, "\x07\x07\x07\x07 set_CGRAM()\r" ); |
okano | 0:694061176edf | 123 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 124 | |
okano | 0:694061176edf | 125 | for ( i = 0; i < 8; i++ ) |
okano | 0:694061176edf | 126 | lcd.put_custom_char( i, cg[ i ], i, 0 ); |
okano | 0:694061176edf | 127 | |
okano | 0:694061176edf | 128 | for ( i = 0; i < 8; i++ ) |
okano | 0:694061176edf | 129 | lcd.put_custom_char( i, cg[ i ], i + 8, 0 ); |
okano | 0:694061176edf | 130 | |
okano | 0:694061176edf | 131 | for ( i = 0; i < 8; i++ ) |
okano | 0:694061176edf | 132 | lcd.put_custom_char( i, cg[ i ], i, 1 ); |
okano | 0:694061176edf | 133 | |
okano | 0:694061176edf | 134 | for ( i = 0; i < 8; i++ ) |
okano | 0:694061176edf | 135 | lcd.put_custom_char( i, cg[ i ], i + 8, 1 ); |
okano | 0:694061176edf | 136 | |
okano | 0:694061176edf | 137 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 138 | lcd.clear(); |
okano | 0:694061176edf | 139 | lcd.set_CGRAM( 7, '\x1F' ); |
okano | 0:694061176edf | 140 | |
okano | 0:694061176edf | 141 | lcd.set_CGRAM( 0, '\0' ); |
okano | 0:694061176edf | 142 | lcd.set_CGRAM( 1, '\0' ); |
okano | 0:694061176edf | 143 | lcd.set_CGRAM( 0, '\0' ); |
okano | 0:694061176edf | 144 | lcd.set_CGRAM( 1, '\0' ); |
okano | 0:694061176edf | 145 | set_lines_fixed_value( 0, 1 ); |
okano | 0:694061176edf | 146 | set_lines_fixed_value( 1, 0 ); |
okano | 0:694061176edf | 147 | |
okano | 0:694061176edf | 148 | block_pattaern( 0, 0 ); |
okano | 0:694061176edf | 149 | block_pattaern( 0, 1 ); |
okano | 0:694061176edf | 150 | block_pattaern( 1, 0 ); |
okano | 0:694061176edf | 151 | block_pattaern( 1, 1 ); |
okano | 0:694061176edf | 152 | |
okano | 0:694061176edf | 153 | |
okano | 0:694061176edf | 154 | #endif |
okano | 0:694061176edf | 155 | #ifdef PUTS_TEST_WITH_ESCAPE |
okano | 0:694061176edf | 156 | pc.printf( " PUTS_TEST_WITH_ESCAPE\n" ); |
okano | 0:694061176edf | 157 | lcd.clear(); |
okano | 0:694061176edf | 158 | lcd.puts( 1, "\x07\x07\x07 puts(\"..\\r\")\r" ); |
okano | 0:694061176edf | 159 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 160 | |
okano | 0:694061176edf | 161 | lcd.puts( 0, "\rWelcome to mbed!\r" ); |
okano | 0:694061176edf | 162 | lcd.puts( 1, "\rwww.mbed.com\r" ); |
okano | 0:694061176edf | 163 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 164 | lcd.puts( 0, " This is a\r" ); |
okano | 0:694061176edf | 165 | lcd.puts( 1, " LCD test\r" ); |
okano | 0:694061176edf | 166 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 167 | lcd.puts( 0, " 22-Jan-2010\r" ); |
okano | 0:694061176edf | 168 | lcd.puts( 1, " Hello world!\r" ); |
okano | 0:694061176edf | 169 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 170 | |
okano | 0:694061176edf | 171 | #endif |
okano | 0:694061176edf | 172 | #ifdef PUTS_TEST_WITHOUT_ESCAPE |
okano | 0:694061176edf | 173 | pc.printf( " PUTS_TEST_WITHOUT_ESCAPE\n" ); |
okano | 0:694061176edf | 174 | lcd.clear(); |
okano | 0:694061176edf | 175 | lcd.puts( 0, "\r" ); |
okano | 0:694061176edf | 176 | lcd.puts( 1, "\x07\x07\x07\x07\x07 puts(\"..\")\r" ); |
okano | 0:694061176edf | 177 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 178 | |
okano | 0:694061176edf | 179 | lcd.puts( 0, "0" ); |
okano | 0:694061176edf | 180 | lcd.puts( 1, "ABC" ); |
okano | 0:694061176edf | 181 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 182 | lcd.puts( 0, "1" ); |
okano | 0:694061176edf | 183 | lcd.puts( 1, "DEF" ); |
okano | 0:694061176edf | 184 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 185 | lcd.puts( 0, "2" ); |
okano | 0:694061176edf | 186 | lcd.puts( 1, "GHI" ); |
okano | 0:694061176edf | 187 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 188 | lcd.puts( 0, "3" ); |
okano | 0:694061176edf | 189 | lcd.puts( 1, "JKL" ); |
okano | 0:694061176edf | 190 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 191 | lcd.puts( 0, "4" ); |
okano | 0:694061176edf | 192 | lcd.puts( 1, "MNO" ); |
okano | 0:694061176edf | 193 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 194 | lcd.puts( 0, "5" ); |
okano | 0:694061176edf | 195 | lcd.puts( 1, "PQR" ); |
okano | 0:694061176edf | 196 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 197 | lcd.puts( 0, "6" ); |
okano | 0:694061176edf | 198 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 199 | lcd.puts( 0, "7" ); |
okano | 0:694061176edf | 200 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 201 | lcd.puts( 0, "8" ); |
okano | 0:694061176edf | 202 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 203 | lcd.puts( 0, "9" ); |
okano | 0:694061176edf | 204 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 205 | lcd.puts( 0, "A" ); |
okano | 0:694061176edf | 206 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 207 | lcd.puts( 0, "B" ); |
okano | 0:694061176edf | 208 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 209 | lcd.puts( 0, "C" ); |
okano | 0:694061176edf | 210 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 211 | lcd.puts( 0, "D" ); |
okano | 0:694061176edf | 212 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 213 | lcd.puts( 0, "E" ); |
okano | 0:694061176edf | 214 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 215 | lcd.puts( 0, "F" ); |
okano | 0:694061176edf | 216 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 217 | |
okano | 0:694061176edf | 218 | #endif |
okano | 0:694061176edf | 219 | #ifdef PUTC_TEST |
okano | 0:694061176edf | 220 | pc.printf( " PUTC_TEST\n" ); |
okano | 0:694061176edf | 221 | lcd.clear(); |
okano | 0:694061176edf | 222 | lcd.puts( 1, "\x07\x07\x07\x07\x07\x07\x07\x07\x07 putc()\r" ); |
okano | 0:694061176edf | 223 | wait( DEFAULT_TIME_INTERVAL ); |
okano | 0:694061176edf | 224 | |
okano | 0:694061176edf | 225 | for ( i = 0; i < 16; i++ ) { |
okano | 0:694061176edf | 226 | lcd.putc( 0, '0' + i ); |
okano | 0:694061176edf | 227 | lcd.putc( 1, 'A' + i ); |
okano | 0:694061176edf | 228 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
okano | 0:694061176edf | 229 | } |
okano | 0:694061176edf | 230 | #endif |
masato | 1:39110c58e55c | 231 | #ifdef ICON_TEST |
masato | 1:39110c58e55c | 232 | pc.printf( " ICON_TEST\n" ); |
masato | 1:39110c58e55c | 233 | lcd.clear(); |
masato | 1:39110c58e55c | 234 | lcd.puts( 1, "\x07\x07\x07\x07\x07\x07 puticon()\r" ); |
masato | 1:39110c58e55c | 235 | unsigned short flg = 0; |
masato | 1:39110c58e55c | 236 | for (i = 0; i < 13; i++) { |
masato | 1:39110c58e55c | 237 | flg |= (1 << i); |
masato | 1:39110c58e55c | 238 | lcd.puticon(flg); |
masato | 1:39110c58e55c | 239 | wait( DEFAULT_TIME_INTERVAL_PUTx ); |
masato | 1:39110c58e55c | 240 | } |
masato | 1:39110c58e55c | 241 | wait( DEFAULT_TIME_INTERVAL ); |
masato | 1:39110c58e55c | 242 | lcd.puticon(0); |
masato | 1:39110c58e55c | 243 | #endif |
okano | 0:694061176edf | 244 | } |
okano | 0:694061176edf | 245 | |
okano | 0:694061176edf | 246 | void set_lines_fixed_value( char line, char value ) { |
okano | 0:694061176edf | 247 | for ( int i = 0; i < 16; i++ ) |
okano | 0:694061176edf | 248 | lcd.putc( line, value ); |
okano | 0:694061176edf | 249 | |
okano | 0:694061176edf | 250 | lcd.puts( line, "\r" ); |
okano | 0:694061176edf | 251 | } |
okano | 0:694061176edf | 252 | |
okano | 0:694061176edf | 253 | |
okano | 0:694061176edf | 254 | void block_pattaern( char direction, char polarity ) { |
okano | 0:694061176edf | 255 | char c[ 8 ]; |
okano | 0:694061176edf | 256 | |
okano | 0:694061176edf | 257 | for ( int x = 0; x < 2; x++ ) { |
okano | 0:694061176edf | 258 | for ( int i = 0; i < 8; i++ ) { |
okano | 0:694061176edf | 259 | for ( int j = 0; j < 8; j++ ) { |
okano | 0:694061176edf | 260 | if ( j <= i ) |
okano | 0:694061176edf | 261 | c[ (direction ? j : 7 - j) ] = (polarity ? 0x00: ~0x00 ); |
okano | 0:694061176edf | 262 | else |
okano | 0:694061176edf | 263 | c[ (direction ? j : 7 - j) ] = (polarity ? ~0x00 : 0x00 ); |
okano | 0:694061176edf | 264 | } |
okano | 0:694061176edf | 265 | |
okano | 0:694061176edf | 266 | lcd.set_CGRAM( (x ? (direction ? 0 : 1) : (direction ? 1 : 0)), c ); |
okano | 0:694061176edf | 267 | wait( 0.05 ); |
okano | 0:694061176edf | 268 | } |
okano | 0:694061176edf | 269 | } |
okano | 0:694061176edf | 270 | } |