Ist das dein vollständiges Programm?
Wenn ja, dann fehlt da auf jeden Fall noch eine Do-Loop-Schleife.

So dem Problem mit den Balken:
Füge mal nach dem
Code:
Config Lcd = 16 * 1a

Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
noch ein initLCD ein. Dann kann schon mal helfen.
Des Weiteren; verwendest du wirklich einen 1MHz Quarz? Ist diese Einstellung falsch, kann es auch zu Fhelern kommen.

Mehr fällt mir gerade nicht ein.
Trotzdem will ich noch etwas allgemeines los werden: Es macht Sinn, dem Programm auch oprisch eine Struktur zu verpassen. Dann ist es deutlich leichter zu lesen.
Ein Vorschlag von mir (samt oben genannten Verbesserungsvorschlägen, Kommentierungen wird Bascom dir automatisch nach rechts rücken):
Code:
$regfile = "m8def.dat"
$crystal = 1000000 '1MHz Quarz

Config Lcd = 16 * 1a

Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
InitLCD

Config Pinb.1 = Input 'Pinb.1= Automatikschalter
Portb.1 = 1 'Pull-Up an
Config Pinb.2 = Input 'Pinb.3= handbetriebsschalter
Portb.2 = 1 'Pull-Up an
Config Pinb.3 = Input 'Pinb.2= testschalter
Portb.3 = 1 'Pull-Up an
Config Pinb.4 = Input 'Pinb.4= Anschalter ( Immer auf 0 )
Portb.4 = 1 'Pull-Up an

'---Start_Main-Program---
Do

If Pinb.4 = 0 Then
  Cls
  Locate 1 , 1
  Lcd "Power on"
End If

If Pinb.4 = Pinb.2 Then
  Cls
  Locate 1 , 1
  Lcd "Test"
End If

If Pinb.4 = Pinb.3 Then
  Cls
  Locate 1 , 1
  Lcd "Handbetrieb"
End If

If Pinb.4 = Pinb.1 Then
  Cls
  Locate 1 , 1
  Lcd "Automatik"
End if

Loop
'---End_Main-Program---

End
Viele Grüße,
jon