int seven_segment_digits[10][7] = { { 1, 1, 1, 1, 1, 1, 0 }, // display '0' { 0, 1, 1, 0, 0, 0, 0 }, // display '1' { 1, 1, 0, 1, 1, 0, 1 }, // display '2' { 1, 1, 1, 1, 0, 0, 1 }, // display '3' { 0, 1, 1, 0, 0, 1, 1 }, // display '4' { 1, 0, 1, 1, 0, 1, 1 }, // display '5' { 1, 0, 1, 1, 1, 1, 1 }, // display '6' { 1, 1, 1, 0, 0, 0, 0 }, // display '7' { 1, 1, 1, 1, 1, 1, 1 }, // display '8' { 1, 1, 1, 0, 0, 1, 1 } // display '9' }; byte seg_code[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e}; byte seg_codeB[10]; byte seg_codeC[10]; byte seg_codeD[10]; int digitPins[] = {5, 6, 4, 3}; //Digits: 1,2,3,4 <--put one resistor (ex: 220 Ohms, or 330 Ohms, etc, on each digit pin) //PD3-6 int segmentPins[] = {A0, 7 , A3, A4, A5 , A1 , A2}; //12,11,A5, A4, A3, A2, A1, PD7}; //Segments: A,B,C,D,E,F,G, PC0-5 PD7 uint8_t BMask = 0; uint8_t CMask = 0; uint8_t DMask = 0; void setup() { Serial.begin(57600); // put your setup code here, to run once: for (int i = 0; i < 10; i++) for (int c = 0; c < 7; c++) { if (seven_segment_digits[i][c] == 1) digitalWrite2(i, c); } Serial.println(BMask, BIN); Serial.println(CMask, BIN); Serial.println(DMask, BIN); Serial.println("c"); for (int i = 0; i < 10; i++) Serial.println(seg_codeC[i], BIN); Serial.println("b"); for (int i = 0; i < 10; i++) Serial.println(seg_codeB[i], BIN); Serial.println("c"); for (int i = 0; i < 10; i++) Serial.println(seg_codeD[i], BIN); } void loop() { // put your main code here, to run repeatedly: } void digitalWrite2mask(uint8_t pin, uint8_t val) { uint8_t bit = 0; bit = digitalPinToBitMask(pin); if (pin < 8) DMask |= bit; else if (pin < 14) BMask |= bit; else if (pin > 13) CMask |= bit; } boolean getsegstate(uint8_t seg) { if (seven_segment_digits[seg] == 1) return true; } void digitalWrite2( uint8_t seg, uint8_t order) { uint8_t bit = 0; uint8_t pin= segmentPins[order]; bit = digitalPinToBitMask(segmentPins[order]); if (pin < 8) { DMask |= bit; if (seven_segment_digits[seg][order] == 1) seg_codeD[seg] |= bit; } else if (pin < 14) { BMask |= bit; Serial.println("test"); if (seven_segment_digits[seg][order] == 1) seg_codeB[seg] |= bit; } else if (pin > 13) { CMask |= bit; if (seven_segment_digits[seg][order] == 1) seg_codeC[seg] |= bit; } // // // uint8_t port = digitalPinToPort(pin); // volatile uint8_t *out; // // out = portOutputRegister(port); // // uint8_t oldSREG = SREG; // cli(); // uint8_t val = 0; // if (val == LOW) { // *out &= ~bit; // } else { // *out |= bit; // } // // SREG = oldSREG; }