Hallo Xeus,
Ich denke der Code hilft dir. Ist allerdings auf die max. Anzahl von 8 Segmenten zugeschnitten, die allerdings gruppenweise zu je 4 gesteuert werden. Der wichtigste Teil ist die sub Send_bytes...Daraus kannst Du erkennen, wie der angesteuert wird. Ansonsten müsste es einfach sein - ganz gut kommentiert, hoffe ich - sich das rauszusuchen, was man braucht.
Man benötigt das Datenblatt, um die vielen Befehle zu erfahren. Man kann damit sogar quasi dimmen: Gleitend von Dunkel nach Hell die Helligkeit hochfahren. Find ich ganz lustig. Daran ist irgendein Widerstand beteiligt. Welchen, weiß ich momentan nicht mehr. Man kann aber erst einmal den vorgeschlagenen Wert nehmen. Ansonsten liebe ich dieses Teil. Einfacher kann man hardwaremäßig eine 8-stellige Anzeige kaum aufbauen, außer vielleicht mit dem saa 1064, aber der kann nur 4.
WolfgangCode:$regfile = "m32def.dat" $baud = 19200 $crystal = 16000000 Const Displays = 4 Const Dezpunkt = 3 Declare Sub Send_bytes(byval Bytes As Word) Declare Sub Alle_aus Declare Sub Display_zeichen_bilden Declare Sub Ausgabe Dim I As Byte , Z As Byte , Wert As Word Dim Temp As Byte Dim Display_zeichen(displays)as Byte Dim Grad As Single Dim Temp_anzeige As String * Displays1 Dim Zähler As Byte '***** für MAX-Init-Befehle Dim A(5) As Word Config Portc = Output Clock_max Alias Portc.5 ' clock Data_out_max Alias Portc.7 ' din Load_max Alias Portc.6 ' load '***** es werden immer 2 Bytes auf einmal abgeschickt '***** deshalb Dimensionierung mit word '*** erst alle aus Alle_aus '**** wichtig, falls vorher im Shutdown-Modus!!! '**** geht beim Ausschalten da manchmal rein '**** Befehle werden ausgeführt, aber man sieht nichts!!!! '*** also zuerst in den Normalmodus A(1) = &H0C01 '**** Normalmodus A(2) = &H0B04 '**** Anzahl 4 Digits A(3) = &H090F '**** Dekodiermodus für die ersten 4 A(4) = &H0A0F '**** Helligkeit, volle Kanne bei ISEG=10K A(5) = &H0F00 '***** in den Displaymode '**** Init Bargraf For I = 1 To 5 Send_bytes A(i) Next '**** Versuch mit Grad-Anzeige Grad = -5.4756 Temp_anzeige = Fusing(grad , "##.#" ) '**** um aufzurunden! '**** Decodieren nicht nötig Display_zeichen_bilden Do Wait 2 Alle_aus '***** Testweise alle Zeichen zeigen For Z = 1 To Displays For I = 0 To 14 'Wert = Z * 256 'Wert = Wert + I Wert = Makeint(i , Z) Send_bytes Wert Waitms 500 Next Next Alle_aus '**** Gradzahl ausgeben Ausgabe Loop End Sub Send_bytes(byval Bytes As Word) Reset Load_max '**** masb first, clock goes high Shiftout Data_out_max , Clock_max , Bytes , 1 , 16 , 5 Set Load_max 'Waitms 200 End Sub Sub Alle_aus For Z = 1 To 8 '**** 2. Byte immer 0 'Wert = Z * 256 'Wert = Wert + 15 Wert = Makeint(15 , Z) '**** geht schneller!!! Send_bytes Wert 'Waitms 500 Next End Sub Sub Display_zeichen_bilden Local Temp_zeichen As String * 1 '**** erst Array löschen For Z = 1 To Displays Display_zeichen(z) = "" Next '***** rückwärts den TempWert durchgehen Zähler = Displays For Z = Len(temp_anzeige) To 1 Step -1 Temp_zeichen = Mid(temp_anzeige , Z , 1) '*** nur wenn kein Dez.Punkt, übernehmen If Temp_zeichen <> "." Then Display_zeichen(zähler) = Temp_zeichen Decr Zähler End If Next '**** fehlende Zeichen sind nun leere Strings!!! End Sub Sub Ausgabe Local Zeichen As Byte For Z = 1 To Displays Zeichen = Display_zeichen(z) If Zeichen = "" Then '**** Blank Temp = 15 Elseif Zeichen = "-" Then Temp = 10 Else Temp = Val(zeichen) End If '**** Dez.Punkt If Z = Dezpunkt Then Temp = Temp Or 128 End If 'Wert = Z * 256 'Wert = Wert + Temp Wert = Makeint(temp , Z) '**** geht wesentlich schneller!!! Send_bytes Wert Waitms 200 Next End Sub







Zitieren

Lesezeichen