okay, remember that your picaxe is running at or greater than 4MHz, and the code is executing faster than you can move. IE: your pressing the button, but before you've lifted your finger its already got to the next check if the button is being pressed.
You have several options to deal with this.
The first, simpliest and easiest is to simply add a pause statement after each of the let pins lines.
This will mean that the code stops running long enough for you to remove your finger.
The other method you can use would be to write a seperate routine that keeps track of where you are up to, the state of the switch and updates the display only once every time the switch is pressed.
the code would be something like this:
Code:
updateDisp:
b0 = b0 * 2 OR 1
let pins = b0
previousState = 1
goto checkInput
checkInput:
if pin1 = 1 and previousState = 0 then updateDisp
if pin1 = 0 and previousState = 1 then previousState = 0
goto checkInput
Disclaimer is that this code was constructed in 5 minutes at midnight, i'm tired and it hasn't been tested, but that should be what you are looking for.
It continually checks the input, when the button is pressed it updates the display, but also updates a variable to indicate that the button has recently been pressed.
Once returing to the check input routine it then will not accept another button push until the button has been released. When it determines that the button has been released it resets the previous state variable and the system is ready to go again.