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
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