-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: programm für 7 sekment-anzeige

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55

    programm für 7 sekment-anzeige

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    hi leute,

    ich habe eine 7 sekment anzeige (0-9 anzeige) an einen atmega8 angeschlossen. ich habe mir mit meinem anfängerwissen eine liste mit den befehlen für die darstellung der zahlen gemacht, allerdings ist die bestimmt ziemlich unkonventionell. bitte um hilfe^^


    $regfile = "m8def.dat"
    $framesize = 60
    $swstack = 60
    $hwstack = 60
    $crystal = 8000000
    $baud = 9600

    Config Pind.7 = Input
    Taster Alias Pind.7
    Portd.7 = 1
    Config Pind.6 = Input
    Taster2 Alias Pind.6
    Portd.6 = 1
    Config Portc.5 = Output
    Led1 Alias Portc.5
    Config Portc.4 = Output
    Led2 Alias Portc.4
    Config Portc.3 = Output
    Led7 Alias Portc.3
    Config Portc.2 = Output
    Led3 Alias Portc.2
    Config Portc.1 = Output
    Led4 Alias Portc.1
    Config Portc.0 = Output
    Led6 Alias Portc.0
    Config Portb.1 = Output
    Led5 Alias Portb.1


    Dim Ziffer1 As Bit
    Dim Ziffer2 As Bit
    Dim Ziffer0 As Bit
    Dim Angeschaltet As Bit
    Dim Zaehler As Integer

    Do

    If Taster = 1 Then Angeschaltet = 1
    If Taster = 0 And Angeschaltet = 1 Then
    Angeschaltet = 0
    Zaehler = Zaehler + 1
    End If
    Waitms 10

    If Ziffer0 = 1 Then
    Led1 = 1
    Led2 = 1
    Led3 = 1
    Led4 = 1
    Led5 = 1
    Led6 = 1
    Led7 = 0
    Ziffer0 = 0
    End If
    If Ziffer1 = 1 Then
    Led1 = 0
    Led2 = 0
    Led3 = 0
    Led4 = 0
    Led5 = 1
    Led6 = 1
    Led7 = 0
    Ziffer1 = 0
    End If
    If Ziffer2 = 1 Then
    Led1 = 1
    Led2 = 0
    Led3 = 1
    Led4 = 1
    Led5 = 0
    Led6 = 1
    Led7 = 1
    Ziffer2 = 0
    End If

    If Zaehler = 0 Then
    Ziffer0 = 1
    Ledon = 0
    End If
    If Zaehler = 1 Then
    Ziffer1 = 1
    If Taster2 = 0 Then
    Ziffer0 = 1
    Ledon = 1
    Waitms 125
    Ziffer9 = 1
    Waitms 125
    Ziffer8 = 1
    Waitms 125
    Ziffer7 = 1
    Waitms 125
    Ziffer6 = 1
    Waitms 125
    Ziffer5 = 1
    Waitms 125
    Ziffer4 = 1
    Waitms 125
    Ziffer3 = 1
    Waitms 125
    Ziffer2 = 1
    Waitms 125
    Ziffer1 = 1
    Waitms 125
    Ziffer0 = 1
    Waitms 750
    Ledon = 0
    End If
    End If
    If Zaehler = 2 Then Zaehler = 1
    Loop

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Wenn es so funktioniert, passt es schon so. Besser wäre es, wenn du es in ein Array schreibst.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    ne es get eben nicht^^
    wen der zaehler1 = 1 ist, entstet eine befehlsschleife für ziffer 1 und die anzeige bleibt dauerhaft auf 1 stehen.


    ach sorry wa das falsche programm xD habs mal editiert

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Was geht nicht. Zeigt er nichts an oder zeigt er das Falsche an. Hast du für das SSG Vorwiderstände drinnen? Hast du schon probiert einzelne Leds leuchten lassen?

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    das is der völlig falsche ansatz, denn die platiene ist schon seit 2 monaten in gebrauch. nein es liegt am programm. hast du dir das denn auch mal angegugt? wen der "zaehler=1" ist, und ich dann den timer mit dem "taster2" betätige bleibt der "zaehler" ja auf 1 stehen. also befindet sich "ziffer1" in einer dauerschleife. ich möchte halt einfach alle 7 sekmente mit einem befehl aktivieren/deaktivieren da das erstens weniger speicher verbraucht und wesentlich übersichtlicher ist.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Es fehlt ein Endif im "Do" Block Nach den Dim Befehlen

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ich habe selten ein so unübersichtliches Programm gesehen.

    Das Programm kann etwas übersichtlicher und kürzer werden, wenn man das Zählen einzeln schritt für schritt macht, sondern mit einer Variable die von 1-9 zählt. Für die Ausgabe bietet sich select/case an, oder halt ein konstantes Array. Die Schleife wird dann bei jedem Zählschritt durchlaufen, und nicht nur einmal um von 0 bis 9 zu zählen.

    Wenn man schon das ganze einfach so hintereinander Programmieren will, könnte man es auch fast ganz ohne variablen machen. Also einfach die Position im programm als "zählvariable". Wenn man später mehr damit machen will ist das aber nicht so flexibel. Für nur die Ausgabe wäre es ein gute Lösung.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    ok ich versuchs mal mit nem array

    danke

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    28.05.2009
    Beiträge
    55
    Zitat Zitat von Besserwessi
    Für die Ausgabe bietet sich select/case an, oder halt ein konstantes Array.
    fileicht sagst du mal 2-3 sätze zu den beiden alternativen, damit ich weis womit ich es zu tun habe.^^

    bin noch ziemlich am anfang meiner basic lektionen und über arrays oder select/case hab ich noch garnichts gelehrnt.

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für die umrechnung von einer normalen Ziffer (0...9) in die 7 Segmentdarstellung kann man ein konstantes array verwenden. Besonders einfach ist das, wenn die LEDs alle an einem Port hängen. Dann reicht so etwas wie:

    segtab[0] = ....
    segtab[1] = ....
    ....
    Portb = segtab[n]
    schon aus um die Zahl n auszugeben. Im array wird einfach wie ein erner tabelle nachgesehn was man ausgeben muß für die Zahl. Also so eine Art Zeichensatz. Wenn die LEDs wie hier nicht an einem Port sind, muß man die Bits noch etwas verteilen. Die meisten Bits kann man einfach mit einer Maske aussuchen. Die paar die übrig bleiben, dann z.B. per IF Then ELSE.


    Die Alternative mit dem select case ist dann etwa so. Abhängig von der zahl die Ausgegben wird, wird einer der Fälle aufgerufen und da dann ausgegeben. Bis auf die Werte die Ausgegeben werden sehen die Fälle gleich aus. Auch damit kriegt man so etwas wie eine Funktion um eine ziffer auszugeben, die dann in einer schleife mehrmals aufgerufen wird.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •