Tastenmatrix

Gast #448016
Lesenswert?

Hallo, ich habe mir eine Tastenmatrix mit 3*4 Tasten aufgebaut. Wie 
frage ich die Tasten am besten mit Bascom ab ? Ich wollte es 
folgendermaßen machen:
Port D0-D2 --> Martix
Port D3-D6 --> Matrix

Zwei schleifen ineinander laufen lassen, eine bis 3 und die innere bis 
4.
Nacheinander D0-D2 auf Low schalten und D3-D6 abfragen. Ist das so 
möglich ?

Danke !!!
Gast #448085
Lesenswert?

Hmmmm, ich habe mal ein kleines Programm angehangen. Normalerweise müßte 
doch die Taste unten/links abgefragt werden. Der angezeigte wert 
wechselt aber immer zwischen 0 und 1. Bei gedrückter Taste bleibt er auf 
0, bei nichtgedrückter wechselt er immer...........
Angehängte Dateien:
Gast #448111
Lesenswert?

Hi, habe hier eine 4x4-Matrix in C abgefragt. Vielleicht kannst du's ja 
umsetzen.


if (PINA != 15)                // nur bei gedrückter Taste abfragen
  {
    PORTA = 0b00001111;            // Spalten abfragen
    _delay_us(1);
    Ergebnis = PINA;

    DDRA = 0b00001111;
    PORTA = 0b11110000;

    PORTA = 0b11110000;            // Zeilen abfragen
    _delay_us(1);
    Ergebnis += PINA;            // Zeilen und Spalten verknüpfen

    DDRA = 0b11110000;
    PORTA = 0b00001111;            // Port-Ausgangszustand 
wiederherstellen

    switch (Ergebnis)
      {
      case 119: T_Byte = '0'; break;    // Bitmuster auswerten und Byte 
zuweisen
      case 123: T_Byte = '.'; break;
      case 125: T_Byte = '-'; break;
      case 126: T_Byte = 'E'; break;
      case 183: T_Byte = '1'; break;
      case 187: T_Byte = '2'; break;
      case 189: T_Byte = '3'; break;
      case 190: T_Byte = 'C'; break;
      case 215: T_Byte = '4'; break;
      case 219: T_Byte = '5'; break;
      case 221: T_Byte = '6'; break;
      case 222: T_Byte = 'D'; break;
      case 231: T_Byte = '7'; break;
      case 235: T_Byte = '8'; break;
      case 237: T_Byte = '9'; break;
      case 238: T_Byte = 'F'; break;
      default : T_Byte = ' '; break;
      }

    for(unsigned char i=0;i<15;i++)                // Pause 15 x 10ms = 
150ms (entprellung)
      {
        _delay_ms(160);                    // 255ms/16MHz=16ms
      }
  }
Gast #448121
Lesenswert?

Nö, ich hatte halt nur eine 4x4. Ich wollte vorschlagen, einen Port (8 
bit) zu benutzen. 4 bit für die Spalten, 4 bit für die Zeilen. 
Abwechselnd die Zeilen auf Ausgang '0' und die Spalten mit Pullup 
abfragen. Dann das Ganze umdrehen, die Spalten auf Ausgang '0' und die 
Zeilen mit Pullup abfragen. Diese Ergebnisse addiert ergibt den Code für 
die gedrückte(n) Taste(n). Wieviel Zeilen oder Spalten deine Tastatur 
ist unerheblich, muss halt beim Programmieren maskiert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren