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