Hallo

Also die 2t variante von simonit funktioniert, wenn ich die Ziffern dann in Integer speichere. Aber ich muss leider die Zahl in ein Byte speichern, da es dem Prog. sonst nicht passt. Wenn ich sie in ein Byte speichere, dann bekomme ich z.B. anstatt 8569, 8481. Auch wenn ich andere Zahlen verwende, dann stimmt der Tausender immer. Ich habe mal nur eine 3stellige Zahl eingegeben und er hatt immer die erste Zahl richtig gemacht, die 2te manchmal richtig und die erste immer falsch. Wie kann ich dass beheben?
Hier noch der neue code:
Code:
Declare Sub Led_display_init()
Declare Sub Led_display(byval Ziffer As Byte , Byval Zahl As Byte)


$regfile = "m32def.dat"

Const Rn_digi_slave_write = &H70
Const Rn_digi_slave_read = &H71
Const Dezimalpunktziffer = 0                                'Segment wo Dezimalpunkt leuchten soll (0=keinen)

Dim Segmente As Byte
Dim Z As Byte
Dim I As Byte




Dim Einer As Byte
Dim Zehner As Byte
Dim Hunderter As Byte
Dim Tausender As Byte
Dim A As Word


$crystal = 16000000                                         'Quarzfrequenz
$baud = 9600

Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1




I2cinit
Led_display_init




I = 0
Sound Portd.7 , 400 , 450                                   'BEEP
Sound Portd.7 , 400 , 250                                   'BEEP
Sound Portd.7 , 400 , 450                                   'BEEP
Print
Print "**** RN-Control  V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print

'-------------------------------------------------------------------------------

Do


A = 923


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

Print ; Tausender ; Hunderter ; Zehner ; Einer;
Print
Waitms 500
Led_display 1 , Tausender                                   'Anzeigen der Zahlen
Led_display 2 , Hunderter
Led_display 3 , Zehner
Led_display 4 , Einer


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

  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
         Case 1:
                Segmente = &H06
         Case 2:
                Segmente = &H5B
         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
mfg Luca