Ja, ich würde das definitiv deutlich anders machen:Meine Frage: Ist das Vorgehen so sinnvoll oder sollte ich es komplett anders machen bzw. was könnte ich daran noch optimieren ?
Die Daten in SegmentPattern passen so natürlich nicht und müssen angepasst werden (1 = an, 0 = aus). Ich kenne ja schließlich deine Bit/Segment-Zuordnung nicht.Code:#include <avr/pgmspace.h> #define DECIMAL_POINT_BIT 2 static uint8_t SegmentPattern[] PROGMEM = { 0b11101011, // 0 0b00000000, // 1 0b00000000, // 2 0b00000000, // 3 0b00000000, // 4 0b00000000, // 5 0b00000000, // 6 0b00000000, // 7 0b00000000, // 8 0b00000000 // 9 }; void DisplayNumber (uint8_t Number, uint8_t decimalPoint) { uint8_t data = pgm_read_byte(&SegmentPattern[Number]); if (decimalPoint) data |= (1<<DECIMAL_POINT_BIT); for (uint8_t mask = 1; mask; mask <<= 1) { if (data & mask) SERaus else SERan Impuls(); } }
PS: Ich empfinde die SERan und SERaus ohne Semikolon dahinter als ziemlich unschön (und ich bin da sicher nicht der einzige). Nimm die Semikolons aus den Makros raus und platziere sie lieber an "Ort und Stelle".





Zitieren

Lesezeichen