mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tastenmatrix


Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !!!

Autor: Stefan Gemmel (steg13)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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...........

Autor: jojansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Config KBD, Getkbd().
Habe ich die Tage ausprobiert und funktionert.
Wurde hier schon öfters erwähnt: RTFM = lies die Hilfe (nicht nur 
flüchtig)
:-) Johannes

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
      }
  }

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe aber eine 3*4 Matrix. Setzt Bascom eine 4*4 voraus ?

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mr-400-Volt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab es so gelöst....................

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktitoniert. Aber warum bit für bit? Geht doch auch parallel (2 
Abfragen), siehe meinen Quelltext oben. Must nur die unbenutzten bits 
per UND-Verknüpfung 'rausmaskieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.