Hello code for "Switch Science mbed LPC824"

Dependencies:   mbed

Fork of SwitchSciencembedLPC824_test by Mako SHIMURA

Committer:
switchscience
Date:
Fri Dec 19 09:39:31 2014 +0000
Revision:
11:7e4aa2823fad
Parent:
9:e2333773718f
Hello code for "Switch Science mbed LPC824"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
asagin 9:e2333773718f 1 /*
asagin 9:e2333773718f 2 * LCD module "SB1602E" library
asagin 9:e2333773718f 3 *
asagin 9:e2333773718f 4 * SB1602E is an I2C based low voltage text LCD panel (based Sitronix ST7032 chip)
asagin 9:e2333773718f 5 * The module by StrawberryLinux
asagin 9:e2333773718f 6 * http://strawberry-linux.com/catalog/items?code=27002 (Online shop page (Japanese))
asagin 9:e2333773718f 7 * http://strawberry-linux.com/pub/ST7032i.pdf (datasheet of the chip)
asagin 9:e2333773718f 8 *
asagin 9:e2333773718f 9 * This is a library to operate this module easy.
asagin 9:e2333773718f 10 *
asagin 9:e2333773718f 11 * Copyright (c) 2010 Tedd OKANO
asagin 9:e2333773718f 12 * Released under the MIT License: http://mbed.org/license/mit
asagin 9:e2333773718f 13 *
asagin 9:e2333773718f 14 * revision 1.0 22-Jan-2010 a. 1st release
asagin 9:e2333773718f 15 * revision 1.1 23-Jan-2010 a. class name has been changed from lcd_SB1602E to TextLCD_SB1602E
asagin 9:e2333773718f 16 * b. printf() added
asagin 9:e2333773718f 17 * c. copyright notice added
asagin 9:e2333773718f 18 */
asagin 9:e2333773718f 19
asagin 9:e2333773718f 20 #ifndef MBED_TextLCD_SB1602E
asagin 9:e2333773718f 21 #define MBED_TextLCD_SB1602E
asagin 9:e2333773718f 22
asagin 9:e2333773718f 23 #include <stdarg.h>
asagin 9:e2333773718f 24 #include "mbed.h"
asagin 9:e2333773718f 25 #include "I2cBusDevice.h"
asagin 9:e2333773718f 26
asagin 9:e2333773718f 27 // SB1602E IIC address
asagin 9:e2333773718f 28
asagin 9:e2333773718f 29 const char SB1602E_addr = 0x7C;
asagin 9:e2333773718f 30
asagin 9:e2333773718f 31 // SB1602E initialization command sequence
asagin 9:e2333773718f 32
asagin 9:e2333773718f 33 #ifdef INIT_VALUE_DATASHEET_ORIGINAL
asagin 9:e2333773718f 34
asagin 9:e2333773718f 35 const char Comm_FunctionSet_Normal = 0x38;
asagin 9:e2333773718f 36 const char Comm_FunctionSet_Extended = 0x39;
asagin 9:e2333773718f 37 const char Comm_InternalOscFrequency = 0x14;
asagin 9:e2333773718f 38 const char Comm_ContrastSet = 0x78;
asagin 9:e2333773718f 39 const char Comm_PwrIconContrast = 0x5E;
asagin 9:e2333773718f 40 const char Comm_FollowerCtrl = 0x6A;
asagin 9:e2333773718f 41 const char Comm_DisplayOnOff = 0x0C;
asagin 9:e2333773718f 42 const char Comm_ClearDisplay = 0x01;
asagin 9:e2333773718f 43 const char Comm_EntryModeSet = 0x06;
asagin 9:e2333773718f 44
asagin 9:e2333773718f 45 #else
asagin 9:e2333773718f 46
asagin 9:e2333773718f 47 const char Comm_FunctionSet_Normal = 0x38;
asagin 9:e2333773718f 48 const char Comm_FunctionSet_Extended = 0x39;
asagin 9:e2333773718f 49 const char Comm_InternalOscFrequency = 0x14;
asagin 9:e2333773718f 50 const char Comm_ContrastSet = 0x70;
asagin 9:e2333773718f 51 const char Comm_PwrIconContrast = 0x5C;
asagin 9:e2333773718f 52 const char Comm_FollowerCtrl = 0x60;
asagin 9:e2333773718f 53 const char Comm_DisplayOnOff = 0x0C;
asagin 9:e2333773718f 54 const char Comm_ClearDisplay = 0x01;
asagin 9:e2333773718f 55 const char Comm_EntryModeSet = 0x04;
asagin 9:e2333773718f 56 const char Comm_ReturnHome = 0x02;
asagin 9:e2333773718f 57
asagin 9:e2333773718f 58 #endif
asagin 9:e2333773718f 59
asagin 9:e2333773718f 60 // SB1602E general commands
asagin 9:e2333773718f 61
asagin 9:e2333773718f 62 const char Comm_SetDDRAMAddress = 0x80;
asagin 9:e2333773718f 63 const char DDRAMAddress_Ofst[] = { 0x00, 0x40 };
asagin 9:e2333773718f 64
asagin 9:e2333773718f 65 const char Comm_SetCGRAM = 0x40;
asagin 9:e2333773718f 66
asagin 9:e2333773718f 67 // SB1602E setting values
asagin 9:e2333773718f 68
asagin 9:e2333773718f 69 const char default_Contrast = 0x35;
asagin 9:e2333773718f 70
asagin 9:e2333773718f 71 const char COMMAND = 0x00;
asagin 9:e2333773718f 72 const char DATA = 0x40;
asagin 9:e2333773718f 73
asagin 9:e2333773718f 74 const char MaxCharsInALine = 0x10; // buffer deoth for one line (no scroll function used)
asagin 9:e2333773718f 75
asagin 9:e2333773718f 76 const char init_seq0_length = 7;
asagin 9:e2333773718f 77 const char init_seq0[ init_seq0_length ]
asagin 9:e2333773718f 78 = {
asagin 9:e2333773718f 79 Comm_FunctionSet_Normal,
asagin 9:e2333773718f 80 Comm_ReturnHome, // This may be required to reset the scroll function
asagin 9:e2333773718f 81 Comm_FunctionSet_Extended,
asagin 9:e2333773718f 82 Comm_InternalOscFrequency,
asagin 9:e2333773718f 83 Comm_ContrastSet | ( default_Contrast & 0xF),
asagin 9:e2333773718f 84 Comm_PwrIconContrast | ((default_Contrast >> 4) & 0x3),
asagin 9:e2333773718f 85 Comm_FollowerCtrl | 0x0A,
asagin 9:e2333773718f 86
asagin 9:e2333773718f 87 };
asagin 9:e2333773718f 88 // required 30us interval
asagin 9:e2333773718f 89
asagin 9:e2333773718f 90 const char init_seq1_length = 3;
asagin 9:e2333773718f 91 const char init_seq1[ init_seq1_length ]
asagin 9:e2333773718f 92 = {
asagin 9:e2333773718f 93 Comm_DisplayOnOff,
asagin 9:e2333773718f 94 Comm_ClearDisplay,
asagin 9:e2333773718f 95 Comm_EntryModeSet,
asagin 9:e2333773718f 96 };
asagin 9:e2333773718f 97 // required 30us, 2ms interval
asagin 9:e2333773718f 98
asagin 9:e2333773718f 99
asagin 9:e2333773718f 100 class TextLCD_SB1602E : I2cBusDevice {
asagin 9:e2333773718f 101 public:
asagin 9:e2333773718f 102
asagin 9:e2333773718f 103 explicit TextLCD_SB1602E( I2C *i2c, char dev_address = SB1602E_addr, char *init_massage = NULL ) : I2cBusDevice( i2c, dev_address ) {
asagin 9:e2333773718f 104 wait( 0.04 ); // interval after hardware reset
asagin 9:e2333773718f 105
asagin 9:e2333773718f 106 for ( int i = 0; i < init_seq0_length; i++ ) {
asagin 9:e2333773718f 107 lcd_command( init_seq0[ i ] );
asagin 9:e2333773718f 108 wait( 30e-6 );
asagin 9:e2333773718f 109 }
asagin 9:e2333773718f 110
asagin 9:e2333773718f 111 wait( 0.2 );
asagin 9:e2333773718f 112
asagin 9:e2333773718f 113 for ( int i = 0; i < init_seq1_length; i++ ) {
asagin 9:e2333773718f 114 lcd_command( init_seq1[ i ] );
asagin 9:e2333773718f 115 wait( 2e-3 );
asagin 9:e2333773718f 116 }
asagin 9:e2333773718f 117
asagin 9:e2333773718f 118 if ( init_massage )
asagin 9:e2333773718f 119 puts( 0, init_massage );
asagin 9:e2333773718f 120
asagin 9:e2333773718f 121 set_CGRAM( 7, '\x1F' );
asagin 9:e2333773718f 122
asagin 9:e2333773718f 123 curs[ 0 ] = 0;
asagin 9:e2333773718f 124 curs[ 1 ] = 0;
asagin 9:e2333773718f 125 }
asagin 9:e2333773718f 126
asagin 9:e2333773718f 127
asagin 9:e2333773718f 128 ~TextLCD_SB1602E() {
asagin 9:e2333773718f 129 }
asagin 9:e2333773718f 130
asagin 9:e2333773718f 131 void clear( void ) {
asagin 9:e2333773718f 132 lcd_command( Comm_ClearDisplay );
asagin 9:e2333773718f 133 wait( 2e-3 );
asagin 9:e2333773718f 134 curs[ 0 ] = 0;
asagin 9:e2333773718f 135 curs[ 1 ] = 0;
asagin 9:e2333773718f 136 }
asagin 9:e2333773718f 137
asagin 9:e2333773718f 138
asagin 9:e2333773718f 139 void put_custom_char( char c_code, const char *cg, char x, char y ) {
asagin 9:e2333773718f 140 for ( int i = 0; i < 5; i++ ) {
asagin 9:e2333773718f 141 set_CGRAM( c_code, cg );
asagin 9:e2333773718f 142 putcxy( c_code, x, y );
asagin 9:e2333773718f 143 }
asagin 9:e2333773718f 144 }
asagin 9:e2333773718f 145
asagin 9:e2333773718f 146 void contrast( char contrast ) {
asagin 9:e2333773718f 147 lcd_command( Comm_FunctionSet_Extended );
asagin 9:e2333773718f 148 lcd_command( Comm_ContrastSet | (contrast & 0x0f) );
asagin 9:e2333773718f 149 lcd_command( Comm_PwrIconContrast | ((contrast>>4) & 0x03) );
asagin 9:e2333773718f 150 lcd_command( Comm_FunctionSet_Normal );
asagin 9:e2333773718f 151 }
asagin 9:e2333773718f 152
asagin 9:e2333773718f 153 void set_CGRAM( char char_code, const char* cg ) {
asagin 9:e2333773718f 154 for ( int i = 0; i < 8; i++ ) {
asagin 9:e2333773718f 155 lcd_command( (Comm_SetCGRAM | (char_code << 3) | i) );
asagin 9:e2333773718f 156 lcd_data( *cg++ );
asagin 9:e2333773718f 157 }
asagin 9:e2333773718f 158 }
asagin 9:e2333773718f 159
asagin 9:e2333773718f 160 void set_CGRAM( char char_code, char v ) {
asagin 9:e2333773718f 161 char c[ 8 ];
asagin 9:e2333773718f 162
asagin 9:e2333773718f 163 for ( int i = 0; i < 8; i++ )
asagin 9:e2333773718f 164 c[ i ] = v;
asagin 9:e2333773718f 165
asagin 9:e2333773718f 166 set_CGRAM( char_code, c );
asagin 9:e2333773718f 167 }
asagin 9:e2333773718f 168
asagin 9:e2333773718f 169 void putcxy( char c, char x, char y ) {
asagin 9:e2333773718f 170 if ( (x >= MaxCharsInALine) || (y >= 2) )
asagin 9:e2333773718f 171 return;
asagin 9:e2333773718f 172
asagin 9:e2333773718f 173 lcd_command( (Comm_SetDDRAMAddress | DDRAMAddress_Ofst[ y ]) + x );
asagin 9:e2333773718f 174 lcd_data( c );
asagin 9:e2333773718f 175 }
asagin 9:e2333773718f 176
asagin 9:e2333773718f 177 void putc( char line, char c ) {
asagin 9:e2333773718f 178 if ( (c == '\n') || (c == '\r') ) {
asagin 9:e2333773718f 179 clear_lest_of_line( line );
asagin 9:e2333773718f 180 curs[ line ] = 0;
asagin 9:e2333773718f 181 return;
asagin 9:e2333773718f 182 }
asagin 9:e2333773718f 183
asagin 9:e2333773718f 184 putcxy( c, curs[ line ]++, line );
asagin 9:e2333773718f 185 }
asagin 9:e2333773718f 186
asagin 9:e2333773718f 187 void puts( char line, char *s ) {
asagin 9:e2333773718f 188 while ( char c = *s++ )
asagin 9:e2333773718f 189 putc( line, c );
asagin 9:e2333773718f 190 }
asagin 9:e2333773718f 191
asagin 9:e2333773718f 192 void printf( char line, char *format, ... ) {
asagin 9:e2333773718f 193 char s[ 32 ];
asagin 9:e2333773718f 194 va_list args;
asagin 9:e2333773718f 195
asagin 9:e2333773718f 196 va_start( args, format );
asagin 9:e2333773718f 197 vsnprintf( s, 32, format, args );
asagin 9:e2333773718f 198 va_end( args );
asagin 9:e2333773718f 199
asagin 9:e2333773718f 200 puts( line, s );
asagin 9:e2333773718f 201 }
asagin 9:e2333773718f 202
asagin 9:e2333773718f 203 private:
asagin 9:e2333773718f 204 char curs[2];
asagin 9:e2333773718f 205
asagin 9:e2333773718f 206 void clear_lest_of_line( char line ) {
asagin 9:e2333773718f 207 for ( int i = curs[ line ]; i < MaxCharsInALine; i++ )
asagin 9:e2333773718f 208 putcxy( ' ', i, line );
asagin 9:e2333773718f 209 }
asagin 9:e2333773718f 210
asagin 9:e2333773718f 211 int lcd_write( char first, char second ) {
asagin 9:e2333773718f 212 char cmd[2];
asagin 9:e2333773718f 213
asagin 9:e2333773718f 214 cmd[ 0 ] = first;
asagin 9:e2333773718f 215 cmd[ 1 ] = second;
asagin 9:e2333773718f 216
asagin 9:e2333773718f 217 return ( write( cmd, 2 ) );
asagin 9:e2333773718f 218
asagin 9:e2333773718f 219 }
asagin 9:e2333773718f 220
asagin 9:e2333773718f 221 int lcd_command( char command ) {
asagin 9:e2333773718f 222 return ( lcd_write( COMMAND, command ) );
asagin 9:e2333773718f 223 }
asagin 9:e2333773718f 224
asagin 9:e2333773718f 225 int lcd_data( char data ) {
asagin 9:e2333773718f 226 return ( lcd_write( DATA, data ) );
asagin 9:e2333773718f 227 }
asagin 9:e2333773718f 228 }
asagin 9:e2333773718f 229 ;
asagin 9:e2333773718f 230
asagin 9:e2333773718f 231 #endif
asagin 9:e2333773718f 232
asagin 9:e2333773718f 233
asagin 9:e2333773718f 234
asagin 9:e2333773718f 235
asagin 9:e2333773718f 236
asagin 9:e2333773718f 237
asagin 9:e2333773718f 238
asagin 9:e2333773718f 239