Gibt es einen empfehlenswerteren Weg als lokale Variablen?
Mir fiel auch auf, dass die Locals Ihre Werte nach Ablauf der Funktion behalten und beim nächsten Aufruf immer noch zur Verfügung stehen, d.h. in meinem Fall jedes Mal wieder auf 0 gesetzt werden müssen.
Wie auch immer. Anbei nochmal mein gesamtes Programm mit der Funktion.
Kurzfassung: Das Ganze hat einen Servo an den Ports C und ein Wintek (Pollin) Display an Port B. An Port D hole ich mir Schalterzustände mit denen ich die Servoposition einstellen kann. In der ersten Display-Zeile wird der Prozentuale Wert angegeben, in der zweiten Zeile der Balken. Funktionsaufruf ist mit Prozentwert und Maximal möglicher Balkenlänge.
Code:
$crystal = 8000000
$framesize = 32 ' die Größe des Frames
$swstack = 320 ' die Größe des Software-stacks
$hwstack = 32 ' die Größe des Hardware-Stacks
Config Lcd = 20 * 4 'Anzeigemodus 40 x 4 Zeichen
Config Lcdpin = Pin , E = Portb.6 , Rs = Portb.7 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E2 = Portb.5
Dim ___lcdno As Byte
Config Servos = 1 , Servo1 = Portc.0 , Reload = 10 , Timer = Timer0
Config Portb = Output
Config Portd = Input
Dim X As Byte , Mini As Byte , Maxi As Byte , Ausgabe As Byte , Temp As Byte
Dim P As Single , P2 As Integer
Enable Interrupts
Declare Function Balken(byval Prozent As Single , Byval Laenge As Byte) As String
___lcdno = 1
Initlcd
Cls
___lcdno = 0
Initlcd
Cls
Cursor Off
Portd = 1
Mini = 40
Maxi = 155
X = Maxi - Mini
X = X / 2
X = X + Mini
Do
P = Maxi - Mini
P = P / 100
P2 = X - mini
P = P2 / P
P = Round(p)
If Pind.0 = 0 Then
Temp = X + 2
If Temp <= Maxi Then X = X + 2
End If
If Pind.1 = 0 Then
Temp = X - 2
If Temp => Mini Then X = X - 2
End If
If Pind.2 = 0 Then
Temp = X + 10
If Temp <= Maxi Then X = Maxi
End If
If Pind.3 = 0 Then
Temp = X - 10
If Temp => Mini Then X = Mini
End If
Locate 1 , 1
Lcd P
Locate 2 , 1
Lcd Balken(p , 20)
Servo(1) = X
Loop
End
Function Balken(byval Prozent As Single , Byval Laenge As Byte)
Local Temp1 As Single
Local Temp2 As Single
Local Temp3 As String * 40
Laenge = Laenge - 2
Temp1 = Prozent * Laenge
Temp1 = Temp1 / 100
If Prozent <= 1 Then Temp3 = "" Else Temp3 = "#"
For Temp2 = 1 To Temp1 Step 1
Temp3 = Temp3 + "#"
Next
Balken = Temp3 + " "
End Function
Lesezeichen