Hallo, bin froh dass ich so ein Forum gefunden habe! Ich möchte an meinem mikrocontroller eine Tastatur einlesen lassen (3x4 Matrix), dies klappt auch soweit ganz gut. Ich habe nur ein einziges Problem: ich rufe meine Methode "getkey" auf und es wird ausgeführt, aber leider mehrmals :D Wie kann ich es schaffen damit sie 1x aufgerufen wird und nur eine Taste abgefragt wird? Meine Überlegung: Register einbauen, dass sobald eine Zahl eingegeben wurde das vorhandene Register zB (R5) inkrementiert und in der Abfrage wo ich dann meine Zahl haben will steht, dass es nur in "getkey" reinspringen darf wenn R5 < 2? Jedes mal nachdem erfolgreich abgefragt wurde setzt es R5 wieder auf 0. Greets
Sebastian Hauser schrieb: > Wie kann ich es schaffen damit sie 1x aufgerufen wird und nur eine Taste > abgefragt wird? Zeile 42 löschen.
Sebastian Hauser schrieb: > ich rufe meine Methode "getkey" auf und es wird ausgeführt, aber leider > mehrmals :D Wenn das so ist, wird es daran liegen, dass sie mehrmals aufgerufen wird. > Wie kann ich es schaffen damit sie 1x aufgerufen wird und nur eine Taste > abgefragt wird? Kannst du den Satz noch mal auf deutsch formulieren, so mit Satzzeichen und so? Und was ist dein "getkey" für eine Methode? Vielleicht macht sie etwas anderes, als du möchtest.
Sebastian Hauser schrieb: >... - wichtige Fragen Das dürfe aus Sicht der TOs auf 90% der hier im Forum gestellten Fragen zutreffen und stellt hier kein Alleinstellungsmerkmal dar. Das blöde an Computer ist, dass sie machen, was man ihnen sagt - und das ist oft nicht das, was man von ihnen will. > Greets 再见
Wolfgang schrieb: > Das blöde an Computer ist, dass sie machen, was man ihnen sagt - und das > ist oft nicht das, was man von ihnen will. Darf ich diesen Satz, ohne Hinweis auf Copyright Verletzung und ohne Angabe des Authors, ungestraft woanders verwenden?
Meine Methode "getkey" setzt jede Spalte nacheinander auf low, (alle anderen sind high), in dieser Spalte werden dann die Reihen durchgeprüft, es wird jeder Port gesetzt und sobald einer low geht (JNB), wird die jeweilige Taste in den Akku gespeichert. Ist dies geschehen wird die Methode getkey durch "ret" wieder verlassen und im anderen Label von Zeile zu Zeile weiterabgearbeitet.
Peter.N schrieb: > Darf ich diesen Satz, ohne Hinweis auf Copyright Verletzung und ohne > Angabe des Authors, ungestraft woanders verwenden? Keine Ahnung, von wem der Satz stammt. Von mir aus darfst du ihn gerne weiter verbreiten. Er beschreibt doch nur einen oft zu beobachten Sachverhalt ;-)
Martin Wende schrieb: > Nimm das hier: > http://www.fritzler-avr.de/HP/Librarys/tastenplex_his.php Vergessen zu sagen: Ich programmiere (leider) in assembler
Wolfgang schrieb: > Keine Ahnung, von wem der Satz stammt. Von mir aus darfst du ihn gerne > weiter verbreiten. Er beschreibt doch nur einen oft zu beobachten > Sachverhalt ;-) Das ist richtig, aber so klar und eindeutig hatte ich das noch nicht gelesen..., danke dir!
Hi >Nimm das hier: >http://www.fritzler-avr.de/HP/Librarys/tastenplex_his.php Die mageren Informationen des TOs lassen auf Assembler schließen. @ Sebastian Hauser (seppl87) Zeig mal dene getkey-Routine. Wie sieht deine Entprellung aus. MfG Spess
Sebastian Hauser schrieb: > Wie kann ich es schaffen damit sie 1x aufgerufen wird und nur eine Taste > abgefragt wird? Nach deiner Beschreibung macht dein Programm genau das was Du möchtest: Sebastian Hauser schrieb: > Meine Methode "getkey" setzt jede Spalte nacheinander auf low, (alle > anderen sind high), in dieser Spalte werden dann die Reihen > durchgeprüft, es wird jeder Port gesetzt und sobald einer low geht > (JNB), wird die jeweilige Taste in den Akku gespeichert. > > Ist dies geschehen wird die Methode getkey durch "ret" wieder verlassen > und im anderen Label von Zeile zu Zeile weiterabgearbeitet.
spess53 schrieb: > Hi > >>Nimm das hier: >>http://www.fritzler-avr.de/HP/Librarys/tastenplex_his.php > > Die mageren Informationen des TOs lassen auf Assembler schließen. > > @ Sebastian Hauser (seppl87) > > Zeig mal dene getkey-Routine. Wie sieht deine Entprellung aus. > > MfG Spess Habe keine Entprellung drin, habe mir darüber schon Gedanken gemacht aber glaube nicht dass es zwingend notwendig ist oder?
Hi >Habe keine Entprellung drin, habe mir darüber schon Gedanken gemacht >aber glaube nicht dass es zwingend notwendig ist oder? Und was meinst du, woher das >ich rufe meine Methode "getkey" auf und es wird ausgeführt, aber leider >mehrmals :D kommt? MfG Spess
> ich rufe meine Methode "getkey" auf und es wird ausgeführt, aber leider > mehrmals :D Du rufst 'getkey' einmal auf, aber sie wird mehrmals ausgeführt? D.h. in 'getkey' ist eine Schleife? Oder ist es eher so, dass 'getkey' mehrfach aufgerufen wird? Wenn du nicht jetzt deinen Code zeigst, werden alle nur rumraten.
init: lcall initLCD lcall loeschen keyfield data p1 lcall menue Im menü wird dann ausgegeben "Code eingeben 1" "Code aendern 2" Dann kommt meine main: main: lcall key ;key springt immer wieder auf z4 durch "ret" z4: cjne a,#01h,label1 ;wenn nicht 1 dann zu label2 lcall loeschen ;wenn 1 dann loesche LCD mov dptr,#S1 ;Gebe aus "Code: " lcall textzeile1 ;in Textzeile1 lcall time2 ;rufe zeitverzögerung auf sjmp main label1: lcall loeschen ;loesche LCD lcall textzeile2 mov dptr,#s5 ;"Admincode eingeben: " lcall time2 ljmp main Nur ein kleines Testprogramm dass es zwischen 1 und 2 unterscheidet. Das mit der getkey funktioniert, wenn ich "1" drücke kommt auch eine 1 im Display, bei der 2 eine 2 usw... Jetzt das Problem: Es steht am anfang nach laden des hex codes gleich Zeile1: "Code eingeben 1" Zeiel2: "Admincode eingeben" anstatt "Code aendern 2" Es zeigt mir halt sofort immer den Code "Admincode eingeben" in Zeile2 an, habe hier wohl einen Denkfehler auf den ich momentan nicht komme. Gruß
:
Bearbeitet durch User
So ich habe mein Problem entdeckt, 1, 2, 3 4, 5, 6 7, 8, 9 *, 0, # So wenn ich alles ohne das Programm in dezimalzahl ausgebe kommt bei der 1 immer die 1 bei der 2 kurz die 2 und danach immer die 1, bei der 3 kurz die 3 und danach immer die 1. bei der 4 kurz die 4 dann immer die 2, bei der 5 kurz die 5 dann immer die 2, bei der 6 kurz die 6 dann immer die 2. 3.Reihe: kurz die richtige dann immer die 4, 4.Reihe: kurz richtige dann immer dei 8 also ist es iwas mit dem binärwert. Also muss ich sie entprellen - ja? Und wenn ja wie würde das gehen? Gruß
:
Bearbeitet durch User
Hallo, ich habe das Entprellen einer Tasten-Matrix mit dem Code von Peter Dannegger (PeDa) Beitrag "Tasten entprellen - Bulletproof" realisiert. |KEY_PIN| wird dann gegen die Bit-Nummer des ScanCodes der Tasten-Matrix ersetzt und die Tastenergebnisse habe nun 16 verschiedene Werte (0-9,A,B,C,D,#,*). Also sind einige Variable nicht mehr vom Typ |uint8_t| sondern |uint16_t|. Weiterführende Links: # http://www.mikrocontroller.net/articles/Entprellung # http://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29 # Beitrag "PeDa Entprellung" # http://www.mikrocontroller.net/attachment/160430/Tasten_entprellen_v1.c
:
Bearbeitet durch User
Uwe S. schrieb: > Hallo, > > ich habe das Entprellen einer Tasten-Matrix mit dem Code von Peter > Dannegger (PeDa) > > Beitrag "Tasten entprellen - Bulletproof" > > realisiert. > > |KEY_PIN| wird dann gegen die Bit-Nummer des ScanCodes der Tasten-Matrix ersetzt > und die Tastenergebnisse habe nun 16 verschiedene Werte > (0-9,A,B,C,D,#,*). > Also sind einige Variable nicht mehr vom Typ |uint8_t| sondern > |uint16_t|. > > Weiterführende Links: > > # http://www.mikrocontroller.net/articles/Entprellung > # > http://www.mikrocontroller.net/articles/Entprellun... > > # Beitrag "PeDa Entprellung" > # > http://www.mikrocontroller.net/attachment/160430/T... Schreibe leider in ".a51" da es der atmel at89c5131 ist.
:
Bearbeitet durch User
Ja und ? die Grundlagen kannst Du doch - dann interpretiere den Code und übersetze ihn wieder zurück zum 8051. Von dort stammt er.
Uwe S. schrieb: > Ja und ? > > die Grundlagen kannst Du doch - dann interpretiere den Code und > übersetze ihn wieder zurück zum 8051. > Von dort stammt er. Nein, ich bin auch wirklich kein Profi, wäre echt hammer nett wenn mir das jemand in a51 umschreiben könnte, verstehe es nämlich nicht :( Gruß
Leider habe ich es immer noch nicht geschafft, es funktioniert nur die linke Spalte! Bei der Codeeingabe 1, 2, 3 4, 5, 6 7, 8, 9 *, 0, # kommt bei der 1 korrekt die 1 bei der 2 die 1 bei der 3 die 1 bei den anderen Reihen ebenso. Immer nur die erste Spalte der Ziffern wird korrekt gewertet.
:
Bearbeitet durch User
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.