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 matrycowa 4x4 2xPCF8574AP atmega8 bascom

Paweł1791 16 Kwi 2012 23:42 1332 0
REKLAMA
  • #1 10802788
    Paweł1791
    Poziom 10  
    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:

    
    $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
    
  • REKLAMA
REKLAMA