mikrocontroller.net

Forum: Projekte & Code Matrix_Tastatur


Autor: Parwes Khesrawi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Parwes Khesrawi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Parwes Khesrawi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab das programm geänert funktioniert jetzt,
trotzdem danke dir
Parwes

Autor: Carkit (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.