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