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
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
zugegeben das ist nicht ganz einfach, aber wenn man den code verstanden hat, kann man beliebig große Matrizen basteln (zumindest software technisch)
Ach ja noch was dazu:
Eine mögliche Lösung ist wohl, einfach zweimal 4x4 Tastaturmatrizen an zwei verschiedenen Analogeingängen zu nutzen
matrizen werden an digitalports angeschlossen, nicht an analog ports.
Gruß
Jörn
Lesezeichen