Eine Byte Variable aufteilen in einzelne 8 Bits
Hallo,
Ich habe eine Byte Variable (bild) diese ist mit 8 Bits gefüllt also:
Dim bild as byte
bild = 01000000
wie kann ich diese Variable jetzt aufsplitten bzw. die einzelnen Bits auslesen?
also z.B.:
Bit 2 aus bild = 1
Bit 3 aus bild = 0
geht das irgendwie?
Liste der Anhänge anzeigen (Anzahl: 1)
Also, ich habe jetzt mein Programm geschrieben. Es ist zur Ansteuerung einer LED-Matrix.
Ich würde mich sehr freuen, wenn ihr mal drüberschauen könntet.
Es gibt ein paar Errors, die ich mir nicht erklären kann.
Code:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb = Output
Config Portd = Output
Spalte Alias Portd
Zeile Alias Portb
Declare Sub Leer()
Declare Sub Zeichnen()
Dim Bild1 As Byte
Dim Bild2 As Byte
Dim Bild3 As Byte
Dim Bild4 As Byte
Dim Bild5 As Byte
Dim Bild6 As Byte
Dim Bild7 As Byte
Dim Bild8 As Byte
Dim Led1 As Bit
Dim Led2 As Bit
Dim Led3 As Bit
Dim Led4 As Bit
Dim Led5 As Bit
Dim Led6 As Bit
Dim Led7 As Bit
Dim Led8 As Bit
Dim Zeit As Integer
Do
Select Case Zeit
Case 640 : 'Bild1
Bild1 = Bits(0 , 7) 'Im ersten Schritt wird das Bild gesetzt
Bild2 = Bits(1 , 7)
Bild3 = Bits(2 , 7)
Bild4 = Bits(3 , 7)
Bild5 = Bits(4 , 7)
Bild6 = Bits(5 , 7)
Bild7 = Bits(6 , 7)
Bild8 = Bits(7)
Call Zeichnen() 'Das bild Zeichnen
Call Leer() 'Und die Bildfäche wieder leeren
Case 1280 : 'Bild2
Call Zeichnen()
Call Leer()
Case 1920 : 'Bild3
Call Zeichnen()
Call Leer()
Case 2560 : 'Bild4
Call Zeichnen()
Call Leer()
Case 3200 : 'Bild5
Call Zeichnen()
Call Leer()
Case 3840 : 'Bild6
Call Zeichnen()
Call Leer()
Case 4480 : 'Bild7
Call Zeichnen()
Call Leer()
Case 5120 : 'Bild8
Call Zeichnen()
Call Leer()
Case 5760 : 'Bild9
Call Zeichnen()
Call Leer()
Case 6400 : 'Bild10
Call Zeichnen()
Call Leer()
Case 7040 : 'Bild11
Call Zeichnen()
Call Leer()
Case 7680 : 'Bild12
Call Zeichnen()
Call Leer()
Case 8320 : 'Bild13
Call Zeichnen()
Call Leer()
Case 8960 : 'Bild14
Call Zeichnen()
Call Leer()
Case 9600 : 'Bild15
Call Zeichnen()
Call Leer()
Case 10240 : 'Bild16
Call Zeichnen()
Call Leer()
Case 10880 : 'Bild17
Call Zeichnen()
Call Leer()
Case 11520 : 'Bild18
Call Zeichnen()
Call Leer()
Case 12160 : 'Bild19
Call Zeichnen()
Call Leer()
Case 12800 : 'Bild20
Call Zeichnen()
Call Leer()
Case 13440 : 'Bild21
Call Zeichnen()
Call Leer()
Case 14080 : 'Bild22
Call Zeichnen()
Call Leer()
Case 14720 : 'Bild23
Call Zeichnen()
Call Leer()
Case 15360 : 'Bild24
Call Zeichnen()
Call Leer()
Case 16000 : 'Bild25
Call Zeichnen()
Call Leer() 'bis hier sollte eine Sekunde vergangen sein, da: Nach jeder gesetzten LED macht er 10 mikrosekunden pause. (64 * 10)*25
Zeit = 0
End Select
Zeit = Zeit + 1
Loop
'&B10000000 = &H80
'&B01000000 = &H40
'&B00100000 = &H20
'&B00010000 = &H10
'&B00001000 = &H8
'&B00000100 = &H4
'&B00000010 = &H2
'&B00000001 = &H1
Sub Zeichnen()
Dim I As Integer
'Zeile
Led1 = Bild1.0
Led2 = Bild2.1
Led3 = Bild3.2
Led4 = Bild4.3
Led5 = Bild5.4
Led6 = Bild6.5
Led7 = Bild7.6
Led8 = Bild8.7
Zeile.1 = 1
Spalte.0 = Led1
Waitus 625
Reset Spalte.0
Spalte.1 = Led2
Waitus 625
Reset Spalte.1
Spalte.2 = Led3
Waitus 625
Reset Spalte.2
Spalte.3 = Led4
Waitus 625
Reset Spalte.3
Spalte.4 = Led5
Waitus 625
Reset Spalte.4
Spalte.5 = Led6
Waitus 625
Reset Spalte.5
Spalte.6 = Led7
Waitus 625
Reset Spalte.5
Spalte.7 = Led8
Waitus 625
Reset Spalte.7
End Sub
Sub Leer()
Reset Bild1
Reset Bild2
Reset Bild3
Reset Bild4
Reset Bild5
Reset Bild6
Reset Bild7
Reset Bild8
End Sub
'end program
Die Errors sind diese:
Anhang 24077
Error Nr. 1 ist hier:
Code:
Bild(0) = Bits(0 , 7)
Error Nr. 3 hat keinen Bezug
Gruß nxtman
Edit:
Error Nr. 2 Hat sich erledigt. Codestelle falsch!
Edit 2:
Errors haben sich komplett erledigt. Code aktualisiert. Funktioniert aber trozdem nicht...