logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8][BASCOM] Przycisk i dodawanie do zmiennej

otto25 19 Cze 2010 23:40 2711 2
REKLAMA
  • #1 8208466
    otto25
    Poziom 15  
    Witam, na początku dodam że dopiero zaczynam z BASCOMem.
    Mój problem polega na tym iż po naciśnięciu przycisku nr1 chcę aby do zmiennej "Liczba" było dodane 1 czyli gdy zmienna liczba wynosi 0 to po naciśnięciu przycisku 1 wynosiła 1. Po przyciśnięciu przycisku nr 2 na odwrót czyli zęby było odejmowane. Wynik ma być wyświetlany na wyświetlaczu 7dmio segmentowym.
    Napisałem program ale niestety nie działa.
    $regfile = "m8def.dat"                                      ' INFORMACJA O PROCESORZE
    $crystal = 1000000                                          ' TAKTOWANIE PROC FABRYCZNE 1Mhz
    
    
    Config Portb = Output                                       ' informuje proc że PB jako wyjście
    Portb = &B11111111
    Config Portd.0 = Output                                     ' informuje proc że PD.0 jako wyjście
    Portd.0 = 1
    Config Portd.2 = Input                                      ' informuje proc że PD.2 jako wejście
    Portd.2 = 1
    Config Portd.3 = Input                                      ' informuje proc że PD.3 jako wejście
    Portd.3 = 1
    
    
    Dim Liczba As Byte
    
    
    Do
    
    If Portd.2 = 0 Then Liczba = Liczba + 1
    If Portd.3 = 0 Then Liczba = Liczba - 1
    
    If Liczba = 0 Then
    Reset Portb.0
    Set Portb.1
    Reset Portb.2
    Reset Portb.3
    Reset Portb.4
    Reset Portb.5
    Reset Portd.0
    Elseif Liczba = 1 Then
    Reset Portb.0
    Set Portb.1
    Reset Portb.2
    Set Portb.3
    Reset Portb.4
    Reset Portb.5
    Reset Portd.0
    
    End If
    
    
    
    Loop
    End

    Proszę o pomoc.
  • REKLAMA
  • Pomocny post
    #2 8208576
    klops_mops
    Poziom 17  
    Tak na szybko:
    Nie:
    If Portd.2 = 0 Then Liczba = Liczba + 1 

    Tylko:
    If Pind.2 = 0 Then Liczba = Liczba + 1 


    Zamiast tej plątaniny:
    If Liczba = 0 Then 
    Reset Portb.0 
    Set Portb.1 
    Reset Portb.2 
    Reset Portb.3 
    Reset Portb.4 
    Reset Portb.5 
    Reset Portd.0 
    Elseif Liczba = 1 Then 
    Reset Portb.0 
    Set Portb.1 
    Reset Portb.2 
    Set Portb.3 
    Reset Portb.4 
    Reset Portb.5 
    Reset Portd.0 
    
    End If 

    Poczytaj na forum jak najlepiej sterować wyświetlaczem LED 7-segmentowym. Podpowiem - poprzez wpisanie na sztywno konfiguracji portów dla danej liczby, a potem tylko odszukanie jej i wpisanie na port, np.
    
    do
    Liczba = 1
    Na_port = Lookup(Liczba , Wys_LED)
    Portd = Na_port
    loop
    
    
    Wys_LED:
    Data xxx,xxx,xxx 'itp.... TU MUSISZ DOCZYTAĆ
    



    Tak na szybko, mam nadzieje, że choć trochę rozjaśniłem.
  • #3 8208601
    otto25
    Poziom 15  
    Działa, dzięki :)
    Poszukam, doczytam.
    Wklejam poprawiony kod dla ludzi którzy mają również z tym problem.

    $regfile = "m8def.dat"                                      ' INFORMACJA O PROCESORZE
    $crystal = 1000000                                          ' TAKTOWANIE PROC FABRYCZNE 1Mhz
    
    
    Config Portb = Output                                       ' informuje proc że PB jako wyjście
    Portb = &B11111111
    Config Portd.0 = Output                                     ' informuje proc że PD.0 jako wyjście
    Portd.0 = 1
    Config Portd.2 = Input                                      ' informuje proc że PD.2 jako wejście
    Portd.2 = 1
    Config Portd.3 = Input                                      ' informuje proc że PD.3 jako wejście
    Portd.3 = 1
    
    
    Dim Liczba As Byte
    
    
    Do
    
    If Pind.2 = 0 Then Liczba = Liczba + 1
    If Pind.3 = 0 Then Liczba = Liczba - 1
    
    If Liczba = 0 Then
    Reset Portb.0
    Set Portb.1
    Reset Portb.2
    Reset Portb.3
    Reset Portb.4
    Reset Portb.5
    Reset Portd.0
    Elseif Liczba = 1 Then
    Reset Portb.0
    Set Portb.1
    Reset Portb.2
    Set Portb.3
    Reset Portb.4
    Reset Portb.5
    Reset Portd.0
    
    End If
    
    
    
    Loop
    End
REKLAMA