///////////////////////////////////// // // // '3D' ROTATING LED DISPLAY V1.14 // // // ///////////////////////////////////// #include "c:\ht-pic\include\pic1687x.h" // // CHARACTER CODES // const char LETTER_A[5] = {0b01111110,0b10001000,0b10001000,0b10001000,0b01111110}; const char LETTER_B[5] = {0b01101100,0b10010010,0b10010010,0b10010010,0b11111110}; const char LETTER_C[5] = {0b01000100,0b10000010,0b10000010,0b10000010,0b01111100}; const char LETTER_D[5] = {0b00111000,0b01000100,0b10000010,0b10000010,0b11111110}; const char LETTER_E[5] = {0b10000010,0b10010010,0b10010010,0b10010010,0b11111110}; const char LETTER_F[5] = {0b10000000,0b10100000,0b10100000,0b10100000,0b11111110}; const char LETTER_G[5] = {0b01011110,0b10010010,0b10010010,0b10000010,0b01111100}; const char LETTER_H[5] = {0b11111110,0b00100000,0b00100000,0b00100000,0b11111110}; const char LETTER_I[5] = {0b00000000,0b10000010,0b11111110,0b10000010,0b00000000}; const char LETTER_J[5] = {0b10000000,0b11111100,0b10000010,0b00000010,0b00000100}; const char LETTER_K[5] = {0b10000010,0b01000100,0b00101000,0b00010010,0b11111110}; const char LETTER_L[5] = {0b00000010,0b00000010,0b00000010,0b00000010,0b11111110}; const char LETTER_M[5] = {0b11111110,0b01000000,0b00100000,0b01000000,0b11111110}; const char LETTER_N[5] = {0b11111110,0b00001000,0b00010000,0b00100000,0b11111110}; const char LETTER_O[5] = {0b01111100,0b10000010,0b10000010,0b10000010,0b01111100}; const char LETTER_P[5] = {0b01100000,0b10010000,0b10010000,0b10010000,0b11111110}; const char LETTER_Q[5] = {0b01111010,0b10000100,0b10001010,0b10000010,0b01111100}; const char LETTER_R[5] = {0b01100010,0b10010100,0b10011000,0b10010000,0b11111110}; const char LETTER_S[5] = {0b10001100,0b10010010,0b10010010,0b10010010,0b01100010}; const char LETTER_T[5] = {0b10000000,0b10000000,0b11111110,0b10000000,0b10000000}; const char LETTER_U[5] = {0b11111100,0b00000010,0b00000010,0b00000010,0b11111100}; const char LETTER_V[5] = {0b11111000,0b00000100,0b00000010,0b00000100,0b11111000}; const char LETTER_W[5] = {0b11111100,0b00000010,0b00011100,0b00000010,0b11111100}; const char LETTER_X[5] = {0b11000110,0b00101000,0b00010000,0b00101000,0b11000110}; const char LETTER_Y[5] = {0b11100000,0b00010000,0b00001110,0b00010000,0b11100000}; const char LETTER_Z[5] = {0b11000010,0b10100010,0b10010010,0b10001010,0b10000110}; const char LETTER_a[5] = {0b00011110,0b00101010,0b00101010,0b00101010,0b00000100}; const char LETTER_b[5] = {0b00011100,0b00100010,0b00100010,0b00010010,0b11111110}; const char LETTER_c[5] = {0b00000100,0b00100010,0b00100010,0b00100010,0b00011100}; const char LETTER_d[5] = {0b11111110,0b00010010,0b00100010,0b00100010,0b00011100}; const char LETTER_e[5] = {0b00011000,0b00101010,0b00101010,0b00101010,0b00011100}; const char LETTER_f[5] = {0b01000000,0b10000000,0b10010000,0b01111110,0b00010000}; const char LETTER_g[5] = {0b00111110,0b00100101,0b00100101,0b00100101,0b00011000}; const char LETTER_h[5] = {0b00011110,0b00100000,0b00100000,0b00010000,0b11111110}; const char LETTER_i[5] = {0b00000000,0b00000010,0b10111110,0b00100010,0b00000000}; const char LETTER_j[5] = {0b00000000,0b01011110,0b00010001,0b00000001,0b00000010}; const char LETTER_k[5] = {0b00100010,0b00010100,0b00001000,0b11111110,0b00000000}; const char LETTER_l[5] = {0b00000000,0b00000010,0b11111110,0b10000010,0b00000000}; const char LETTER_m[5] = {0b00011110,0b00100000,0b00011000,0b00100000,0b00111110}; const char LETTER_n[5] = {0b00011110,0b00100000,0b00100000,0b00010000,0b00111110}; const char LETTER_o[5] = {0b00011100,0b00100010,0b00100010,0b00100010,0b00011100}; const char LETTER_p[5] = {0b00011000,0b00100100,0b00100100,0b00100100,0b00111111}; const char LETTER_q[5] = {0b00111111,0b00010100,0b00100100,0b00100100,0b00011000}; const char LETTER_r[5] = {0b00010000,0b00100000,0b00100000,0b00010000,0b00111110}; const char LETTER_s[5] = {0b00000100,0b00101010,0b00101010,0b00101010,0b00010010}; const char LETTER_t[5] = {0b00000100,0b00000010,0b00100010,0b11111100,0b00100000}; const char LETTER_u[5] = {0b00111110,0b00000100,0b00000010,0b00000010,0b00111100}; const char LETTER_v[5] = {0b00111000,0b00000100,0b00000010,0b00000100,0b00111000}; const char LETTER_w[5] = {0b00111100,0b00000010,0b00001100,0b00000010,0b00111100}; const char LETTER_x[5] = {0b00100010,0b00010100,0b00001000,0b00010100,0b00100010}; const char LETTER_y[5] = {0b00111110,0b00000101,0b00000101,0b00000101,0b00111000}; const char LETTER_z[5] = {0b00100010,0b00110010,0b00101010,0b00100110,0b00100010}; const char EXCLAMATION[5] = {0b00000000,0b00000000,0b11110010,0b00000000,0b00000000}; const char QUOTATION[5] = {0b00000000,0b11100000,0b00000000,0b11100000,0b00000000}; const char HASH[5] = {0b00101000,0b11111110,0b00101000,0b11111110,0b00101000}; const char DOLLAR[5] = {0b01001000,0b01010100,0b11111110,0b01010100,0b00100100}; const char PERCENT[5] = {0b01000110,0b00100110,0b00010000,0b11001000,0b11000100}; const char AMPERSAND[5] = {0b00001010,0b01000100,0b10101010,0b10010010,0b01101100}; const char APOSTROPHY[5] = {0b00000000,0b00000000,0b11000000,0b10100000,0b00000000}; const char CURLY_BRAK_IN[5]= {0b00000000,0b10000010,0b01000100,0b00111000,0b00000000}; const char CURLY_BRAK_OUT[5]= {0b00000000,0b00111000,0b01000100,0b10000010,0b00000000}; const char ASTERIX[5] = {0b00101000,0b00010000,0b01111100,0b00010000,0b00101000}; const char PLUS[5] = {0b00010000,0b00010000,0b01111100,0b00010000,0b00010000}; const char COMMA[5] = {0b00000000,0b00000000,0b00001100,0b00001010,0b00000000}; const char MINUS[5] = {0b00010000,0b00010000,0b00010000,0b00010000,0b00010000}; const char FULL_STOP[5] = {0b00000000,0b00000110,0b00000110,0b00000000,0b00000000}; const char SLASH[5] = {0b01000000,0b00100000,0b00010000,0b00001000,0b00000100}; const char COLON[5] = {0b00000000,0b01101100,0b01101100,0b00000000,0b00000000}; const char SEMI_COLON[5] = {0b00000000,0b01101100,0b01101010,0b00000000,0b00000000}; const char LESS_THAN[5] = {0b00000000,0b10000010,0b01000100,0b00101000,0b00010000}; const char EQUALS[5] = {0b00101000,0b00101000,0b00101000,0b00101000,0b00101000}; const char GREATER_THAN[5] = {0b00010000,0b00101000,0b01000100,0b10000010,0b00000000}; const char QUESTION_MARK[5]= {0b01100000,0b10010000,0b10001010,0b10000000,0b01000000}; const char NUMBER_0[5] = {0b01111100,0b10100010,0b10010010,0b10001010,0b01111100}; const char NUMBER_1[5] = {0b00000000,0b00000010,0b11111110,0b01000010,0b00000000}; const char NUMBER_2[5] = {0b01100010,0b10010010,0b10001010,0b10000110,0b01000010}; const char NUMBER_3[5] = {0b10001100,0b11010010,0b10100010,0b10000010,0b10000100}; const char NUMBER_4[5] = {0b00001000,0b11111110,0b01001000,0b00101000,0b00011000}; const char NUMBER_5[5] = {0b10011100,0b10100010,0b10100010,0b10100010,0b11100100}; const char NUMBER_6[5] = {0b00001100,0b10010010,0b10010010,0b01010010,0b00111100}; const char NUMBER_7[5] = {0b11000000,0b10100000,0b10010000,0b10001110,0b10000000}; const char NUMBER_8[5] = {0b01101100,0b10010010,0b10010010,0b10010010,0b01101100}; const char NUMBER_9[5] = {0b01111000,0b10010100,0b10010010,0b10010010,0b01100000}; const char SPACE[5] = {0b00000000,0b00000000,0b00000000,0b00000000,0b00000000}; // // PROGRAM DECLARATIONS // int i; unsigned int search, row; char ch; // // MESSAGE BUFFER // bank1 char message[20] = "Harvey Twyman"; // // CHARACTER SCAN DELAY FUNCTION // void scan_delay(){ // START ADC CONVERSION ADGO = 1; // WAIT FOR EOC while(ADGO) {} // THE M.S. BYTE OF THE 10 BIT ADC DATA IS REGISTER "ADRESH" // NOW WAIT FOR THAT TIME... for (i=0 ; i!=ADRESH ; i++) {} // PLACE UART RX POLLING HERE INSIDE THE {} } // // MAIN LOOP // main(){ // // I/O PORT INITIALISATION // STATUS = 0x20; TRISC = 0; /* all bits output */ STATUS = 0; // // ADC INITIALISATION - a POT is connected to RA0 Analog I/P // // // FOSC/2 : CHANNEL RA0 SELECTED ADCON0 = 0b00000001; // LEFT JUSTIFY 3 CHANNELS ADCON1 = 0b00000100; // // SCAN MESSAGE BUFFER FOR EVER // for(;;){ // STRING LOOK UP AND DISPLAY for(search=20;search!=0;search--){ switch (message[search]) { case 'A': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_A[row]); scan_delay(); } break; case 'B': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_B[row]); scan_delay(); } break; case 'C': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_C[row]); scan_delay(); } break; case 'D': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_D[row]); scan_delay(); } break; case 'E': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_E[row]); scan_delay(); } break; case 'F': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_F[row]); scan_delay(); } break; case 'G': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_G[row]); scan_delay(); } break; case 'H': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_H[row]); scan_delay(); } break; case 'I': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_I[row]); scan_delay(); } break; case 'J': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_J[row]); scan_delay(); } break; case 'K': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_K[row]); scan_delay(); } break; case 'L': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_L[row]); scan_delay(); } break; case 'M': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_M[row]); scan_delay(); } break; case 'N': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_N[row]); scan_delay(); } break; case 'O': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_O[row]); scan_delay(); } break; case 'P': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_P[row]); scan_delay(); } break; case 'Q': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_Q[row]); scan_delay(); } break; case 'R': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_R[row]); scan_delay(); } break; case 'S': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_S[row]); scan_delay(); } break; case 'T': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_T[row]); scan_delay(); } break; case 'U': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_U[row]); scan_delay(); } break; case 'V': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_V[row]); scan_delay(); } break; case 'W': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_W[row]); scan_delay(); } break; case 'X': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_X[row]); scan_delay(); } break; case 'Y': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_Y[row]); scan_delay(); } break; case 'Z': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_Z[row]); scan_delay(); } break; case 'a': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_a[row]); scan_delay(); } break; case 'b': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_b[row]); scan_delay(); } break; case 'c': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_c[row]); scan_delay(); } break; case 'd': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_d[row]); scan_delay(); } break; case 'e': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_e[row]); scan_delay(); } break; case 'f': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_f[row]); scan_delay(); } break; case 'g': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_g[row]); scan_delay(); } break; case 'h': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_h[row]); scan_delay(); } break; case 'i': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_i[row]); scan_delay(); } break; case 'j': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_j[row]); scan_delay(); } break; case 'k': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_k[row]); scan_delay(); } break; case 'l': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_l[row]); scan_delay(); } break; case 'm': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_m[row]); scan_delay(); } break; case 'n': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_n[row]); scan_delay(); } break; case 'o': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_o[row]); scan_delay(); } break; case 'p': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_p[row]); scan_delay(); } break; case 'q': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_q[row]); scan_delay(); } break; case 'r': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_r[row]); scan_delay(); } break; case 's': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_s[row]); scan_delay(); } break; case 't': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_t[row]); scan_delay(); } break; case 'u': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_u[row]); scan_delay(); } break; case 'v': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_v[row]); scan_delay(); } break; case 'w': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_w[row]); scan_delay(); } break; case 'x': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_x[row]); scan_delay(); } break; case 'y': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_y[row]); scan_delay(); } break; case 'z': for(row=0 ; row<5 ; row++){ PORTC = ~(LETTER_z[row]); scan_delay(); } break; case '0': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_0[row]); scan_delay(); } break; case '1': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_1[row]); scan_delay(); } break; case '2': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_2[row]); scan_delay(); } break; case '3': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_3[row]); scan_delay(); } break; case '4': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_4[row]); scan_delay(); } break; case '5': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_5[row]); scan_delay(); } break; case '6': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_6[row]); scan_delay(); } break; case '7': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_7[row]); scan_delay(); } break; case '8': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_8[row]); scan_delay(); } break; case '9': for(row=0 ; row<5 ; row++){ PORTC = ~(NUMBER_9[row]); scan_delay(); } break; case 0x21: for(row=0 ; row<5 ; row++){ PORTC = ~(EXCLAMATION[row]); scan_delay(); } break; case 0x22: for(row=0 ; row<5 ; row++){ PORTC = ~(QUOTATION[row]); scan_delay(); } break; case 0x23: for(row=0 ; row<5 ; row++){ PORTC = ~(HASH[row]); scan_delay(); } break; case 0x24: for(row=0 ; row<5 ; row++){ PORTC = ~(DOLLAR[row]); scan_delay(); } break; case 0x25: for(row=0 ; row<5 ; row++){ PORTC = ~(PERCENT[row]); scan_delay(); } break; case 0x26: for(row=0 ; row<5 ; row++){ PORTC = ~(AMPERSAND[row]); scan_delay(); } break; case 0x27: for(row=0 ; row<5 ; row++){ PORTC = ~(APOSTROPHY[row]); scan_delay(); } break; case 0x28: for(row=0 ; row<5 ; row++){ PORTC = ~(CURLY_BRAK_IN[row]); scan_delay(); } break; case 0x29: for(row=0 ; row<5 ; row++){ PORTC = ~(CURLY_BRAK_OUT[row]); scan_delay(); } break; case 0x2A: for(row=0 ; row<5 ; row++){ PORTC = ~(ASTERIX[row]); scan_delay(); } break; case 0x2B: for(row=0 ; row<5 ; row++){ PORTC = ~(PLUS[row]); scan_delay(); } break; case 0x2C: for(row=0 ; row<5 ; row++){ PORTC = ~(COMMA[row]); scan_delay(); } break; case 0x2D: for(row=0 ; row<5 ; row++){ PORTC = ~(MINUS[row]); scan_delay(); } break; case 0x2E: for(row=0 ; row<5 ; row++){ PORTC = ~(FULL_STOP[row]); scan_delay(); } break; case 0x2F: for(row=0 ; row<5 ; row++){ PORTC = ~(SLASH[row]); scan_delay(); } break; case 0x3A: for(row=0 ; row<5 ; row++){ PORTC = ~(COLON[row]); scan_delay(); } break; case 0x3B: for(row=0 ; row<5 ; row++){ PORTC = ~(SEMI_COLON[row]); scan_delay(); } break; case 0x3C: for(row=0 ; row<5 ; row++){ PORTC = ~(LESS_THAN[row]); scan_delay(); } break; case 0x3D: for(row=0 ; row<5 ; row++){ PORTC = ~(EQUALS[row]); scan_delay(); } break; case 0x3E: for(row=0 ; row<5 ; row++){ PORTC = ~(GREATER_THAN[row]); scan_delay(); } break; case 0x3F: for(row=0 ; row<5 ; row++){ PORTC = ~(QUESTION_MARK[row]); scan_delay(); } break; case 0x20: for(row=0 ; row<5 ; row++){ PORTC = ~(SPACE[row]); scan_delay(); } break; default: for(row=0 ; row<5 ; row++){ PORTC = ~(SPACE[row]); scan_delay(); } break; } PORTC = ~(0); // SEPERATE CHARACTERS WITH A SINGLE BLANK PIXEL COLUMN scan_delay(); } } }