Schönen guten Tag, ich habe mir mal einen Code in C geschrieben, der auf einer 7 Segmentanzeige die Zahlen von 0 bis 9 hoch zählt. Das klappt auch alles wie es soll, aber kann man den Code irgendwie noch vereinfahcen? z.B. die delays zusammen fassen oder so? Hier der Code: /* Name: main.c * Projekt: Display */ #include <avr/io.h> #include <util/delay.h> int main() { /* PB0 10 --- PB1 2 | | PB5 9 PB2 3 --- PB3 4 | | PB6 8 PB4 5 --- . PB7 7 1 & 6 = GND 0 = PB0,PB1, PB3, PB4, PB5, PB6 = HEX 0x7b 1 = PB5, PB6 = HEX 0x60 2 = PB0, PB2, PB3, PB4, PB5 = HEX 0x3d 3 = PB0, PB2, PB4, PB5, PB6 = HEX 0x75 4 = PB1, PB2, PB5, PB6 = HEX 0x66 5 = PB0, PB1, PB2, PB4, PB6 = HEX 0x57 6 = PB0, PB1, PB2, PB3, PB4, PB6 = HEX 0x5f 7 = PB0, PB5, PB6 = HEX 0x61 8 = PB0, PB1, PB2, PB3, PB4, PB5, PB6 = HEX 0x7f 9 = PB0, PB1, PB2, PB4, PB5, PB6 = HEX 0x77 */ DDRB=0xff; PORTB=0x00; while(1) { PORTB=0x7b; _delay_ms(1000); PORTB=0x60; _delay_ms(1000); PORTB=0x3d; _delay_ms(1000); PORTB=0x75; _delay_ms(1000); PORTB=0x66; _delay_ms(1000); PORTB=0x57; _delay_ms(1000); PORTB=0x5f; _delay_ms(1000); PORTB=0x61; _delay_ms(1000); PORTB=0x7f; _delay_ms(1000); PORTB=0x77; _delay_ms(1000); PORTB=0x00; _delay_ms(5000); } return 1; } Vielen dank für eure Hilfe!
2 Dinge * ja, klar kann man das noch vereinfachen. Ein Array, welches die Codes enthält würde sich zb anbieten * im Endeffekt macht man aber in richtigen Programmen eine 7-Seg Anzeige komplett anders. Bei einer einstelligen mag das so noch angehen, aber spätestens bei einer mehrstelligen 7-Seg, die gemultiplext wird, wird das über einen Timer realisiert. Aber ich denke, so weit bist du noch nicht. Sieh erst mal zu, dass du in deinem C-Buch über Arrays nachliest.
Sicher digit[11]={0x7b,0x60,0x3d, .... 0x77,0x00 } while(1) { for(i=0;i<11;i++) { PORTB=digit[i]; _delay_ms(1000); } _delay_ms(4000); } Aber verabschiede dich besser gleich von so langen Wartezeiten, du kannst in den _delay_ms nämlich nichts anderen mehr tun. Ein gutes Programm hat eine schnell laufende Hauptschleife und tut eben nur jeden x-ten Durchlauf das was dann nötig ist.
Vielen dank :) Ich werde das gleich mal versuchen umzusetzen und anschließend werde ich mich in arrays einlesen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.