SEJF 4x4 problem z otwieraniem pomocy

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Domin
Posty: 9
Rejestracja: 02 lut 2021, 14:05

SEJF 4x4 problem z otwieraniem pomocy

Post autor: Domin » 04 lut 2021, 20:06

Witam, mam problem ze swoim programem- po wpisaniu kodu nie przeskakuje na otwarte tylko na zamknięte. Gdzie popełniłem błąd w pisaniu kodu? Proszę o pomoc

Zamek szyfrowy z klawiaturą 4x4 dołączoną do portu A.
Kod czterocyfrowy z możliwością zwiększenie liczby znaków do ośmiu.
Możliwość pojedynczego kasowania błędnie wprowadzonych znaków.

Wyświetlacz LCD 16x2- wyrównanie lewostronne- "Podaj kod:"
wprowadzenie kodu np 1234 ( kazde nacisniecie klawisza- wyswietla na LCD-, po wprowadzeniu kodu na LCD-,, ***** " ) potwiera zamek na 3 sekundy. Wyświetlacz LCD- (środkowany tekst),, otwarte ",
włączona dioda LED dołączona do PORTC.0 Następie zamek zaminięty ( dioda LED wyłączona) napis
na LCD( środkowy tekst wyświetlany na 3 sekundy ) " zamknięte" i powrót do początku programu (możliwość ponownenego wprowadzenia kodu)

dodatkowo możliwość zmiany kodu na inny
  1.  
  2. $regfile = "m32def.dat"
  3. $Crystal=16000000
  4. $hwstack=40
  5. $swstack=16
  6. $framesize=32
  7.  
  8. Dim Klawiatura As Byte
  9. Dim Dlugosc As Byte
  10. Dim Wynik As Byte
  11. Dim Blokada As Byte
  12.  
  13. Dim Kod As String * 4
  14. Dim Znak As String * 1
  15. Dim Znaki As String * 5
  16.  
  17. Kod = "1234"
  18. Config Lcd = 16 * 2
  19. Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3
  20.  
  21. Config Portc = Output
  22. PORTC = 0
  23. Config PortA = Input
  24. Porta = 255
  25.  
  26. Config Kbd = Porta , Debounce = 50 , Delay = 125
  27.  
  28. Cursor Off
  29. Cursor Blink
  30.  
  31. Gosub Wys
  32.  
  33. Do
  34.    Klawiatura = Getkbd()
  35.    If Klawiatura <> 16 Then Gosub Przyciski
  36. Loop
  37. End
  38.  
  39.  
  40. Przyciski:
  41. Cursor Noblink
  42.    If Klawiatura = 0 Then Znak = "1"
  43.    If Klawiatura = 1 Then Znak = "2"
  44.    If Klawiatura = 2 Then Znak = "3"
  45.    If Klawiatura = 4 Then Znak = "4"
  46.    If Klawiatura = 5 Then Znak = "5"
  47.    If Klawiatura = 6 Then Znak = "6"
  48.    If Klawiatura = 8 Then Znak = "7"
  49.    If Klawiatura = 9 Then Znak = "8"
  50.    If Klawiatura = 10 Then Znak = "9"
  51.    If Klawiatura = 11 Then Znak = "C"
  52.    If Klawiatura = 12 Then Znak = "."
  53.    If Klawiatura = 13 Then Znak = "0"
  54.    If Klawiatura = 14 Then Znak = "#"
  55.  
  56.  
  57.    'Kasowanie przez przycisk "C"
  58.    If Klawiatura = 11 Then
  59.       Dlugosc = Len(Znaki)
  60.       Dlugosc = Dlugosc - 1
  61.       Znaki = Left(Znaki , Dlugosc)
  62.       If Dlugosc = 0 Then Znaki = ""
  63.    End If
  64.  
  65.    'Zatwierdzenie przez przycisk "#"
  66.    If Klawiatura = 14 Then
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.       Gosub Wys
  76.       Wait 2
  77.       Znaki = ""
  78.       Cursor Blink
  79.    Elseif Klawiatura <> 11 And Klawiatura <> 14 Then
  80.        Znaki = Znaki + Znak
  81.    End If
  82.  
  83.    Gosub Wys
  84. Return
  85.  
  86.  
  87. 'Wyswietlacz'
  88. Wys:
  89. Cls
  90. Lcd "Podaj kod: " ; Znaki
  91.  
  92.  
  93. Locate 2 , 7
  94. If Dlugosc = 0 Then Lcd "*"
  95. If Dlugosc = 1 Then Lcd "**"
  96. If Dlugosc = 2 Then Lcd "***"
  97. If Dlugosc = 3 Then Lcd "****"
  98.  
  99. If Dlugosc = 4 Then
  100.    Dlugosc = 1
  101.    Else
  102.    Incr Dlugosc
  103. End If
  104.  
  105.         If Dlugosc = 4 Then
  106.            Waitms 250
  107.            If Kod = Znaki Then
  108.                Cls
  109.                Lcd  "Otwarte"
  110.                Portc.0 = 1
  111.                Wait 3
  112.                Portc.0 = 0
  113.  
  114.                Cls
  115.                Lcd " Zamkniete"
  116.                Wait 1
  117.  
  118.                Cls
  119.                Lcd "Podaj kod:"
  120.                Znaki = ""
  121.  
  122.         End If
  123.  
  124.    ' Blokada zamka '
  125.  
  126.  
  127. If Blokada = 3 Then
  128. Cls
  129. Lcd " Zamek zamkniety na 1h"
  130. Wait 1
  131. Blokada = 0
  132. End if
  133.  
  134. Cls
  135. Lcd " Zamkniete"
  136. Wait 1
  137. Incr Blokada                                      '+1'
  138.  
  139. Cls
  140. Lcd "Podaj kod:"
  141. Znaki = ""
  142. End If
  143.  
  144. Do
  145. Loop Until Pina.0 = 1 And Pina.1 = 1 And Pina.2 = 1 And Pina.3 = 1
  146. Return
Awatar użytkownika
niveasoft
Posty: 1216
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: SEJF 4x4 problem z otwieraniem pomocy

Post autor: niveasoft » 04 lut 2021, 20:47

Jak to testujesz w symulatorze to Bascom specjalnie pomija instrukcje Wait i nie zobaczysz tych trzech sekund.
Żeby ten kod sprawdzić musisz sobie wpisać małą pułapkę programową w postaci Do:Loop.
Jak kod się będzie zgadzał to program tam utknie.
  1. If Kod = Znaki Then
  2.          Cls
  3.          Lcd  "Otwarte"
  4.          Portc.0 = 1
  5.          Wait 100
  6.          Portc.0 = 0
  7.  
  8.          Do : Loop                                          'pułapka
  9.  
  10.          Cls
  11.          Lcd " Zamkniete"
  12.          Wait 1
  13.  
  14.          Cls
  15.          Lcd "Podaj kod:"
  16.          Znaki = ""
  17.  
  18.       End If

W sumie to można tam też postawić Breakpointa bo tylko wtedy kiedy Znaki = Kod to program tam dotrze i stanie.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ