Zamek sejfu z enkoderem
: 14 sty 2022, 9:58
Witam, Znalazłem sobie takie zadanie, z którym się męcze. Kod znajduje się poniżej, który ja napisałem, ale coś jest nie tak. Proszę o pomoc
ZADANIE
Zamek sejfu z enkoderem umożliwiającym ustawianie cyfr 0-9 z zatwierdzaniem każdej cyfry przy pomocy przełącznika w osi enkodera .
Wyświetlacz LCD (16x2) – „Podaj kod:” .
Wprowadzenie kodu np. 1111 wyświetla na LCD – (środkowany tekst) „Otwarte”, włączona dioda LED dołączona do PORTC.0 Następnie zamek jest zamykany (dioda LED wyłączona) i napis na LCD (środkowany tekst wyświetlany przez 3 sekundy) „Zamknięte” (ę!). Powrót do początku programu (możliwość ponownego wprowadzenia kodu).
Możliwość zmiany kodu (proszę wymyślić sposób wejścia do trybu zmiany kodu).
Jak wyżej, dodatkowo zapisanie i odczytanie kodu w pamięci EEPROM mikrokontrolera.
KOD :
ZADANIE
Zamek sejfu z enkoderem umożliwiającym ustawianie cyfr 0-9 z zatwierdzaniem każdej cyfry przy pomocy przełącznika w osi enkodera .
Wyświetlacz LCD (16x2) – „Podaj kod:” .
Wprowadzenie kodu np. 1111 wyświetla na LCD – (środkowany tekst) „Otwarte”, włączona dioda LED dołączona do PORTC.0 Następnie zamek jest zamykany (dioda LED wyłączona) i napis na LCD (środkowany tekst wyświetlany przez 3 sekundy) „Zamknięte” (ę!). Powrót do początku programu (możliwość ponownego wprowadzenia kodu).
Możliwość zmiany kodu (proszę wymyślić sposób wejścia do trybu zmiany kodu).
Jak wyżej, dodatkowo zapisanie i odczytanie kodu w pamięci EEPROM mikrokontrolera.
KOD :
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m32def.dat"
- $Crystal=16000000
- $hwstack=40
- $swstack=16
- $framesize=32
- Dim Klawiatura As Byte
- Dim Dlugosc As Byte
- Dim Wynik As Byte
- Dim Blokada As Byte
- Dim Alarm As Byte
- Dim Gwiazdy As String * 4
- Dim Kod As String * 4
- Dim Znak As String * 1
- Dim Znaki As String * 4
- Kod = "1234"
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3
- Config PortC = Output
- PORTC = 0
- Config PortA = Input
- Porta = 255
- Config Kbd = Porta , Debounce = 50 , Delay = 125
- Cursor Off
- Cursor Blink
- Gosub Wys
- 'podprogram'
- Do
- Klawiatura = Getkbd()
- If Klawiatura <> 16 Then Gosub Przyciski
- Loop
- End
- 'usuwanie znakow'
- Przyciski:
- Cursor Noblink
- If Klawiatura = 0 Then Znak = "1"
- If Klawiatura = 1 Then Znak = "2"
- If Klawiatura = 2 Then Znak = "3"
- If Klawiatura = 4 Then Znak = "4"
- If Klawiatura = 5 Then Znak = "5"
- If Klawiatura = 6 Then Znak = "6"
- If Klawiatura = 8 Then Znak = "7"
- If Klawiatura = 9 Then Znak = "8"
- If Klawiatura = 10 Then Znak = "9"
- If Klawiatura = 12 Then Znak = "."
- If Klawiatura = 13 Then Znak = "0"
- 'If Klawiatura = 14 Then Znak = "#" '
- 'If Klawiatura = 11 Then Znak = "C"'
- '
- 'C kasowanie'
- If Klawiatura = 11 Then
- Dlugosc = Len(znaki)
- Dlugosc = Dlugosc - 1
- Znaki = Left(znaki , Dlugosc)
- If Dlugosc = 0 Then Znaki = ""
- End If
- '# zatwerdzenie'
- If Klawiatura = 14 Then '
- Gosub Wys
- Wait 2
- Znaki = ""
- Cursor Blink
- Elseif Klawiatura <> 11 And Klawiatura <> 14 Then
- Znaki = Znaki + Znak
- End If
- Gosub Wys
- Return
- 'Wyswietlacz'
- Wys:
- Cls
- Lcd "Podaj kod:" ; Znaki
- Dlugosc = Len(znaki)
- Locate 2 , 7
- If Dlugosc = 1 Then Gwiazdy = "*"
- If Dlugosc = 2 Then Gwiazdy = "**"
- If Dlugosc = 3 Then Gwiazdy = "***"
- If Dlugosc = 4 Then Gwiazdy = "****"
- If Dlugosc = 4 Then
- Dlugosc = 1
- Else
- Incr Dlugosc
- Lcd Gwiazdy
- End If
- If Dlugosc = 4 Then
- Waitms 500
- If Kod = Znaki Then
- Cls
- Lcd " Otwarte"
- config Portc = 1
- Wait 3
- 'miejsce na wpisanie zmiany kodu
- config PORTC = 0
- Do : Loop
- Cls
- Lcd " Zamkniete"
- Wait 1
- Cls
- Lcd "Podaj kod:"
- Znaki = ""
- Alarm = 0
- Dlugosc = 0
- Else
- Cls
- Lcd "Alarm"
- Wait 1
- Alarm = Alarm + 1
- if Alarm = 3 Then
- Cls
- Lcd "Blokada"
- Wait 3
- Alarm = 0
- Znaki = ""
- Dlugosc = 0
- End if
- End if
- End if
- Return