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 Print "**** RN-Control V1.4 *****" Print "Das neue Experimentier- und Roboterboard" Print 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; 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
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







Zitieren

Lesezeichen