Der Bildspeicher ist die Schnittstelle zwischen deinem Programm und der Matrix. Sein Inhalt wird, normalerweise im Hintergrund per Interrupt, immer an die Matrix ausgegeben. Um die Anzeige zu ändern muss man deshalb den Bildspeicher ändern. Jedes Bit im Array Bildspeicher() repräsentiert eine LED in der Matrix. Wenn das Bit zum Zeitpunkt der Spaltenabfrage gesetzt (=high) ist leuchtet die LED nicht gesetzt (=low) bedeutet LED ist aus.
Jedes Bit im Bildspeicher steht für ein Pixel im darzustellenden Bild. Wie ändert man ein bestimmtes Bit im Bildspeicher? Dafür schreibt man sich kleine Funktionen die gezielt einen einzelnen Pixel ändern. Zum Setzen und Löschen könnten die Funktionen etwa so aussehen:
Code:
Declare Sub Zeilensetzen
Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Dim Bildspeicher(11) As Word , Spalte As Byte
Dim X As Byte , Y As Byte
Dim Temp As Word , Zaehler As Word
' ...
If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1
Waitus 100 ' 10000*100µs ergeben eine Sekunde
'hier kann man dann das Bild zusammenbasteln
Select Case Zaehler
Case 10000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X
Case 20000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X
Case 30000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X
Case 40000 : For X = 1 To 9 ' alle an
Bildspeicher(x) = 255
Next X
Case 50000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B10101010101
Next X
Case 60000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X
Zaehler = 0
End Select
Zaehler = Zaehler + 1
Loop
End
Sub Set_pixel(byval x As Byte , byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub
Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub
Sub Zeilensetzen
(ungetestet)
Gruß
mic
Lesezeichen