Xbee CountUp

Dependencies:   mbed

Fork of HeptaXbee_CountUp by 智也 大野

Committer:
tomoya123
Date:
Tue Dec 13 07:55:03 2016 +0000
Revision:
1:715b80d2a02b
Parent:
0:0a7fa0911e6c
Xbee CountUp

Who changed what in which revision?

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