// -------------------------------------------------------------------------- // Sym-1 front panel display example // // Wayne Parham // // wayne@parhamdata.com // -------------------------------------------------------------------------- #include #include int main (void) { int delay = 10; int flashes = 255; int displayable = 1; int e = 0; int r = 0; int d = 0; int i = 0; int l = 0; int t = 0; int z = 0; char c = 0x00; char buffer[41] = { 0x00 }; puts ("\nType a message (40 chars max) and press ENTER, please:\n"); while ( (c != '\n') && (i < 40) ) { c = getchar(); buffer[i] = c; i++; if ( i == 40 ) { puts ("\n\n--- Reached 40 character limit. ---"); } } i--; // index is one past end while ( z == 0 ) { puts ("\n\nHow many times (0 for forever) to repeat?"); c = getchar(); if ( (c >= '0') && (c <= '9') ) {// between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int puts ("\n\nLook at the front panel.\n"); } else { puts ("\nWhat?"); z = 0; // keep asking for a number } } z = 0; while ( (z < t) || (t == 0) ) { z++; putchar ( '\r' ); // Send CR to console DISPLAY.d0 = DISP_SPACE; // Clear the display DISPLAY.d1 = DISP_SPACE; DISPLAY.d2 = DISP_SPACE; DISPLAY.d3 = DISP_SPACE; DISPLAY.d4 = DISP_SPACE; DISPLAY.d5 = DISP_SPACE; DISPLAY.d6 = DISP_SPACE; for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } for ( l = 0; l <= i; l++ ) { displayable = 1; // Assume character is mapped switch ( buffer[l] ) { // Put the typed charaters case '1': // into the display buffer DISPLAY.d6 = DISP_1; // one at a time break; case '2': DISPLAY.d6 = DISP_2; break; case '3': DISPLAY.d6 = DISP_3; break; case '4': DISPLAY.d6 = DISP_4; break; case '5': DISPLAY.d6 = DISP_5; break; case '6': DISPLAY.d6 = DISP_6; break; case '7': DISPLAY.d6 = DISP_7; break; case '8': DISPLAY.d6 = DISP_8; break; case '9': DISPLAY.d6 = DISP_9; break; case '0': DISPLAY.d6 = DISP_0; break; case 'A': DISPLAY.d6 = DISP_A; break; case 'a': DISPLAY.d6 = DISP_A; break; case 'B': DISPLAY.d6 = DISP_b; break; case 'b': DISPLAY.d6 = DISP_b; break; case 'C': DISPLAY.d6 = DISP_C; break; case 'c': DISPLAY.d6 = DISP_c; break; case 'D': DISPLAY.d6 = DISP_d; break; case 'd': DISPLAY.d6 = DISP_d; break; case 'E': DISPLAY.d6 = DISP_E; break; case 'e': DISPLAY.d6 = DISP_e; break; case 'F': DISPLAY.d6 = DISP_F; break; case 'f': DISPLAY.d6 = DISP_F; break; case 'G': DISPLAY.d6 = DISP_G; break; case 'g': DISPLAY.d6 = DISP_g; break; case 'H': DISPLAY.d6 = DISP_H; break; case 'h': DISPLAY.d6 = DISP_h; break; case 'I': DISPLAY.d6 = DISP_I; break; case 'i': DISPLAY.d6 = DISP_i; break; case 'J': DISPLAY.d6 = DISP_J; break; case 'j': DISPLAY.d6 = DISP_J; break; case 'K': DISPLAY.d6 = DISP_K; break; case 'k': DISPLAY.d6 = DISP_K; break; case 'L': DISPLAY.d6 = DISP_L; break; case 'l': DISPLAY.d6 = DISP_L; break; case 'M': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_M_1; DISPLAY.d6 = DISP_M_2; break; case 'm': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_M_1; DISPLAY.d6 = DISP_M_2; break; case 'N': DISPLAY.d6 = DISP_n; break; case 'n': DISPLAY.d6 = DISP_n; break; case 'O': DISPLAY.d6 = DISP_O; break; case 'o': DISPLAY.d6 = DISP_o; break; case 'P': DISPLAY.d6 = DISP_P; break; case 'p': DISPLAY.d6 = DISP_P; break; case 'Q': DISPLAY.d6 = DISP_q; break; case 'q': DISPLAY.d6 = DISP_q; break; case 'R': DISPLAY.d6 = DISP_r; break; case 'r': DISPLAY.d6 = DISP_r; break; case 'S': DISPLAY.d6 = DISP_S; break; case 's': DISPLAY.d6 = DISP_S; break; case 'T': DISPLAY.d6 = DISP_t; break; case 't': DISPLAY.d6 = DISP_t; break; case 'U': DISPLAY.d6 = DISP_U; break; case 'u': DISPLAY.d6 = DISP_u; break; case 'V': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_V_1; DISPLAY.d6 = DISP_V_2; break; case 'v': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_V_1; DISPLAY.d6 = DISP_V_2; break; case 'W': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_W_1; DISPLAY.d6 = DISP_W_2; break; case 'w': DISPLAY.d0 = DISPLAY.d1; DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_W_1; DISPLAY.d6 = DISP_W_2; break; case 'Y': DISPLAY.d6 = DISP_Y; break; case 'y': DISPLAY.d6 = DISP_Y; break; case 'Z': DISPLAY.d6 = DISP_Z; break; case 'z': DISPLAY.d6 = DISP_Z; break; case ' ': DISPLAY.d6 = DISP_SPACE; break; case '.': DISPLAY.d6 = DISP_PERIOD; break; case '-': DISPLAY.d6 = DISP_HYPHEN; break; case '\'': DISPLAY.d6 = DISP_APOSTR; break; case '"': DISPLAY.d6 = DISP_APOSTR; break; case '=': DISPLAY.d6 = DISP_EQUAL; break; case '_': DISPLAY.d6 = DISP_BOTTOM; break; case '/': DISPLAY.d6 = DISP_SLASH; break; case '\\': DISPLAY.d6 = DISP_BACKSLASH; break; default: displayable = 0; // Character not mapped } if ( displayable ) { putchar ( buffer[l] ); // Send it to the console DISPLAY.d0 = DISPLAY.d1; // Scroll to the left DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISPLAY.d6; for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } } } for ( e = 0; e < 6; e++ ) { // Gradually fill the DISPLAY.d0 = DISPLAY.d1; // display with spaces DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; DISPLAY.d3 = DISPLAY.d4; DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_SPACE; DISPLAY.d6 = DISP_SPACE; for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } } } puts ("\n\nEnjoy your day!\n\n"); return 0; }