Deine Code läuft einfach viel zu schnell durch, du musst ihn auf eine sinnvolle Geschwindigkeit bremsen.
Sinnvoll ist da sowas im Bereich von 50-100 Durchläufen pro Sekunde.

Das schreit nach einem Timer.
Der Timer müsste dann für 100Hz Bildwiederholungsrate mit 5*100 Hz die nächste Spalte aufrufen.
So bleibt denn die Spalte auch eine Zeit lang an und wird nicht sofort wieder abgeschaltet