Faktycznie jakoś przecinki zamiast średników wstawiłem. Przepraszam, ale jestem dopiero początkujący i popełniam jeszcze takie błędy.
Kod poprawiłem, co by w oczy nie kłuło.
W ramach pokuty postaram się to wyjaśnić.
Więc tak:
Założeniem było wyświetlenie na wyświetlaczu składającym się z 6 wyświetlaczy 7-segmentowch napisu składającego się z 6 znaków: Error_
(gdzie znak '_' oznacza spację)
Następnie po krótkiej przerwie przesunięcie wszystkich znaków o jedno miejsce w lewo z tym, że wypadający znak z lewej strony wskakuje na koniec, czyli ostatnie miejsce z prawej strony.
Operacja ta powtarzana jest 6 razy, by napis przesuwał się płynnie od prawej do lewej.
1. Error_
2. rror_E
3. ror_Er
4. or_Err
5. r_Erro
6. _Error
Powołałem sobie tablicę 6 elementową tab[] typu uint8_t:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zawierającą definicję znaków, które zamierzamy wyświetlić, czyli w kolejności znaki: {E, r, r, o, r, _}
Jeśli chcielibyśmy wyświetlić ten napis ma wyświetlaczu (statycznie) to możemy napisać tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
No tak, ale co z przesunięciem?
Dlatego wymyśliłem sobie, by powołać zmienną uint8_t, która na początku musi mieć wartość zero, ponieważ pierwszy element tablicy to tab[0], prawda?
Całość wrzucić na przykład w pętlę for i wykonać tą operację 6 krotnie, bo tyle chcemy mieć przesunięć, prawda?
No to do dzieła:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Wydaje się, że to powinno działać.
Ale sprawdźmy:
dla j=0:
cy1=tab[0], cy2=tab[1], cy3=tab[2], cy4=tab[3], cy5=tab[4], cy6=tab[5] zgadza się, zobaczymy na wyświetlaczu napis Error_
dla j=1 (drugi obieg pętli for):
cy1=tab[1], cy2=tab[2], cy3=tab[3], cy4=tab[4], cy5=tab[5], cy6=tab[6] spodziewamy się, że zobaczymy na wyświetlaczu napis rror_E, lecz niestety tak się nie stanie, ponieważ przekroczyliśmy zakres tablicy tab[6], którą zdefiniowaliśmy przecież jako 6 elementową. Pierwsze 5 elementów tablicy odczytamy prawidłowo, do naszych zmiennych cy1-cy5 trafią odpowiednie znaki, tworzące napis rror_
No dobra, ale co z tym ostatnim znakiem? Przecież tam powinien trafić pierwszy znak napisu 'E'.
Dlatego użyłem operatora % (modulu) czyli reszta z dzielenia:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Sprawdzamy:
dla j=1 (drugi obieg pętli for):
cy1=tab[1%6], cy2=tab[2%6], cy3=tab[3%6], cy4=tab[4%6], cy5=tab[5%6], cy6=tab[6%6]
w wyniku tej skomplikowanej operacji otrzymamy:
cy1=tab[1], cy2=tab[2], cy3=tab[3], cy4=tab[4], cy5=tab[5], cy6=tab[0] BINGO!!!
Przanalizuj sobie jeszcze dla j=2 (trzecii obieg pętli for), j=3(czwarty obieg pętli for), j=4(piąty obieg pętli for) i j=5(szósty obieg pętli for)
Mam nadzieję, że udało mi się wytłumaczyć "łopatologicznie" mój zaiste skomplikowany algorytm!
