Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 sty 2026, o 17:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 22 mar 2013, o 15:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Witam.

Mam problem z rozłożeniem liczby na cyfry w celu wyświetlania na 7 seg. Napisałem takie coś:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


gdzie cyfra1...cyfra4 to cyfry do wyświetlenia na 7 seg, natomiast liczba to zmienna uint16_t z wartością 1579.

Działanie tego kodu powoduje że na 7 seg widnieje wartość 0070.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


powyższy kod powoduje wyświetlanie 0500.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


natomiast taki wyswietla 1000.

co jest przyczyna nadpisywania tych zmiennych cyfra1...cyfra2.

dodam jeszcze, ze w obsłudze przerwania na potrzeby wyświetlacza nie powinno być błędu, ponieważ wpisanie do zmiennych cyfra1...cyfra4 konkretnych wartości powoduje poprawne wyświetlanie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2013, o 16:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

A jak masz zadeklarowane zmienne cyfra1-4?

Podpowiem o czymś takim jak modulo, niebieska księga strona 89, też nad tym ostatnio sporo siedziałem ;)

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2013, o 16:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

cyfra1...4 to uint8_t, a co do modulo to wiem, że takie coś jest ale nie o to mi chodzi. Zależy mi konkretnie na takim przykładzie jak napisałem, i dlaczego jeśli wyświetla mi poprawnie cyfra3 to cyfra1 i cyra2 pokazują 0.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2013, o 16:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

uint8_t może przyjmować wartości od 0 do 255 w dodatku liczba całkowita

A przy działaniu cyfra1=liczba/1000; co wychodzi?

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2013, o 17:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

liczba%10 => jedności
(liczba/10)%10 => dziesiątki
(liczba/100)%10 => setki
itp.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 mar 2013, o 17:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 sty 2013
Posty: 844
Lokalizacja: Przemyśl
Zbananowany użytkownik

Pomógł: 43

tak ale:
jak wykonasz jakiekolwiek działania na "obciętej" liczbie to co się dzieje?
Popatrz do pierwszego postu

Cytuj:
cyfra1=liczba/1000;
liczba=liczba-(cyfra1*1000);
cyfra2=liczba/100;
liczba=liczba-(cyfra2*100);
cyfra3=liczba/10;

_________________
Klimatyzacja Przemyśl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2013, o 12:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 lip 2012
Posty: 157
Pomógł: 8

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to rozwiązało problem, interesuje mnie dlaczego poniższy zapis jest nieprawidłowy:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2013, o 12:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

while(1) -> nadpisuje Ci w końcu wszystkie zmienne zerami... jedno przejście wystarczy, wywal tą pętlę.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2013, o 15:07 
Offline
Użytkownik

Dołączył(a): 05 lut 2013
Posty: 302
Pomógł: 19

k_mirek napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Tutaj nie nadpisujesz zmiennej liczba. Wiec jak masz to w petli to zawsze bedzie ok.

k_mirek napisał(a):
to rozwiązało problem, interesuje mnie dlaczego poniższy zapis jest nieprawidłowy:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a tu jak już przedpiszca wspomniał while robi problem, ponieważ nadpisujesz zmienną liczba coraz mniejszą liczbą.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2013, o 15:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Kod tak jak kolega ledes napisał, z wyświetlaczem 7-seg będzie sprawnie działać,

Rozbicie liczby na poszczególne cyfry:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie rozumie waszych skomplikowanych kodzików do prostych rzeczy, chyba że źle rozumie :roll:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2013, o 00:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 paź 2011
Posty: 780
Pomógł: 20

Ten sposób działa doskonale chyba prościej i szybciej nie da się tego zrobić :)

Pozdrawiam

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO