Cześć. Prosze o pomoc w rozwiązaniu problemu, a mianowicie mam problem przy konfiguracji klawiatury. Nie moge ręcznie wpisać kodu np. 1234, tylko program sam dobiera mi kod ( caly czas podaje jedna liczbe"1", tak jak bym ja cały czas wpisywał) kod wtedy jest ustawiany na 1111, ale jeżeli zmienie wartość na "k=2" w miejscu zaznaczonym w kodzie to program będzie dobierał same 2 kod wtedy "2222", jak wpisze 3 to wtedy kod bedzie "3333"
Prosze o pomoc jeżeli ktoś ma jakieś sugestie.
Dodatkowo dodaje schemat klawiatury
kod programu
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
Prosze o pomoc jeżeli ktoś ma jakieś sugestie.
Dodatkowo dodaje schemat klawiatury
kod programu
********************************************
'1) Konfiguracja
'********************************************
$regfile = "m16def.dat" ' informuje kompilator o pliku dyrektyw wykorzystywanego mikrokontrolera
$crystal = 1000000 'częstotliwość mikrokontrolera
Config Lcd = 16 * 2 'Wielkość wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 'konfiguracja pinów
Config Lcdpin = Pin , Db6 = Porta.4 , Db7 = Porta.5 'dla wyświetlacza
Config Lcdpin = Pin , E = Porta.1 , Rs = Porta.0 ' LCD
Config Pinc.7 = Output 'konfiguracja pinów portu C dla klawiatury
Config Pinc.6 = Output '
Config Pinc.5 = Output '
Config Pinc.4 = Input 'piny klawiatury
Config Pinc.3 = Input '
Config Pinc.2 = Input '
Config Pinc.1 = Input '
Config Pinb.0 = Output 'diody led
Config Pinb.1 = Output '
Config Portd.0 = Output 'przekaźnik
Config Pind.0 = Output '
K1 Alias Portc.5
K2 Alias Portc.6
K3 Alias Portc.7
W1 Alias Pinc.4
W2 Alias Pinc.3
W3 Alias Pinc.2
W4 Alias Pinc.1
Przek Alias Portd.0 'ustawienie aliasów dla portu przekaźnika
Led_r Alias Portb.0
Led_g Alias Portb.1
Set Led_r
Set Led_g
Set Portc.4
Set Portc.3
Set Portc.2
Set Portc.1
Set K1
Set K2
Set K3
Declare Sub Sprawdz_kod '
Declare Sub Menu '
Declare Sub Czas_otw 'deklaracja procedur
Declare Sub Zm_kodu
Declare Sub Klawiatura '
Declare Sub Odczyt_kodu
Declare Sub Zamek
Declare Sub Zly_kod
Dim Temp1 As Byte '
Dim Temp2 As Byte '
Dim Przycisk As Byte '
Dim Czas As Byte '
Dim K As Byte '
Dim Z As Byte ' definiowanie zmiennych
Dim Liczba_1 As Byte '
Dim Liczba_2 As Byte '
Dim Liczba_3 As Byte '
Dim Liczba_4 As Byte
Dim Znacznik As Byte '
Dim N As Byte '
Dim T As Byte '
'********************************************
'2) Pierwsze uruchomienie
'********************************************
Cls ' Czyszczenie Lcd
Locate 1 , 5 'ustawienie napisu w pierwszym wierszu na piatej pozycji
Lcd "Hello" 'wyświetlenie na wyświetlaczu napisu HELLO
Cursor Off
Wait 1
Readeeprom Liczba_1 , 2
Waitms 15
If Liczba_1 = 255 Then
Locate 1 , 3
Lcd "Pierwsze"
Locate 2 , 3
Lcd "uruchomienie"
Wait 2
Call Zm_kodu
Else
Call Menu
End If
End
'********************************************
'3) MENU
'********************************************
Sub Menu
Cls
Lcd "1) Otwarcie"
Lowerline
Lcd "2) Zmiana kodu"
Cursor Off
Call Klawiatura
Wait 1
Select Case Przycisk
Case 1 : Call Odczyt_kodu
Case 2 : Call Sprawdz_kod
End Select
End Sub
'********************************************
'4) ODCZYT KODU DO OTWARCIA ZAMKA
'********************************************
Sub Odczyt_kodu
Cls
Lcd ">> PODAJ KOD <<"
Cursor Off
Locate 2 , 6
Cursor Blink
N = 1
Select Case N
Do
Case 1:
Call Klawiatura
Readeeprom Liczba_1 , 2 'odczytanie wartości z komórki pamieci eeprom
Locate 2 , 6 'o adresie 2 i wpisanie jej do zmiennej Liczba_1
Waitms 250
Lcd "*"
Waitms 250
Incr N 'zwiększenie zmiennej N o 1
If Przycisk = Liczba_1 Then 'instrukcja sprawdzajaca czy
'wciśnięty przycisk jest taki sam
'jak zapisany wczesniej w pamięci
Znacznik = 1
End If
Case 2:
Call Klawiatura
Readeeprom Liczba_2 , 3
Locate 2 , 7
Waitms 250
Lcd "*"
Waitms 250
Incr N
If Przycisk = Liczba_2 Then
Znacznik = Znacznik + 1
End If
Case 3:
Call Klawiatura
Readeeprom Liczba_3 , 4
Waitms 250
Locate 2 , 8
Waitms 250
Lcd "*"
Waitms 250
Incr N
If Przycisk = Liczba_3 Then
Znacznik = Znacznik + 1
End If
Case 4:
Call Klawiatura
Readeeprom Liczba_4 , 5
Locate 2 , 9
Waitms 250
Lcd "*"
Waitms 250
Incr N
If Przycisk = Liczba_4 Then
Znacznik = Znacznik + 1
End If
N = 0
End Select
Waitms 10
Loop Until N = 0
If Znacznik <> 4 Then
Cursor Off
Znacznik = 0
Call Zly_kod
End If
If Znacznik = 4 Then
Cursor Off
Znacznik = 0
Call Zamek
End If
End Sub
'********************************************
'5) KLAWIATURA
'********************************************
Sub Klawiatura
For T = 1 To 3
Przycisk = 0
Do
For K = 1 To 3 '<--------------------w tym miejscu mam problem
If K = 1 Then
Reset K1
Elseif K = 2 Then
Set K1
Reset K2
Elseif K = 3 Then
Set K1
Set K2
Reset K3
End If
If W1 = 0 Then
Temp1 = 1
Exit For
Elseif W2 = 0 Then
Temp1 = 4
Exit For
Elseif W3 = 0 Then
Temp1 = 7
Exit For
Elseif W4 = 0 Then
Exit For
Else
Next K
End If
For Z = 1 To 2
If Temp2 = Temp1 Then
If K = 1 Then
Przycisk = Temp1
Elseif K = 2 Then
Przycisk = Temp1 + 1
Elseif K = 3 Then
Przycisk = Temp1 + 2
End If
Else
Temp2 = Temp1
End If
Next Z
Loop Until Przycisk <> 0
Temp1 = 0
Temp2 = 0
Set K1 '
Set K2 'ustawienie poziomu wysokiego
Set K3 '
Next T
End Sub Klawiatura
'********************************************
'6) ZMIANA KODU
'********************************************
Sub Zm_kodu
N = 1
Cls
Lcd "PODAJ NOWY KOD:"
Cursor Off
Lowerline
Cursor Blink
Waitms 10
Select Case N
Do
Case 1:
Call Klawiatura
If Przycisk < 10 And Przycisk > 0 Then
Locate 2 , 1
Waitms 250
Lcd Przycisk
Waitms 250
Liczba_1 = Przycisk
Writeeeprom Liczba_1 , 2 'zapisanie w pamięci eeprom cyfry
'wciśniętej przez uzytkownika
Waitms 15
Incr N
End If
Case 2:
Call Klawiatura
If Przycisk < 10 And Przycisk > 0 Then
Locate 2 , 2
Waitms 250
Lcd Przycisk
Waitms 250
Liczba_2 = Przycisk
Writeeeprom Liczba_2 , 3
Waitms 15
Incr N
End If
Case 3:
Call Klawiatura
If Przycisk < 10 And Przycisk > 0 Then
Locate 2 , 3
Waitms 250
Lcd Przycisk
Waitms 250
Liczba_3 = Przycisk
Writeeeprom Liczba_3 , 4
Waitms 15
Incr N
End If
Case 4:
Call Klawiatura
If Przycisk < 10 And Przycisk > 0 Then
Locate 2 , 4
Waitms 250
Lcd Przycisk
Waitms 250
Liczba_4 = Przycisk
Writeeeprom Liczba_4 , 5
Waitms 15
Incr N
N = 0
End If
End Select
Loop Until N = 0
Waitms 250
Call Czas_otw
End Sub
'********************************************
'7) Zły_kod
'********************************************
Sub Zly_kod
Cls
Cursor Off
Cursor Noblink
Reset Led_r
Locate 1 , 3
Lcd "Zly kod!!!"
Wait 2
Set Led_r
Call Odczyt_kodu
End Sub
'********************************************
'8) Otwarcie zamka
'********************************************
Sub Zamek
Cls
Cursor Off
Readeeprom Czas , 6
Locate 1 , 3
Lcd "==OTWRTE=="
Reset Led_g
Set Przek
Wait Czas
Reset Przek
Cls
Set Led_g
Cursor Off
Call Odczyt_kodu
End Sub
'********************************************
'9) Zmiana czasu otwrcia zamka
'********************************************
Sub Czas_otw
Cls
Lcd "Czas otwarcia"
Cursor Off
Lowerline
Cursor Blink
Call Klawiatura
If Przycisk < 10 And Przycisk > 0 Then
Reset Led_g
Lowerline
Waitms 250
Lcd Przycisk
Cursor Noblink
Waitms 250
Czas = Przycisk
Writeeeprom Czas , 6
Set Led_g
Wait 2
Call Menu
Else
Call Czas_otw
End If
End Sub
'********************************************
'10) Sprawdzenie kodu przed zmianą
'********************************************
Sub Sprawdz_kod
Cls
Lcd ">> PODAJ STARY KOD <<"
Cursor Off
Lowerline
Cursor Blink
N = 1
Select Case N
Do
Case 1:
Call Klawiatura
Readeeprom Liczba_1 , 2 'odczytanie wartości z komórki pamieci eeprom
Locate 2 , 1 'o adresie 2 i wpisanie jej do zmiennej Liczba_1
Waitms 250
Lcd "*"
Waitms 250
Incr N 'zwiększenie zmiennej N o 1
If Przycisk = Liczba_1 Then 'instrukcja sprawdzajaca czy
'wciśnięty przycisk jest taki sam
'jak zapisany wczesniej w pamięci
Znacznik = 1
End If
Case 2:
Call Klawiatura
Readeeprom Liczba_2 , 3
Locate 2 , 2
Waitms 250
Lcd "*"
Waitms 250
Incr N
If Przycisk = Liczba_2 Then
Znacznik = Znacznik + 1
End If
Case 3:
Call Klawiatura
Readeeprom Liczba_3 , 4
Waitms 250
Locate 2 , 3
Waitms 250
Lcd "*"
Waitms 250
Incr N
If Przycisk = Liczba_3 Then
Znacznik = Znacznik + 1
End If
Case 4:
Call Klawiatura
Readeeprom Liczba_4 , 5
Locate 2 , 5
Waitms 250
Lcd "*"
Waitms 250
If Przycisk = Liczba_4 Then
Znacznik = Znacznik + 1
End If
N = 0
End Select
Loop Until N = 0
If Znacznik <> 4 Then
Cls
Znacznik = 0
Cursor Off
Cursor Noblink
Reset Led_r
Locate 1 , 3
Lcd "=ZLY KOD="
Wait 2
Set Led_r
Call Sprawdz_kod
End If
If Znacznik = 4 Then
Cursor Off
Znacznik = 0
Call Zm_kodu
End If
End SubProszę umieszczać listingi programów w znacznikach "Code". [c_p]