[BASCOM] Obsługa klawiatury 3x4 lub 4x4

Gotowe kody obsługi układów elektronicznych udostępnione przez użytkowników forum.
ODPOWIEDZ
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

[BASCOM] Obsługa klawiatury 3x4 lub 4x4

Post autor: Henryk » 01 gru 2018, 10:47

Witam ponownie po dłuższej przerwie :D
Zimno wypędziło mnie z lasu , czas na zabawę przy biurku . Potrzeba wymusiła stworzenie programiku obsługi klawiatury z zapisem wartości w zmiennej string ;) i zwrócenie tej wartości do zmiennej dword.
Jeśli można napisać prościej chętnie skorzystam z podpowiedzi :roll:
Klawisz [ * ] kod 12 ...przenosi do podprogramu Zapis , po wprowadzeniu nowej wartości zapisujemy ponownie klawiszem [ * ] .
  1. $regfile = "m8def.dat"
  2. $crystal = 8000000
  3. $hwstack = 64
  4. $swstack = 64
  5. $framesize = 128
  6. Config Lcd = 20 * 4
  7. Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
  8. Cursor Off
  9. Config Kbd = Portd       'klawiatura 3x4
  10.                       '
  11.                       '  K K K X W W W W
  12.                       '  1 2 3   1 2 3 4
  13.                       '  . . . . . . . .
  14.                       '  P P P P P P P P
  15.                       '  D D D D D D D D
  16.                       '  0 1 2 3 4 5 6 7     pin PD.3 wolny
  17.  
  18. Dim Klw As Byte , Pozycja As Byte
  19. Dim Znak As String * 1 , Wartosc As String * 10
  20. Dim Nowa_wart As Dword
  21.  
  22. Skok:
  23. Cls
  24.  
  25.  Do
  26.   Klw = Getkbd()
  27.     Locate 1 , 1 : Lcd "Dec - " ; Nowa_wart ; "  "
  28.       Waitms 200
  29.        If Klw = 12 Then : Goto Zapis : End If
  30.     If Nowa_wart > 10000 Then : Locate 1 , 1 : Lcd " MAX wart 10000" , "   " : Waitms 400 : Goto Zapis : End If
  31.  Loop
  32.  
  33.  
  34.  
  35. Zapis:
  36.  
  37.   Cls
  38.    Locate 1 , 1 : Lcd "Nowe dane "
  39.     Locate 2 , 1 : Lcd "Wpisz -"
  40.      Wartosc = Space(10)
  41.       Pozycja = 1
  42.  Do
  43.   Klw = Getkbd()
  44.      If Klw <> 16 Then : Znak = Lookupstr(klw , Dta) : Pozycja = Pozycja + 1
  45.        Insertchar Wartosc , Pozycja , Znak : Locate 2 , 8 : Lcd Wartosc ; "  " : End If
  46.          Waitms 200
  47.           If Klw = 12 Then : Nowa_wart = Val(wartosc) : : Goto Skok : End If
  48.  Loop
  49. Return
  50.  
  51.  
  52.  
  53. Dta:       '0.....1.....2.....3.....4.....5.....6.....7.....8.....9....10....11....12...13....14....15....16
  54. Data "1" , "2" , "3" , " " , "4" , "5" , "6" , "8" , "7" , "8" , "9" , " " , "*" , "0" , "# " , " " , " "
  55.         'Tablica zmodyfikowana na potrzeby mojej klawiatury 3x4 :-)
Może akurat komuś przyda się taki amatorski sposób obsługi klawiatury :D
Awatar użytkownika
niveasoft
Posty: 1239
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: [BASCOM] Obsługa klawiatury 3x4 lub 4x4

Post autor: niveasoft » 04 gru 2018, 22:06

Panie Henryku jak na to patrze to naprawdę da się to napisać lepiej i chętnie bym tu i ówdzie to poprawił gdyby Pan napisał co to czasem ma robić :D
Żeby nie być gołosłownym funkcja Getkbd() nie powinna być uruchomiona w pętli tylko co jakiś czas bo i tak zwykła odpowiedź przycisku to minimum 20ms.
Przez ten czas procesor mógłby coś innego sprawdzać lub zrobić. Dlatego doradziłbym odpalanie funkcji Getkbd() najczęściej co 10ms.

Teraz rzucę drugim "hintem".
Ciągłe wyświetlanie wyniku " Locate 1 , 1 : Lcd "Dec - " ; Nowa_wart ; " "" to nie jest dobre podejście.
To ciągle zajmuje procesor wyświetlaniem/wysyłaniem danych na LCD.
Można to napisać tak:
  1. Dim Old_nowa_wart As Whatever 'miało być śmiesznie ale tu może być Byte.. bo w sumie co może osiem bitów?
  2. If Old_nowa_wart <> Nowa_wart Then
  3.  Locate 1 , 1 : Lcd "Dec - " ; Nowa_wart ; "  "
  4.  Old_nowa_wart = Nowa_wart 'zapamiętaj i nie baw się w wyświetlanie więcej bo raz wystarczy
  5.                                               'wyrównaj i to się więcej nie zdarzy dopóki coś się nie zmieni
  6. End If
Awatar użytkownika
Henryk
Posty: 348
Rejestracja: 22 sty 2018, 17:20

Re: [BASCOM] Obsługa klawiatury 3x4 lub 4x4

Post autor: Henryk » 05 gru 2018, 8:39

Witam Panie Bartku .
Elektronika jest dla mnie formą spędzania wolnego czasu w okresie jesień / zima , by nie zwariować ;)
Przeglądałem Twój projekt generatora na stronie domowej w zakładce Kody różne , próbując wyssać samą esencję obsługi klawiatury .....hmmm..... zapętliłem się i zgubiłem :D
Obsługa klawiatury zostanie wszczepiona do programu generatora który ostatnio budowałem , znudziło mnie klikanie i podciąganie częstotliwości , z klawiatury jest szybciej .
Prototyp z moim kawałkiem kodu działa bez zarzutów .
Wyświetlanie " DEC " pozostało po testach ;) musiałem się jakoś upewnić czy wprowadzone zmiany w zmiennej są takie jakich oczekuję .
Dziękuje za wszelkie podpowiedzi i przykłady , wszystkie chętnie przygarnę :D
ODPOWIEDZ