Meine Frage: Ist das Vorgehen so sinnvoll oder sollte ich es komplett anders machen bzw. was könnte ich daran noch optimieren ?
Ja, ich würde das definitiv deutlich anders machen:
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();
}
}
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.
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".
Lesezeichen