-
        

Ergebnis 1 bis 1 von 1

Thema: RN-Digi Elemente einzeln abschalten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.08.2010
    Beiträge
    6

    RN-Digi Elemente einzeln abschalten

    Anzeige

    hi,
    ich benutze die RN-Digi Schaltung zur Darstellung 1-4 stelliger Zahlen auf den 4 Siebensegmentanzeigen. Nun möchte ich bei beispielsweise bei 2- oder 3-stelligen Zahlen die vordersten Siebensegmentanzeigen abschalten. Ich bin aus dem Datenblatt des SAA1064 nicht ganz schlau geworden. Anscheinend kann man mit Controlbit 1 und 2 jeweils zwei Elemente lahmlegen. Aber wie kann ich einzelne ausschalten?
    Hier noch mein bisher verwendeter Code und im Anhang das Datenblatt des SAA1064:

    Code:
    Declare Sub Led_display_init()
    Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)
    
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    
    Const Rn_digi_slave_write = &H70
    Const Rn_digi_slave_read = &H71
    Const Dezimalpunktziffer = 0      'Segment wo Dezimalpunkt leuchten soll (0=keinen)
    Const Timervorgabe = 3036
    
    Dim Segmente As Byte
    Dim Z As Byte
    Dim Beiner As Byte
    Dim Bzehner As Byte
    Dim Bhunderter As Byte
    Dim Btausender As Byte
    Dim Einer As Word
    Dim Zehner As Word
    Dim Hunderter As Word
    Dim Tausender As Word
    Dim A As Word
    Dim Zaehlerirq0 As Long
    Dim Impulseprosekunde As Long
    Dim Impulseprominute As Long
    Dim Umdrehungenprominute As Integer
    
    
    
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    Config Int0 = Falling
    Config Timer1 = Timer , Prescale = 256
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
    Config Lcdbus = 4
    
    
    Zaehlerirq0 = 0
    On Int0 Irq0
    Enable Int0
    
    On Timer1 Timer_irq
    Enable Timer1
    
    Enable Interrupts
    
    
    
    
    
    I2cinit
    Led_display_init
    
    
    Sound Portd.7 , 400 , 450                                   'BEEP
    Sound Portd.7 , 400 , 250                                   'BEEP
    Sound Portd.7 , 400 , 450                                   'BEEP
    
    Cls
    Locate 1 , 1
    Lcd "Upm="
    'Locate 2 , 1
    'Lcd "Ips="
    
    Bhunderter = 0
    Btausender = 0
    Beiner = 0
    Bzehner = 0
    
    Do
    
       Umdrehungenprominute = Impulseprosekunde * 26
       Umdrehungenprominute = Umdrehungenprominute / 15
    
       Locate 1 , 5
       Lcd Umdrehungenprominute
       'Locate 2 , 5
       'Lcd Impulseprosekunde
    
    
       A = Umdrehungenprominute
    
       Einer = A Mod 10
       A = A - Einer
       A = A / 10
       Zehner = A Mod 10
       A = A - Zehner
       A = A / 10
       Hunderter = A Mod 10
       A = A - Hunderter
       A = A / 10
       Tausender = A Mod 10
    
       If Btausender = Tausender Then
       Else
          Btausender = Tausender
          Led_display 2 , Btausender
       End If
    
       If Bhunderter = Hunderter Then
       Else
          Btausender = Tausender
          Led_display 1 , Bhunderter
       End If
    
       If Bzehner = Zehner Then
       Else
          Bzehner = Zehner
          Led_display 4 , Bzehner
       End If
    
       If Beiner = Einer Then
       Else
          Beiner = Einer
          Led_display 3 , Beiner
       End If
    
       Bhunderter = Hunderter
       Btausender = Tausender
       Beiner = Einer
       Bzehner = Zehner
    
    Loop
    
    End
    
    
    Sub Led_display_init()
      I2cstart
      I2cwbyte Rn_digi_slave_write
      I2cwbyte 0                                                'Control Byte
    
      'Dynamic Alternative Mode und Helligkeit
      'Die oberen 3 Bits bestimmen die Helligkeit
      'Wenn es dunkler sein soll dann z.b. &B0110111
      I2cwbyte &B0110111                                        '&B1110111
    
      I2cstop
    
      'Alle Ziffern auf 0
      For Z = 1 To 4
           Led_display Z , 0
      Next Z
    
    End Sub
    
    
    Sub Led_display(ziffer An Byte , Zahl As Byte)
         I2cstart
         I2cwbyte Rn_digi_slave_write
         I2cwbyte Ziffer
    
         Select Case Zahl
             Case 0:
                   Segmente = &H3F                              '00111111
             Case 1:
                    Segmente = &H06                             '00000110
             Case 2:
                    Segmente = &H5B                             '01011011
             Case 3:
                    Segmente = &H4F
             Case 4:
                    Segmente = &H66
             Case 5:
                    Segmente = &H6D
             Case 6:
                    Segmente = &H7D
             Case 7:
                    Segmente = &H07
             Case 8:
                    Segmente = &H7F
             Case 9:
                    Segmente = &H67
             Case Else :
                    Segmente = &H80                             'Ansonsten Dezimalpunkt
    
         End Select
    
         If Dezimalpunktziffer = Ziffer Then Segmente = Segmente Or &H80
         I2cwbyte Segmente
         I2cstop
    End Sub
    
    
    'Pro Impuls (Markierung auf Scheibe) ein Aufruf
    Irq0:
     Incr Zaehlerirq0
    Return
    
    
    'Pro Sekunde ein Aufruf
    Timer_irq:
      Timer1 = Timervorgabe
      Impulseprosekunde = Zaehlerirq0
      Zaehlerirq0 = 0
    Return
    Gruß
    Daniel
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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