Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Klawiatura matrycowa 4x4 2xPCF8574AP atmega8 bascom

Paweł1791 16 Kwi 2012 23:42 1134 0
  • #1
    Paweł1791
    Poziom 9  
    Witam wszystkich

    Mam mały problem z obsługą klawiatury 4x4(jest to kit avt2503/2). Problem polega na tym, że napisałem program, który wyświetla mi jaki klawisz został wciśnięty(0-9, A-F), ale chciałbym wprowadzać konkretne liczby np.1234 oraz zapisanie tej liczby do jakiejś zmiennej i zupełnie nie wiem jak to "ugryźć" czytałem wiele na forach i tutaj, ale nie znalazłem konkretnej odpowiedzi na mój problem. Oto mój kod:

    Code:

    $regfile = "m8def.dat"
    $crystal = 16000000


    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0

    Cls
    Config Scl = Portb.0
    Config Sda = Portb.1
    Cursor Off
    Dim Value As Byte                                           'wartosc odczytana z klawiatury
    Dim X As Byte
    Dim Valuehex As String * 2                                  'wartosc odczytana w hex
    Dim Y As Byte
    Declare Sub Sekcja1
    Declare Sub Sekcja2
    Declare Sub Czysc
    Declare Sub Odczyt
    Declare Sub Glowny
    Declare Sub Czekanie
    Config Pind.3 = Input
    Config Pind.4 = Input                                       'odczyt
    Config Portb.2 = Output                                     'dioda
    Config Portb.3 = Output                                     'sygnalizacja zapisu do pamieci
    Const Addressw = 160                                        'adres zapisu do pamieci
    Const Addressr = 161                                        'adres odczytu z pamieci

    Enable Int0
    On Int0 Glowny
    Config Int0 = Low Level


    Enable Interrupts




    Sub Czekanie:
       Enable Interrupts
       Lcd "oczekiwanie..."
    End Sub



    Sub Glowny:
       Disable Interrupts
       Cls
       I2csend 112 , 255
       I2csend 114 , 255
       I2creceive 112 , Value
       If Value <> 255 Then
          Call Sekcja1
          Valuehex = Hex(value)
          Locate 1 , 1
          Lcd Value
          Wait 5
          Cls
          If X = 191 Then
             Call Czysc
             Return
          End If
       End If

       I2creceive 114 , Value
       If Value <> 255 Then
          Call Sekcja2
          Valuehex = Hex(value)
          Locate 1 , 1
          Lcd Value
          Wait 5
          Cls
          If X = 191 Then
             Call Czysc
             Return
          End If
       End If

    End Sub


    Sub Sekcja1:

       Disable Interrupts
       Select Case Value
          Case 254:
          Value = 12

          Case 253:
          Value = 13

          Case 251:
          Value = 3

          Case 247:
          Value = 2

          Case 239:
          Value = 14

          Case 223:
          Value = 6

          Case 191:
          Value = 5

          Case 127:
          Value = 15

       X = Value
       End Select
    End Sub

    Sub Sekcja2:

       Disable Interrupts
       Select Case Value
          Case 254:
          value = 9

          Case 253:
          Value = 8

          Case 251:
          Value = 7

          Case 247:
          Value = 0

          Case 239:
          Value = 4

          Case 223:
          Value = 11

          Case 191:
          Value = 10

          Case 127:
          Value = 1
       X = Value
       End Select

    End Sub

    Sub Czysc:
    Cls
    Call Czekanie
    End Sub