Witam.
Mam problem z napisaniem programu w Bascomie.
Chcę, żeby przyciskami S1 i S2, po naciśnięciu przycisku S3 zmieniać zmienną (Praca) typu Byte
i wyświetlać ją na LCD. Później chcę, żeby dioda (D1) świeciła przez tyle sekund
ile wynosi zmienna i gasła na sekundę (w pętli nieskończonej).
Dla wyjaśnienia:
S1 - Dodanie do zmiennej 1.
S2 - Odjęcie od zmiennej 1.
S3 - Dopiero po naciśnięciu i przytrzymaniu tego przycisku można zmieniać zmienną.
Napisałem taki program:
Program działa, ale nie tak jak bym chciał.
Konkretnie chodzi o to, żeby móc zmieniać zmienną bez względu jaka część programu jest obecnie wykonywana. Teraz można ją zmieniać tylko wtedy, gdy
program dojdzie do momentu komendy If, później trzeba czekać aż uc wykona cały program (zapalenie i zgaszenie diody).
Jeszcze jeden problem, jak już przycisnę przycisk S3, to zmienna potrafi się samoczynnie zmienić (tak jakby S1 lub S2 same się naciskały). Czy jak podłącze je do VCC,
zamiast do GND i w programie zmienię stan 0 jako przyciśnięty na 1, to problem zniknie(o ile tak można)?
Za odpowiedź z góry dziękuję.
Pozdrawiam.
Mam problem z napisaniem programu w Bascomie.
Chcę, żeby przyciskami S1 i S2, po naciśnięciu przycisku S3 zmieniać zmienną (Praca) typu Byte
i wyświetlać ją na LCD. Później chcę, żeby dioda (D1) świeciła przez tyle sekund
ile wynosi zmienna i gasła na sekundę (w pętli nieskończonej).
Dla wyjaśnienia:
S1 - Dodanie do zmiennej 1.
S2 - Odjęcie od zmiennej 1.
S3 - Dopiero po naciśnięciu i przytrzymaniu tego przycisku można zmieniać zmienną.
Napisałem taki program:
$regfile = "m8def.dat" 'informacje o procesrze
$crystal = 1000000 'częstotliwość oscylatora
Config Portb = Input 'linia PB jako wejścia
Config Portd = Output 'linia PD jako wyjścia
Config Lcd = 16 * 2 'typ lcd
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 'konfiguracja lini PC do lcd
S1 Alias Pinb.0 'S1 zamiast PINB.0
S2 Alias Pinb.1 'S2 zamiast PINB.1
S3 Alias Pinb.2 'S3 zamiast PINB.2
D1 Alias Portd.0 'D1 zamiat PORTD.0
Dim Praca As Byte 'zadekalrowanie zmiennej
Praca = 1 'zmienna Praca wynosi 1
Do
If S3 = 0 Then 'jeśli S3 jest naciśnięty, to
Waitms 25
If S1 = 0 Then 'sprawdza, czy S1 jest naciśnięty,
Praca = Praca + 1 'jeśli tak, to do zmiennej Praca dodaj 1
Else 'w przeciwny razie
If S2 = 0 Then 'jeśli S2 jest naciśnięty, to
Praca = Praca - 1 'od zmiennej Praca odejmij 1
End If 'koniec komendy If
End If 'Koniec komendy If
End If 'Koniec komendy If
Cls 'wyczyść lcd
Lcd "czas pracy: " ; Praca 'wyświetlenie zmiennej Praca po słowach: czas pracy:
D1 = 1 'wyłącz D1
Wait 1 'poczekaj sekunde
D1 = 0 'włącz D1
Wait Praca 'odczekaj zmienną Praca (sekundy)
Loop
End 'koniec programuProgram działa, ale nie tak jak bym chciał.
Konkretnie chodzi o to, żeby móc zmieniać zmienną bez względu jaka część programu jest obecnie wykonywana. Teraz można ją zmieniać tylko wtedy, gdy
program dojdzie do momentu komendy If, później trzeba czekać aż uc wykona cały program (zapalenie i zgaszenie diody).
Jeszcze jeden problem, jak już przycisnę przycisk S3, to zmienna potrafi się samoczynnie zmienić (tak jakby S1 lub S2 same się naciskały). Czy jak podłącze je do VCC,
zamiast do GND i w programie zmienię stan 0 jako przyciśnięty na 1, to problem zniknie(o ile tak można)?
Za odpowiedź z góry dziękuję.
Pozdrawiam.