Hallo
Leider funktioniern bei mir beide varianten nicht. Ich habe die erhaltene Zahl als Byte gespeichert, könnte es an dem liegen? Ich bin mir nicht ganz sicher, aber ich glaube die Zahl kann nur in einem Byte gespeichert werden, dass das Programm für die Anzeigen funktioniert. Hier mal den ganzen code, vileicht habe ich ja sonst wo einen Fehler.
anstatt der 1245 werden über Print 2012010 ausgegeben.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 "**** RN-CONTROL V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Do
A = 1245
einer = A mod 1
zehner = A mod 10
zehner = zehner - einer
hunderter = A mod 100
hunderter = hunderter - zehner
tausender = A mod 1000
Tausender = Tausender - Hunderter
Print ; Tausender ; Hunderter ; Zehner ; Einer;
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
Das Display zeigt auf den ersten 2 Segmenten einen Dezimal Punkt an, dass heisst dass er keine Zahl bekommt. Auf dem 3ten Segment wird eine 1 angezeigt, auf dem ganz rechts eine 0.
Was mache ich falsch?
mfg Luca