ich hatte es davor mit nur 3 Bytes versucht um dann festzustellen dass der Dezimalpunkt weg war.
meine Anzeige Routine ist hier: (vielleicht nicht die beste aber sie funktioniert)
Code:#define DATENRICHTUNG DDRD #define ANZEIGEPORT PORTD #define SER PD2 #define SCK PD3 #define SCL PD4 #define RCK PD5 void InitAnzeige(void) { DATENRICHTUNG |= ((1<<SER) | (1<<SCK) | (1<<SCL) | (1<<RCK) ); ANZEIGEPORT |= (1<<SCL); } void Impuls(void) { ANZEIGEPORT &= ~(1<<SCK); //_delay_us(10); ANZEIGEPORT |= (1<<SCK); // _delay_us(10); ANZEIGEPORT &= ~(1<<SCK); } void Clear(void) { ANZEIGEPORT &= ~(SCL<<1); ANZEIGEPORT |= (SCL<<1); } void Ausgeben(void) { ANZEIGEPORT &= ~(1<<RCK); ANZEIGEPORT |= (1<<RCK); ANZEIGEPORT &= ~(1<<RCK); } void Write(char *number) { Clear(); static uint8_t zahl1 = 0; static uint8_t zahl2 = 0; uint8_t i = 0; char dotpoint =' '; while (*number) { if(i == 0) { zahl1 = (uint8_t) *number; } if(i == 1) { dotpoint = *number; } if(i == 2) { zahl2 = (uint8_t) *number; } number++; i++; } struct { unsigned A1:1; unsigned B1:1; unsigned C1:1; unsigned D1:1; unsigned E1:1; unsigned F1:1; unsigned G1:1; unsigned DP1:1; unsigned A2:1; unsigned B2:1; unsigned C2:1; unsigned D2:1; unsigned E2:1; unsigned F2:1; unsigned G2:1; unsigned DP2:1; }Segmente; if(dotpoint == '.') { Segmente.DP1 = 1; } switch(zahl1) { case '0': Segmente.A1 = 1; Segmente.B1 = 1; Segmente.C1 = 1; Segmente.E1 = 1; Segmente.D1 = 1; Segmente.F1 = 1; break; case '1': Segmente.B1 = 1; Segmente.C1 = 1; break; case '2': Segmente.A1 = 1; Segmente.B1 = 1; Segmente.G1 = 1; Segmente.E1 = 1; Segmente.D1 = 1; break; case '3': Segmente.A1 = 1; Segmente.B1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.D1 = 1; break; case '4': Segmente.B1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.F1 = 1; break; case '5': Segmente.A1 = 1; Segmente.F1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.D1 = 1; break; case '6': Segmente.A1 = 1; Segmente.F1 = 1; Segmente.E1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.D1 = 1; break; case '7': Segmente.A1 = 1; Segmente.B1 = 1; Segmente.C1 = 1; break; case '8': Segmente.A1 = 1; Segmente.F1 = 1; Segmente.E1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.D1 = 1; Segmente.B1 = 1; break; case '9': Segmente.A1 = 1; Segmente.F1 = 1; Segmente.B1 = 1; Segmente.G1 = 1; Segmente.C1 = 1; Segmente.D1 = 1; break; } switch(zahl2) { case '0': Segmente.A2 = 1; Segmente.B2 = 1; Segmente.C2 = 1; Segmente.E2 = 1; Segmente.D2 = 1; Segmente.F2 = 1; break; case '1': Segmente.B2 = 1; Segmente.C2 = 1; break; case '2': Segmente.A2 = 1; Segmente.B2 = 1; Segmente.G2 = 1; Segmente.E2 = 1; Segmente.D2 = 1; break; case '3': Segmente.A2 = 1; Segmente.B2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.D2 = 1; break; case '4': Segmente.B2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.F2 = 1; break; case '5': Segmente.A2 = 1; Segmente.F2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.D2 = 1; break; case '6': Segmente.A2 = 1; Segmente.F2 = 1; Segmente.E2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.D2 = 1; break; case '7': Segmente.A2 = 1; Segmente.B2 = 1; Segmente.C2 = 1; break; case '8': Segmente.A2 = 1; Segmente.F2 = 1; Segmente.E2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.D2 = 1; Segmente.B2 = 1; break; case '9': Segmente.A2 = 1; Segmente.F2 = 1; Segmente.B2 = 1; Segmente.G2 = 1; Segmente.C2 = 1; Segmente.D2 = 1; break; } //Nummer 1 //Nummer 9 if(Segmente.A2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 10 if(Segmente.B2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 11 if(Segmente.C2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 12 if(Segmente.D2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 13 if(Segmente.E2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 14 if(Segmente.F2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 15 if(Segmente.G2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 16 if(Segmente.DP2 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); if(Segmente.A1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 2 if(Segmente.B1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 3 if(Segmente.C1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 4 if(Segmente.D1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 5 if(Segmente.E1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 6 if(Segmente.F1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 7 if(Segmente.G1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); //Nummer 8 if(Segmente.DP1 == 1) { ANZEIGEPORT |= (1<<SER); } else { ANZEIGEPORT &= ~(1<<SER); } Impuls(); Ausgeben(); }







Zitieren

Lesezeichen