Hallo Sebastian,
ich habe deinen Code noch mal überarbeitet.
Sollte jetzt funktionieren.
Hauptproblem war das Bascom die Byte-Variablen nicht
als vorzeichenbehaftete Zahlen betrachten kann.
Deshalb habe ich es auf Integer umgeändert.
Probier es doch mal aus,und gib Bescheid, was passiert.
Müsste ein Dreieck angezeigt werden.
Gruß Jan
Code:
$regfile = "m128def.dat"
$crystal = 16000000
'#########Variablen Line Funktion
Dim Xlen As Integer
Dim Ylen As Integer
Dim Xa As Integer
Dim Ya As Integer
Dim Temp As Integer
'#################################
Declare Sub Drawline(byval Xs As Integer , Byval Ys As Integer , Byval Xe As Integer , Byval Ye As Integer)
Config Porta = Output
Config Portc = Output
Config Portf = Output
Z Alias Portf.1
Z = 1 ' dunkel
Do
Call Drawline(0 , 0 , 100 , 80 )
Call Drawline(100 , 80 , 22 , 33)
Call Drawline(22 , 33 , 0 , 0)
Waitms 1
Loop
End
Sub Drawline(xs As Integer , Ys As Integer , Xe As Integer , Ye As Integer)
';Längen für x und y ausrechnen
Xlen = Xe - Xs
Ylen = Ye - Ys
';Schrittrichtung für x und Y festlegen
If Xlen >= 0 Then Xa = 1 Else Xa = 255
If Ylen >= 0 Then Ya = 1 Else Ya = 255
';wenn xlänge grösser ist, dann laufen wir an der X-Achse entlang
'; ansonsten an der Y-Achse
If Xlen < 0 Then Xlen = Xlen * -1
If Ylen < 0 Then Ylen = Ylen * -1
If Xlen < Ylen Then Goto Walky
Walkx:
Z = 0 'licht einschalten
Temp = Xlen
Do
Porta = Low(xs)
Portc = Low(ys)
Waitus 1
Xs = Xs + Xa ':immer einen Schritt in x-Richtung weiter
Temp = Temp - Ylen ';Schritt in Y-Richtung nötig ?
If Temp <= 0 Then ';wenn <=0 dann ja
Temp = Temp + Xlen ';
Ys = Ys + Ya ';Schritt in Y-Richtung
End If
Loop Until Low(xs) = Low(xe) ';Wiederholen bis Ende der Linie
Goto Endofsub
Walky:
Z = 0
Temp = Ylen
Do
Porta = Low(xs)
Portc = Low(ys)
Waitus 1
Ys = Ys + Ya
Temp = Temp - xlen
If Temp < 0 Then
Temp = Temp + Ylen
Xs = Xs + Xa
End If
Loop Until Low(ys) = Low(ye)
Endofsub:
Z = 1 'und wieder aus
End Sub
Lesezeichen