/** * * NUMERIC.cpp * Jan Dvorak z Vozerovic - dvorkaman@centrum.cz - dvorkaman.php5.cz */ #ifndef numeric_cpp #define numeric_cpp #include "WProgram.h" #include "numeric.h" #include "numdigits.h" /************************************** /** * Constructor * Common Anode (+) * @param int[8] used pins: A->G DP */ Numeric::Numeric(int pins[]) { for( int i=0; i<8; i++ ) usedPins[i]=pins[i]; init(); } /************************************** /** * Inicialize pins as OUTPUT * PRIVATE */ inline void Numeric::init() { for( int i=0; i<8; i++ ) { pinMode( usedPins[i],OUTPUT ); digitalWrite( usedPins[i], HIGH ); } } /************************************** /** * Show number * @param int number to be shown: 0 -> 15 (0-9 A-F) */ void Numeric::showNumber(int number) { char l; if(number<10) l=number+'0'; else if(number<16) l=number-10+'A'; else l=-1; show( l ); } /************************************** /** * Shows letter and dot * @param char letter to be shown with dot next to it: A -> Z; 0 -> 9; _ ; - */ void Numeric::showLetterAndDot(char letter) { show(letter); digitalWrite(usedPins[7],LOW); } /************************************** /** * Shows letter * @param char letter to be shown: A -> Z; 0 -> 9; . ; _ ; - */ void Numeric::show(char letter) { int l=led7null; //letter selection switch( letter ) { case '0': l=led70;break; case '1': l=led71;break; case '2': l=led72;break; case '3': l=led73;break; case '4': l=led74;break; case '5': l=led75;break; case '6': l=led76;break; case '7': l=led77;break; case '8': l=led78;break; case '9': l=led79;break; case 'A': case 'a': l=led7A;break; case 'B': case 'b': l=led7B;break; case 'C': case 'c': l=led7C;break; case 'D': case 'd': l=led7D;break; case 'E': case 'e': l=led7E;break; case 'F': case 'f': l=led7F;break; case '.': l=led7P; break; case '_': l=led7_; break; case '-': l=led7M; break; } showOwnLetter(l); } /************************************** /** * Shows own letter * @param int 8bit number, whose bits (A = MSB, DP = LSB) represents state of each diods: 1 = ON, 0 = OFF */ void Numeric::showOwnLetter(int letter) { int l=letter; //setting of pins - binary shift left - masking last bit ->... for( int i=7; i>=0; i-- ) { digitalWrite( usedPins[i], 1- (l & 1) ); //active groung l = l >> 1; } } #endif