const int ROW1 = 35; const int ROW2 = 32; const int ROW3 = 33; const int ROW4 = 38; const int ROW5 = 39; const int ROW6 = 31; const int ROW7 = 30; const int COL1_1 = 52; const int COL2_1 = 40; const int COL3_1 = 47; const int COL4_1 = 44; const int COL5_1 = 45; const int COL1_2 = 46; const int COL2_2 = 50; const int COL3_2 = 51; const int COL4_2 = 48; const int COL5_2 = 53; const int COL1_3 = 29; const int COL2_3 = 43; const int COL3_3 = 42; const int COL4_3 = 41; const int COL5_3 = 49; const int CP1 = 28; const int CP2 = 36; const int CP3 = 37; const int CP4 = 34; unsigned int disp[4][7]; void load_display() { disp[0][0] = 0b100101111010000; disp[0][1] = 0b100101000010000; disp[0][2] = 0b100101000010000; disp[0][3] = 0b111101110010000; disp[0][4] = 0b100101000010000; disp[0][5] = 0b100101000010000; disp[0][6] = 0b100101111011110; disp[1][0] = 0b100000110000000; disp[1][1] = 0b100001001000000; disp[1][2] = 0b100001001000000; disp[1][3] = 0b100001001000000; disp[1][4] = 0b100001001000000; disp[1][5] = 0b100001001000000; disp[1][6] = 0b111100110000000; disp[2][0] = 0b100001000000000; disp[2][1] = 0b100001000001100; disp[2][2] = 0b111001000010010; disp[2][3] = 0b100001110011100; disp[2][4] = 0b100001001010000; disp[2][5] = 0b100101001010010; disp[2][6] = 0b011001001001100; disp[3][0] = 0b000000000000100; disp[3][1] = 0b101100110000100; disp[3][2] = 0b110001001000100; disp[3][3] = 0b100001110000100; disp[3][4] = 0b100001000000100; disp[3][5] = 0b100001001000000; disp[3][6] = 0b100000110000100; } void setup() { pinMode(ROW1, OUTPUT); pinMode(ROW2, OUTPUT); pinMode(ROW3, OUTPUT); pinMode(ROW4, OUTPUT); pinMode(ROW5, OUTPUT); pinMode(ROW6, OUTPUT); pinMode(ROW7, OUTPUT); pinMode(COL1_1, OUTPUT); pinMode(COL2_1, OUTPUT); pinMode(COL3_1, OUTPUT); pinMode(COL4_1, OUTPUT); pinMode(COL5_1, OUTPUT); pinMode(COL1_1, OUTPUT); pinMode(COL2_2, OUTPUT); pinMode(COL3_2, OUTPUT); pinMode(COL4_2, OUTPUT); pinMode(COL5_2, OUTPUT); pinMode(COL1_3, OUTPUT); pinMode(COL2_3, OUTPUT); pinMode(COL3_3, OUTPUT); pinMode(COL4_3, OUTPUT); pinMode(COL5_3, OUTPUT); pinMode(CP1, OUTPUT); pinMode(CP2, OUTPUT); pinMode(CP3, OUTPUT); pinMode(CP4, OUTPUT); clear_all(); clear_row(); } byte interleave(byte numin) { if (numin == 0) return(0); if (numin == 1) return(2); if (numin == 2) return(4); if (numin == 3) return(6); if (numin == 4) return(1); if (numin == 5) return(3); if (numin == 6) return(5); } void clear_all() { digitalWrite(ROW1, HIGH); // low = enable? digitalWrite(ROW2, HIGH); digitalWrite(ROW3, HIGH); digitalWrite(ROW4, HIGH); digitalWrite(ROW5, HIGH); digitalWrite(ROW6, HIGH); digitalWrite(ROW7, HIGH); digitalWrite(COL1_1, LOW); // high = enable digitalWrite(COL2_1, LOW); digitalWrite(COL3_1, LOW); digitalWrite(COL4_1, LOW); digitalWrite(COL5_1, LOW); digitalWrite(COL1_2, LOW); digitalWrite(COL2_2, LOW); digitalWrite(COL3_2, LOW); digitalWrite(COL4_2, LOW); digitalWrite(COL5_2, LOW); digitalWrite(COL1_3, LOW); digitalWrite(COL2_3, LOW); digitalWrite(COL3_3, LOW); digitalWrite(COL4_3, LOW); digitalWrite(COL5_3, LOW); digitalWrite(CP1, LOW); digitalWrite(CP2, LOW); digitalWrite(CP3, LOW); digitalWrite(CP4, LOW); } void pulse_cp(int cp) { digitalWrite(cp, HIGH); //delay(1); digitalWrite(cp, LOW); //delay(1); } void pulse_all() { digitalWrite(CP1, HIGH); digitalWrite(CP2, HIGH); digitalWrite(CP3, HIGH); digitalWrite(CP4, HIGH); //delay(1); digitalWrite(CP1, LOW); digitalWrite(CP2, LOW); digitalWrite(CP3, LOW); digitalWrite(CP4, LOW); //delay(1); } void pattern(unsigned int bitmap) { digitalWrite(COL1_1, bitRead(bitmap, 10)); digitalWrite(COL2_1, bitRead(bitmap, 11)); digitalWrite(COL3_1, bitRead(bitmap, 12)); digitalWrite(COL4_1, bitRead(bitmap, 13)); digitalWrite(COL5_1, bitRead(bitmap, 14)); digitalWrite(COL1_2, bitRead(bitmap, 5)); digitalWrite(COL2_2, bitRead(bitmap, 6)); digitalWrite(COL3_2, bitRead(bitmap, 7)); digitalWrite(COL4_2, bitRead(bitmap, 8)); digitalWrite(COL5_2, bitRead(bitmap, 9)); digitalWrite(COL1_3, bitRead(bitmap, 0)); digitalWrite(COL2_3, bitRead(bitmap, 1)); digitalWrite(COL3_3, bitRead(bitmap, 2)); digitalWrite(COL4_3, bitRead(bitmap, 3)); digitalWrite(COL5_3, bitRead(bitmap, 4)); } void clear_row() { digitalWrite(ROW1, HIGH); digitalWrite(ROW2, HIGH); digitalWrite(ROW3, HIGH); digitalWrite(ROW4, HIGH); digitalWrite(ROW5, HIGH); digitalWrite(ROW6, HIGH); digitalWrite(ROW7, HIGH); pulse_all(); } void update_display() { unsigned int rowx,row, colx; for (row=0;row<7;row++) { for (colx=0;colx<4;colx++) { rowx=interleave(row); pattern(disp[colx][rowx]); if (rowx == 0) digitalWrite(ROW7, LOW); if (rowx == 1) digitalWrite(ROW6, LOW); if (rowx == 2) digitalWrite(ROW5, LOW); if (rowx == 3) digitalWrite(ROW4, LOW); if (rowx == 4) digitalWrite(ROW3, LOW); if (rowx == 5) digitalWrite(ROW2, LOW); if (rowx == 6) digitalWrite(ROW1, LOW); if (colx==0) pulse_cp(CP1); if (colx==1) pulse_cp(CP2); if (colx==2) pulse_cp(CP3); if (colx==3) pulse_cp(CP4); delay(1); clear_row(); } } } void loop() { load_display(); while(1) { update_display(); } }