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 !!!
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...........
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
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 } }
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.