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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.