/** * ALFANUMERIC.cpp * Jan Dvorak z Vozerovic - dvorkaman@centrum.cz - dvorkaman.php5.cz */ #ifndef alfanumeric_cpp #define alfanumeric_cpp #include "WProgram.h" #include "alfanumeric.h" #include "alfadigits.h" /**************************************/ /** * Constructor * @param int[] array of 17pins of display A1 -> P + DP; see A825RD datasheet for scheme */ Alfanumeric::Alfanumeric(int pins[]) { for( int i=0; i<17; i++ ) { usedPins[i]=pins[i]; } init(); } /**************************************/ /** * Inicializes pins as OUTPUT, sets as HIGH - diodes are turned OFF * PRIVATE */ void Alfanumeric::init() { for( int i=0; i<17; i++ ) { pinMode( usedPins[i],OUTPUT ); digitalWrite( usedPins[i], HIGH ); } } /**************************************/ /** * Shows number * @param int number to be displayed: 0 -> 9 ; A -> F */ void Alfanumeric::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 displayed with dot */ void Alfanumeric::showLetterAndDot(char letter) { show(letter); digitalWrite(usedPins[16],LOW); } /**************************************/ /** * Shows letter * @param char letter to be displayed */ void Alfanumeric::show(char letter) { long l=alfa16_null; //vyber pismene switch( letter ) { case 'A': l=alfa16A;break; case 'B': l=alfa16B;break; case 'C': l=alfa16C;break; case 'D': l=alfa16D;break; case 'E': l=alfa16E;break; case 'F': l=alfa16F;break; case 'G': l=alfa16G;break; case 'H': l=alfa16H;break; case 'I': l=alfa16I;break; case 'J': l=alfa16J;break; case 'K': l=alfa16K;break; case 'L': l=alfa16L;break; case 'M': l=alfa16M;break; case 'N': l=alfa16N;break; case 'O': l=alfa16O;break; case 'P': l=alfa16P;break; case 'Q': l=alfa16Q;break; case 'R': l=alfa16R;break; case 'S': l=alfa16S;break; case 'T': l=alfa16T;break; case 'U': l=alfa16U;break; case 'V': l=alfa16V;break; case 'W': l=alfa16W;break; case 'X': case '*': l=alfa16X;break; case 'Y': l=alfa16Y;break; case 'Z': l=alfa16Z;break; case '0': l=alfa160;break; case '1': l=alfa161;break; case '2': l=alfa162;break; case '3': l=alfa163;break; case '4': l=alfa164;break; case '5': l=alfa165;break; case '6': l=alfa166;break; case '7': l=alfa167;break; case '8': l=alfa168;break; case '9': l=alfa169;break; case '.': l=alfa16DP;break; case '-': l=alfa16MI;break; case '_': l=alfa16UL;break; case '\\': l=alfa16BS;break; case '/': l=alfa16NS;break; case '+': l=alfa16PL;break; case '[': l=alfa16LB;break; case ']': l=alfa16RB;break; case '%': l=alfa16PR;break; case '=': l=alfa16EQ;break; case '>': l=alfa16GT;break; case '<': l=alfa16LT;break; case '?': l=alfa16QM;break; case ',': l=alfa16CM;break; case '|': l=alfa16DT;break; case '°': l=alfa16DG;break; case '@': l=alfa16AT;break; } showOwnLetter(l); } /**************************************/ /** * Shows own letter * @param long 17bit number, whose bits (A1 = MSB, DP = LSB) represents state of each diods: 1 = ON, 0 = OFF */ void Alfanumeric::showOwnLetter(long letter) { long l=letter; //nastaveni jednotlivych pinu - posunuju binarne pismeno do leva a vymaskuju vzdy posledni bit... for( int i=16; i>=0; i-- ) { digitalWrite( usedPins[i], 1- (l & 1) ); //aktivni nula l = l >> 1; } } #endif