Hallo
vielleicht kann ich dir bei den Matrixkeys helfen.
wenn du 5x5 Tasten hast, brauchst du 10 ports (es sei denn man verwendet einen Treiber dazwischen, so mache ich es)
Du steuerst jede Spalte nach einander an, und liest dann die Reihen.
Also erste Spalte ansteuern (auf Masse ziehn) dann Reihe lesen.
Wenn in der Reihe alle Werte log. 1 sind, ist in der 1. Spalte keine Taste gedrückt. Ist einer der Werte log. 0, dann wurde eine Taste gedrückt, welche erkennst du, welcher port auf log. 0 liegt
Wenn keine taste gedrückt wurde (alle Werte log. 1) dann steuerst du die nächste Reihe an (ziehst die 2. Spalte auf log. 0, lässt die 1. Spalte wieder auf log. 1 zurück kommen) und so fähst du mit allen Spalten fort.
Schau dir mal das Beispiel an
zugegeben das ist nicht ganz einfach, aber wenn man den code verstanden hat, kann man beliebig große Matrizen basteln (zumindest software technisch)Code:'------------------------------------------------- '--------------- DECODE COL ---------------------- '------------------------------------------------- FUNCTION DEC(VALUE as byte) define KEY as byte define OFFSET as byte KEY=255 if (VALUE and F0h) = 11100000b then OFFSET=0 VALUE=VALUE and 0Fh if VALUE=00001110b then KEY=1+OFFSET if VALUE=00001101b then KEY=5+OFFSET if VALUE=00001011b then KEY=9+OFFSET if VALUE=00000111b then KEY=13+OFFSET IF KEY=10 THEN KEY=0 OFFSET=OFFSET+1 RETURN KEY END FUNCTION '------------------------------------------------ '--- TASTATURDECODER PCF8574 - 4x4 MATRIX -- '------------------------------------------------- FUNCTION GET_MATRIX_KEY() define EXTPORT byteport[10] define KEY as byte '--------- DECODE COLUMN 1 1-5-9-C -- diese "wandernde" 0 wählt die Spalten aus EXTPORT=11101111b KEY=DEC(EXTPORT) if KEY<>255 then goto EXIT '--------- DECODE COLUMN 2 2-6-0-D -- EXTPORT=11011111b KEY=DEC(EXTPORT) if KEY<>255 then goto EXIT '--------- DECODE COLUMN 3 3-7-A-E -- EXTPORT=10111111b KEY=DEC(EXTPORT) if KEY<>255 then goto EXIT '--------- DECODE COLUMN 2 4-8-B-F -- EXTPORT=01111111b KEY=DEC(EXTPORT) #EXIT RETURN KEY END FUNCTION
Ach ja noch was dazu:
matrizen werden an digitalports angeschlossen, nicht an analog ports.Eine mögliche Lösung ist wohl, einfach zweimal 4x4 Tastaturmatrizen an zwei verschiedenen Analogeingängen zu nutzen
Gruß
Jörn







Zitieren

Lesezeichen