• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Wählscheibentelefon mit 7 Segmentanzeige

OP
P

Pretender

Geocacher
Juhu es geht.
Danke Euch.
Hatte aber selbst noch ein Fehler reingebaut und jetzt behoben.
Die Segmente falsch angeschlossen kam nur komische Zeichen raus. :eek:ps:
Sollte man vielleicht mal in einen ? Cache einbauen :???:
Gruß PRetender
 

peter51d

Geocacher
Schön zu hören.

Hier noch eine Variante, dieses mal mit der binkenden Null währen der Bereitschaft und Wahl.

Code:
$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 2
$swstack = 5

'$regfile = "m8def.dat"
'$crystal = 1000000

'Codeabfrage über Wählscheibentelefon


'Ein und Ausgänge konfigurieren

Config Portb = Output
Config Pind.0 = Input
Config Pind.1 = Input

'Timer konfigurieren
Config Timer1 = Timer , Prescale = 64
On Timer1 Bereit
Enable Timer1
Enable Interrupts
Const Timerstartwert = 49911
Timer1 = Timerstartwert


'Alias Namen zuweisen

Nsi Alias Pind.1                                            'Impulsleitung vom Nummernschalter
Nsa Alias Pind.0                                            'Nummernschalterkontakt, für Wählscheibe dreht oder steht


'Interne pullups zuschalten
Portd.0 = 1
Portd.1 = 1

'Variablen zuweisen
Dim A As Byte                                               'Anzahl der Impulse pro Wahlvorgang
Dim Nummer As String * 10                                   'Der String in dem die gewählte Nummer geschrieben wird
                                                             ' !!genau so gross wie der String "Rufnummer"!!
Dim Rufnummer As String * 10                                'Der String in dem die zu wählende Nummer festgelegt wird
                                                             'die max länge ist hier auf 10 Nummern beschränkt


'Alle Variablen auf Null setzen
A = 0
Nummer = ""                                                 'Sicherstellen, das String leer

Portb = &B11000000

'Hauptprogrammschleife

 Rufnummer = "12"                                           'Hier die zu wählende Nummer eintragen

'Abfrage des Nummernschalters

Do


Debounce Nsi , 1 , Impulse , Sub                            'Impulsschalter entprellen und Sprunganweisung
Debounce Nsa , 1 , Auswerten , Sub                          'Wählscheibe abgelaufen entprellen und Sprunganweisung
Loop

'Implse hochzählen

Impulse:


A = A + 1
Return

Auswerten:
If A = 0 Then                                               'Verhindern, das beim Start schon etwas in den Sting "Nummer"geschrieben wird
Return
End If
If A = 10 Then                                              'beim wählen der Nummer 0 werden 10 Impulse erzeugt.
A = 0                                                       'hier durch wird im String eine "0" geschrieben
End If
Nummer = Nummer + Str(a)                                    'Die ermittelten Impulse der Rufnummer hinzufügen
If Len(nummer) = Len(rufnummer) Then                        'Länge der gewählten Nummer mit Länge der zu wählenden Nummer vergleichen
                                                            'durch den Längenvergleich der Strings, muss keine extra längen Angabe mehr gemacht werden
Goto Kontrolle                                              'wenn Länge gleich dann zur Kontrolle
End If
A = 0                                                       'Impulse für nächste Nummer löschen
Return


Kontrolle:

If Nummer = Rufnummer Then                                  'zu wählende Nummer mit gewählter Nummer vergleichen
Goto Koordinaten                                            'wenn gleich dann Anzeige der Koordinaten
Else
Goto Falsch                                                 'wenn ungleich dann Anzeige "Falsch"
End If

End                                                         'end program

'Koordinaten Anzeige

Koordinaten:
Disable Interrupts
Do
   Gosub Leer

   Wait 1                                                   'Anzeigedauer des Zeichens

   Gosub N

   Wait 1

   Gosub Eins

   Wait 1

   Gosub Zwei

   Wait 1

   Gosub Grad

   Wait 1

   Gosub Drei

   Wait 1

   Gosub Vier

   Wait 1

   Gosub Dp

   Wait 1

   Gosub Fuenf

   Wait 1

   Gosub Sechs

   Wait 1

   Gosub Sieben

   Wait 1

   Gosub Leer

   Wait 1

   Gosub E

   Wait 1

   Gosub Acht

   Wait 1
   Gosub Neun

   Wait 1

   Gosub Null

   Wait 1

   Gosub Grad

   Wait 1

   Gosub Eins

   Wait 1

   Gosub Zwei

   Wait 1

   Gosub Dp

   Wait 1

   Gosub Drei

   Wait 1

   Gosub Vier

   Wait 1

   Gosub Fuenf

   Wait 1

   Gosub Leer

   Wait 1

Loop


'Falschanzeige
Falsch:
Disable Interrupts
Do
   Gosub Leer

   Waitms 500

   Gosub F                                                  '

   Waitms 500

   Gosub A1

   Waitms 500

   Gosub L

   Waitms 500

   Gosub S

   Waitms 500

   Gosub C

   Waitms 500

   Gosub H

   Waitms 500

   Gosub Leer

   Waitms 500

Loop

'Bereitanzeige
Bereit:
Timer1 = Timerstartwert
Toggle Portb
Portb.7 = 1
Portb.6 = 1
Return

' Zeichensatz
Leer:

Portb = &B11111111

Return

Dp:

Portb = &B01111111
Return
Null:

Portb = &B11000000
      Return
Eins:

Portb = &B11111001
Return
Zwei:

Portb = &B10100100
Return
Drei:

Portb = &B10110000
Return
Vier:

Portb = &B10011001
Return
Fuenf:

Portb = &B10010010
Return
Sechs:

Portb = &B10000010
Return
Sieben:

Portb = &B11111000
Return
Acht:

Portb = &B10000000
Return
Neun:

Portb = &B10010000
Return
A1:

Portb = &B10001000
Return
C:

Portb = &B11000110
Return
E:

Portb = &B10000110
Return
F:

Portb = &B10001110
Return
H:

Portb = &B10001001
Return
L:

Portb = &B11000111
Return
N:

Portb = &B10101011
Return
S:

Portb = &B10010010
Return
Grad:

Portb = &B10011100
Return
 
Oben