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

Programowanie zamka kodowego w Bascom na AT89C2051: pytania dotyczące przycisków i procedur

Seps111 20 Sie 2021 13:11 534 4
REKLAMA
  • #1 19571962
    Seps111
    Poziom 3  
    Witam, niedawno zacząłem pisać w ramach nauki program do zamka kodowego na bazie AT89C2051. Niestety jak wiadomo w porównaniu do avr, arduino itd. bascom ma mało poradników czy coś w tym stylu w internecie. Mam kilka pytań w sprawie bascoma:
    1. Jak zrobić tak żeby po wciśnięciu przycisku wykonała się jakaś czynność jeden raz a potem program będzie czekać na puszczenie przycisku.
    2. Jak zrobić działającą procedurę łączącą kolejno otrzymywane cyfry w jedną liczbę ( naprzykład 1 + 3 + 5 + 9 = 1359)
    Z tego co znalazłem jest coś takiego ale niestety nie udało mi się tego uruchomić ponieważ miałem nierozwiązany problem 1 tzn po wciśnięciu przycisku 3 zmienna Kod po ułamku sekundy wynosiła 33333.....
    Kod = Kod x 10
    Kod = Kod + Cyfra

    Poniżej działająca wersja sprawdzająca tylko zmienną Cyfra.


    $regfile = "89c2051.dat"
    $crystal = 3580000


    Dim Kol As Byte , Button As Byte , Fail As Byte
    Dim Cyfra As Byte
    Dim I As Byte , A As Byte
    Dim Cy As Byte
    Dim Klucz As Word
    Dim Kod As Word
    Dim Proces As Bit

    Declare Sub Spr
    Declare Sub Buz


    Buzzer Alias P1.0



    P1.6 = 1
    P1.7 = 0
    P1.3 = 0

    Cyfra = 13
    Cy = 1
    Proces = 0

    Klucz = 7


    Do

    'Odczyt z klawiatury
    '/////////////////////////////////////////////////
    If Kol = 0 Then
    Reset P3.0
    If P3.3 = 0 Then Cyfra = 12
    If P3.4 = 0 Then Cyfra = 9
    If P3.5 = 0 Then Cyfra = 6
    If P3.7 = 0 Then Cyfra = 3
    Set P3.0
    End If


    If Kol = 1 Then
    Reset P3.1
    If P3.3 = 0 Then Cyfra = 0
    If P3.4 = 0 Then Cyfra = 8
    If P3.5 = 0 Then Cyfra = 5
    If P3.7 = 0 Then Cyfra = 2
    Set P3.1
    End If


    If Kol = 2 Then
    Reset P3.2
    If P3.3 = 0 Then Call Spr
    If P3.4 = 0 Then Cyfra = 7
    If P3.5 = 0 Then Cyfra = 4
    If P3.7 = 0 Then Cyfra = 1
    Set P3.2
    End If


    Incr Kol
    If Kol = 3 Then
    Kol = 0
    End If
    '/////////////////////////////////////////////////
    Loop


    Sub Spr
    If Cyfra = Klucz Then
    P1.3 = 1
    P1.6 = 0
    Wait 2
    P1.3 = 0
    P1.6 = 1
    Cyfra = 13
    Else
    Call Buz
    End If
    End Sub Spr

    Sub Buz
    Buzzer = 1
    Waitms 10
    Buzzer = 0
    Waitms 100
    Buzzer = 1
    End Sub Buz
  • REKLAMA
  • #2 19571981
    sp3ots
    Poziom 38  
    Witam !
    odp.1 polecenie Bitwait

    Podobnie jak w Bascomie AVR.
  • REKLAMA
  • #3 19572003
    Seps111
    Poziom 3  
    Dzięki za odpowiedź, przeczytałem temat BITWAIT referencji 8051 https://8051help.mcselec.com/. Jednak nadal nie rozumiem jak bym mógł to zaimplementować w kodzie. Jak można to zastosować na tym przykładzie że przy wciśnięciu klawisza 9 wykonuje się COSTAM jeden raz i po puszczeniu go ten bit się resetuje więc można dalej wprowadzić kod. Pozdrawiam

    If P3.4 = 0 Then Cyfra = 9

    Sub costam

    end sub costam
  • REKLAMA
  • #4 19572010
    sp3ots
    Poziom 38  
    To:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Zastąp tym:
    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    Do pokazania kodu stosuj zakładkę SYNTAX i wybierz Bascom
  • #5 19572057
    Seps111
    Poziom 3  
    Zrobiłem coś takiego, po uruchomieniu wciskanie klawisza 9 daje jeden pik nawet przy trzymaniu do powtórnego wciśnięcia (czyli tak jak chciałem). Klawisz gwiazdka sprawdza poprawność kodu, czyli klikam klawisz 7 a potem * i załącza się przekaźnik na 2 sekundy, gdy kod jest zły ma być pik. Pik jest tylko przy pierwszym wciśnięciu a potem coś się blokuje i nawet wciśnięcie 9 nie powoduje piku, jedynie reset lub wpisanie prawidłowego kodu i * przywraca urządzenie do pierwotnego stanu.

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod
REKLAMA