Witam! Led: Liczba = A Reszta = Liczba Mod 10 Dane_led(1) = Lookup(reszta , Led_cyfry) Liczba = Liczba / 10 Reszta = Liczba Mod 10 Dane_led(2) = Lookup(reszta , Led_cyfry) Set Led2 Set Led1 Dataport = Dane_led(akt_led) Select Case Akt_led Case 1 : Reset Led1 Case 2 : Reset Led2 End Select Incr Akt_led If Akt_led > 2 Then Akt_led = 1 Return Led_cyfry: Data &B00000000 , &B00000001 , &B00000010 , &B00000011 , &B00000100 , &B00000101 , &B00000110 , &B00000111 , &B00001000 , &B00001001 Przy takiej obsłudze na pozostałych portach mam caly czas 0 lub mogę ustawić 1,ale nie mogę sterować tym.
|
|||
sprawa nie jest skomplikowana
Coś mi się wydaje że oszczędzasz nogi ?C ;-))
Ja to robię tak:
po pierwsze odczytuję stan całego portu - robię kopię (-;
po drugie dalsze operacje wykonują się na tej kopii
po trzecie zapisuję wynik z kopii z powrotem do tego portu
Teraz esencja:
żeby nie nadpisać bitów które mają pozostać można wykorzystać stosowną funkcję logiczną,
żeby to lepiej zobrazować zakładam że z portu odczytano
&B10110011
chcemy nadpisać dla przykładu część LSB czterema bitami 1001, w zapisie 8 bitowym będzie to &B00001001
więc do wykonania mamy operację &B10110011 AND &B11110000 która ustawi w interesującej nas części same zera, i otrzymamy wynik &B10110000, abyśmy w drugim kroku mogli wykonać &B10110000 OR &B00001001, co da wynik &B10111001, popróbuj może da się prościej ...
gdyby bity do nadpisania nie były w ciągu jeden koło drugiego to pozostaje chyba tylko operacja wyłuskania bitowego i przepisanie interesujących nas bitów, bit po bicie np
chcemy nadpisać bity 3 i 7 więc P3.2 = zmienna.2 oraz P3.6 = zmienna.6
no chyba że ktoś poda rozwiązanie lepsze.
Operacje logiczne mają "wielką moc" i nie należy ich unikać o czym się niejednokrotnie przekonałem. Trzeba trochu makówę wysilić i do łyknięcia wszystko ;-D
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Nie jak na razie nie
Nie jak na razie nie oszczędzam nóg:),tylko poszerzam wiedze.W sumie ja do tego na początku źle podszedłem .Mozna to było napisać dużo prościej i napisałem to.W sumie maskowałem tak jak to opisałeś.ten scalaczek obcykałem:) Później wziąłem sie za Expander PCF i tez udało mi sie obsłużyć wyświetlacz led Jednak maskowanie mi nie wyszło.I te pozostałe 4 porty sobie mrugały jak chciały.:)teraz po twojej odpowiedzi pomyślałem,ze można sobie napisać mały programik i symulować te operacje logiczne i sobie to poćwiczyć.Kurcze skąd Wy to wszystko wiecie?To jest bardzo niesprawiedliwe!
no już tamm....
po prostu siedzę i dlube .... pewno tak samo jak Ty, i też nie mam kiedy ....
Co jest niesprawiedliwe? że dostałeś rybkę zamiast wędki? ;-p
A mnie nikt nie chce podpowiadać ...
Grzeniu73 takie same "stare trufle" jesteśmy ... więc dobrze wiesz ile czasu mamy na to co zajefajne ;-)
sam bym tego lepiej nie wymyślił ;-p
Masz GyGy?
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Siema!No mam GG
Siema!No mam GG 6032700.Jestem zawsze niewidoczny,ale popołudniu zazwyczaj jestem.Niesprawiedliwe jest,ze Wy wiecie a ja nie:)Ale spoko doganiam Was.
Witam i przedstawiam problem
Bawię się z wyświetlaczem 7 segment. i pojawił się problem, dziwny problem.
Czy ktoś wie co robię źle ?
Odp - Wyświetlacze 7 segment i rzutowanie zmiennych
W Helpie do Bascom możesz przeczytać że poprawny wynik jest gwarantowany tylko jeśli wynik działania operacji matematycznej jest zapisywany do zmiennej takiego samego typu na jakich działanie jest wykonywane.
Dzieląc zmienną typu Word musisz posłużyć się pomocniczą zmienną typu Word do zapisania wyniku.
Potem dopiero wartość ze zmiennej pomocniczej zapisujesz do takiej o typie jaki potrzebujesz.
Poniżej test wykonany w symulatorze. Polecam w nim sprawdzać takie zagadki.
W pierwszej linii widać błąd obliczeń - wynik zero dla 1234/1000
W drugiej linii wynik jest prawidłowy.
Zrobiłem krótki opis obsługi tych wyświetlaczy i nie zapomniałem o tym oraz zwracałem uwagę Link Wyświetlacze 7segment
Miłego dnia ;)
BARTek
Moja strona
odpowiedź
Hejka !
Znowu Ty mnie wyciągasz z tarapatów.
Dzięki stokrotne, wrócę do domu z pracy to zaraz sprawdzę.
Faktycznie z tymi zmiennymi to prawda , bo jak zamiast Byte dałem Word
to wynik był 2234, tylko czemu a nie 1234 - pewnikiem brak tej pomocniczej.
Pozdrawiam serdecznie i życzę miłego dnia .
P.S.
Kiedys pomagałeś mi dopracować zegar z odb. GPS
a teraz znowu.
Zaglądnąłem na Twoją stronę - świetna, jest to co będę chciał ugryźć
z tym, że nie dokońca bo masz opis 595 a ja chcę 164 ( rejestr przes. )
No i jestem w domu, robię próby.
Z cyfrą 1234 jest Ok ale gdy wpiszę n.p. 0968 to już nie.
No, poradziłem sobie , doświadczenie zdobyte :)
P/W
Nowe zadanie , nowy problem
zrobiłem licznik dni sterowany z odbiornika GPS.
Od zadanej przyciskami wartości początkowej licznik
jest zwiększany o jeden gdy Y1,Y2 - godziny = 00
Y3,Y4 - minuty = 00 i Y5,Y6 - sekundy =00, czyli
o godzinie 00:00:00.
Wszystko działa jak należy.
Oto kod
Obsługi wyswietlania godziny tu nie ma, ale to nie problem.
Problem pojawił się gdy zachciało mnie się takiego samego licznika
ale liczącego w dół od zadanej wartości.
Jakieś podpowiedzi ?