Forum: Mikrocontroller und Digitale Elektronik Codeschloss mit 8051


von J. B. (_neuling_)


Angehängte Dateien:

Lesenswert?

Hallo

Tut mir Leid, mir ist aufgefallen, dass ich bei meinem lezten Beitrag 
keine Kommentare eingefügt habe. Ich habe ein C-Programm für ein 
Codeschloss mit einem SAB80C537 geschrieben. Über eine 3x4 Tastenmatrix 
kann (sollte man) einen bis zu 20 Stellen langen Code eingeben können, 
der dann abgeglichen wird. Ist der Code falsch passiert gar nichts, ist 
der Code richtig, wird die Alarmanlage eingeschaltet, bei erneuter 
Codeeingabe ausgeschaltet.
Ist die Alarmanlage eingeschaltet, wird ein Interrup aktiv, sobald der 
daran angeschlossene Endschalter auslöst, geht eine Sirene an und eine 
Led zeigt an, dass Alarm ausgelöst wurde (diese Led kann nur durch die 
Eingabe des Codes gelöscht werden).
Die Matrix wird an Port 1 angeschlossen (Row1 = P1.4, Row2 = P1.5,Row3 = 
P1.6,Row4 = P1.7,Col1 = P1.0,Col2 = P1.1 usw).
Zusätzlich soll eine LCD an Port 5 (2x16) gewisse Dinge ausgeben.
Könnte jemand den Code vielleicht kurz überfliegen und nachsehen, ob 
irgendwo ein gröberer Denkfehler steckt?

J.


von Stefan (Gast)


Lesenswert?

Wenn das ganze läuft warum sollte dann ein grober Designfehler 
drinstecken?

von Peter D. (peda)


Lesenswert?

Ich sehe nirgends ne Flankenerkennung, sobald Du ne Taste drückst, wird 
also der Puffer damit geflutet.

Ein Tastencode sollte nur beim Wechsel von Losgelassen zu Gedrückt 
erzeugt werden.

Hier mal ein Beispiel:

http://home.tiscali.de/peterd/appl/soft/keyscan/index.htm


Peter

von J. B. (_neuling_)


Lesenswert?

Danke für den Hinweis, ich habe den Link gelesen, sehe aber nirgens eine 
Flankenerkennung. Wenn ich den C-Code richtig verstehe, wird eine Taste 
nur akzeptiert, wenn es nicht die gleiche wie die vorige ist -> man kann 
nie die gleiche Zahl 2mal eingeben. Leider kann ich auch noch nicht gut 
genug Englisch, um den ganzen Text zu verstehen. Würde es nicht auch mit 
einer Zeitschleife funktionieren, damit man genug Zeit hätte, um die 
Taste wieder loszulassen?

von Peter D. (peda)


Lesenswert?

J. B. wrote:
> Danke für den Hinweis, ich habe den Link gelesen, sehe aber nirgens eine
> Flankenerkennung. Wenn ich den C-Code richtig verstehe, wird eine Taste
> nur akzeptiert, wenn es nicht die gleiche wie die vorige ist -> man kann
> nie die gleiche Zahl 2mal eingeben.

Doch kann man.

Loslassen zählt auch als Änderung und gibt einen Code zurück (z.B. um 
Kurz-/Langdruck auswerten zu können), der ungleich dem Code für keine 
Änderung ist.

Die Flankenerkennung erfolgt über oldkey, d.h. wenn ungleich oldkey, 
wird ein Code erzeugt.

Die Entprellung erfolgt über scan1, d.h. der Code muß mit dem vom 
vorherigen Scan identisch sein, ehe überhaupt drauf reagiert wird.


> genug Englisch, um den ganzen Text zu verstehen. Würde es nicht auch mit
> einer Zeitschleife funktionieren, damit man genug Zeit hätte, um die
> Taste wieder loszulassen?

Nein, jeder Mensch drückt unterschiedlich lang (ältere Personen viel 
länger).
Die zusätzliche Variable (oldkey) für Flankenerkennung ist ja nun nicht 
so aufwendig.


Peter

von J. B. (_neuling_)


Lesenswert?

Dnke für die Hilfe, ich habe jetzt kapiert was ich tun muss und es 
funktioniert.

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.