logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Klawiatura AT [bascom]. Odczytanie numerów klawiszy.

culkq 29 Gru 2010 18:20 3056 14
REKLAMA
  • #1 8930282
    culkq
    Poziom 11  
    Witam!

    Mam problem w odczytywaniu numerów klawiszy z klawiatury AT. Otóż w pewnej książce jest wytłumaczone działanie tej klawiatury, lecz gdy autor podał w programie :

    If Kod_kl = 44 then 'Jeśli Kod_kl = 44 to czyszczenie LCD (klawisz del)
    Cls
    end if

    Ja natomiast sprawdzam numer 44 w tablicy kodów ASCII, która jest podana na końcu książki i piszę że pod numer 44 jest przypisany : ,

    Autor zapewne dobrze to podał tylko ja nie mogę zrozumieć jak to się odczytuje, ponieważ według tablicy kodów ASCII numer 127 odpowiada klawiszowi del.

    Z góry dziękuję i pozdrawiam,
    Culkq :D.
  • REKLAMA
  • REKLAMA
  • #3 8931134
    culkq
    Poziom 11  
    Hmm to skąd mam brać te kody klawiatury ?
  • REKLAMA
  • #4 8931202
    piotrva
    VIP Zasłużony dla elektroda
    
    $regfile = "2313DEF.DAT"
    Config Keyboard = Pinb.0 , Data = Pinb.1 , Keydata = Keydata
    Dim B As Byte
    Cls
    Do
    B = Getatkbd()
       If B > 0 Then
       If B = 13 Then Lowerline Else Lcd Chr(b)
       End If
    Loop
    
    
    End                                                         'end program
    Keydata:
    'klawisze normalnie – małe litery
    Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
    Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
    Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
    Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
    Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
    Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
    Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
    'klawisze z Shift – wielkie litery
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
    Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
    Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
    Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
    Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
    Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
    

    w tablicy na dole masz zapisane kody ascii niektórych znaków. np. enter powoduje przejście do nowej linii.
    Aby wiedzieć gdzie umieścić kod klawisza del poczytaj sobie http://www.edw.com.pl/ea//arch/bascavr.zip sekcję o instrukcji getatkbd i o klawiaturze at
  • #5 8931228
    Ture11
    Poziom 39  
    Mam tu w książce, że numer 44 to literka O, jakk znajdę skaner :-) to zeskanuje :-)
  • #6 8931290
    culkq
    Poziom 11  
    Poczytałem i znalazłem w tej tabeli "AT KEYBOARD SCANCODES" jakieś liczby odpowiadające klawiszowi enter :
    ENTER 5A F0,5A

    Dodano po 56 [sekundy]:

    Ja tak samo mam i właśnie szukam pomocy czy to ja się mylę czy w książce jest coś nie tak.
  • #7 8931423
    Ture11
    Poziom 39  
    Dodatek E. Tablica kodów klawiatury AT:
    Klawisz Enter: 5A
    Klawisz Enter na numerycznej: E05A

    Ten enter F0,5A to chyba powinno być E05A, w każdym razie to nie jest ASCII
  • #8 8931504
    piotrva
    VIP Zasłużony dla elektroda
    to jest scan code w hex, więc przeliczasz na dec, czyli 5a(hex) = 90(dec), zgodnie z dokumentacją bascoma dodajemy do tej wartości 1, czyli na 91 pozycji w tabeli data znajduje się kod klawisza enter, u mnie 13, możesz sobie to policzyć.
    co do klawisza del to 71(hex) = 113(dec), czyli kod klawisza wpisujesz na 114 pozycji w tablicy, czyli ostatnia linijka, 2 dana. A raczej nie musisz wpisywać, bo masz tam już wpisane 44, gdyż jest to sprzężone z klawiszem kropki na klawiaturze numerycznej
  • #9 8931563
    culkq
    Poziom 11  
    Tabela data to keydata tak?
  • #10 9814292
    petrow17
    Poziom 11  
    chyba tego nie rozumiem... jak obsluzyc np klawisze strzalek skoro w MAKE sa wszystkie jako E0 ?
  • REKLAMA
  • #11 9814480
    piotrva
    VIP Zasłużony dla elektroda
    Nie wszystkie tak mają, bez żadnych kombinacji da się obsłużyć podstawową klawiaturę (numery/litery z rozróżnieniem wielkości). Kod E0 to z tego co wiem kod wciśnięcia jakiegokolwiek klawisza, w takim przypadku należy wziąć pod uwagę kolejny kod MAKE z listy...
  • #12 9814565
    petrow17
    Poziom 11  
    nastepny z listy, czyli po "," czy nizej

    MAKE BREAKE
    U ARROW E0,75 E0,F0,75
    L ARROW E0,6B E0,F0,6B
    D ARROW E0,72 E0,F0,72
    R ARROW E0,74 E0,F0,74
  • #13 9814769
    piotrva
    VIP Zasłużony dla elektroda
    No po przecinku...
    E0 to kod oznaczający grupę przycisków lub jakąś funkcję (w tej chwili nie mam czasu sprawdzić), czyli Ciebie interesuje kolejna wartość po przecinku.
  • #14 9815055
    petrow17
    Poziom 11  
    w bascomie na 76 miejscu tabelu keydata jest wartosc wieksza od 0 i interpretowana jako litera... a jak wciskam klawisze strzalek to wyswietla odpowiednie cyfry z numerycznej..

    mysle nad prostym algorytmem -> jezeli wcisnieto strzalke do gory zrob to jezeli wcisnieto 8 zrob co innego.. wg helpa z bascoma litera 'd' w kolumnie make ma 23 czyli mowinno byc na 24 miejscu w tabeli keydata a w przykladowym programie jest dopiero na 63
  • #15 9815217
    piotrva
    VIP Zasłużony dla elektroda
    Bo niektóre z tych kodów to kody funkcji lub "regionów" klawiatury. Algorytm powinien być taki. Pod 0xE0 umieszczasz jakąś wartość, np. 200 i teraz jeśli otrzymasz wartość 200 i w krótkim czasie po niej wartość z pozycji oznaczonej przez np. 0x75 (czyli strzałka w górę) to znaczy że to jest strzałka w górę, w przeciwnym wypadku jest to cyfra z klawiatury. Pewnie tym samym jest spowodowane takie a nie inne umieszczenie w keydata litery d i innych znaków. Ogólnie z tym odczytem trochę zabawy w bascomie jest, jeśli wychodzimy poza klawiaturę znaków ;-)
REKLAMA