Forum: Projekte & Code Matrix_Tastatur


von Parwes Khesrawi (Gast)


Angehängte Dateien:

Lesenswert?

hi!
ich habe ein Problem mit dem einlesen eine Matrix-Tastatur.
ich benutzt ein pic16f877- Controller und möchte die Tastatur einlesen 
und die Tastendrucke an einem LCD ausgeben. jetzt weiß ich allerdings 
nicht ob das Programm ein fehler enthält.
ich würde mich freuen wenn mir jemand hilfen könnte.

das C-Programm ist als anhang dabei.
danke im voraus
parwes

von Steffen (Gast)


Lesenswert?

Deine Leseroutine gibt nur 1 in HZeile zurück, wenn rd6=0 ist so 
funktioniert das nicht.

Bist Du sicher, das beim Rotieren eine 0 in rd reingeschoben wird?

MfG
Steffen

von Parwes Khesrawi (Gast)


Lesenswert?

hi steffen!
ja, was die 0 in RD betriff,da bin ich mir sicher
PORTD=PORTD << 1 aus dem speicher wird eine 0 nachgezogen. ich bekomme 
aber überhaupt nichts zurück noch nicht mal eine eins.ich muss noch dazu 
sagen,dass ich ein anfänger bin was C-programmieren an geht.
könntest du mir ein tipp geben wie ich es schreiben könnte.
danke dir
parwes

von Steffen (Gast)


Lesenswert?

Mit den verschachtelten If {} else {} Strukturen wird das nichts.
Wenn ich dein Programm richtig verstehe soll die Routine den Code der 
gedrückten Taste zurückgeben. Wenn in der Schleife nun bei PD0..3 =0111 
an PD4..7 ein Wert <> 1111 anliegt (zB. 1101) ist eine Taste gedrückt 
und Du gibst dann in Taste einfach den Wert 01111101 (aktueller Wert von 
PortD) zurück.
Über eine Tabelle kannst du dann diesem Wert einer bestimmten Taste 
zuordnen.

Etwas schwieriger wird es, wenn mehrere Tasten gleichzeitig gedrückt 
werden (können) müssen.

Noch mal zu PORTD=PORTD<<1 entweder wird immer nur eine 0 nachgeschoben 
oder PORTD wird komplett rotiert ich kenn mich nicht so 100%-ig in C 
aus, da ich in Assembler programmiere.
Wenn generell eine 0 nachgeschoben wird, dann funktioniert das nicht, da 
ja immer nur eine Zeile 0 sein soll. So wird aus Bit0..3 1110, 1100, 
1000, 0000.
MfG
Steffe

von Parwes Khesrawi (Gast)


Lesenswert?

hab das programm geänert funktioniert jetzt,
trotzdem danke dir
Parwes

von Carkit (Gast)


Lesenswert?

Hallo Herr Parwes Khesrawi,

hast Du eine Ahnung wie man die ausgelesene Tastaturzifferfolge z.B. 234 
in einen integer umwandelt.
Sowas kann man z.B. dafür gebrauchen um einem laufenden Prozess ein Wert 
zu zuordnen.

Wenn Du Da schon was gemacht hast wäre ich dir sehr Dankbar wenn Du mir 
die Info mitteilen könntest.

MfG


Hayrullah

von Steffen (Gast)


Lesenswert?

B in zwar nicht Parwes Kesravi aber die Antwort ist doch eigentlich ganz 
einfach Bei dem Beispiel ist das Ergebnis 2*100+3*10+4=234. Sollte in C 
kein Problem sein. In Assembler muss ich dann eben rechnen 
(100+100)+(10+10+10)+4=234.
MfG

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
Noch kein Account? Hier anmelden.