I actually have no experience with ASM.
But 'i think' in ur case,
if u make a single key press, then also, it may toggle many times because u cant keep the switch ON for such a very small interval ie u need to press key and after checking the status, then the switch must be OFF at least just before the next switch status check, but this is practically impossible. So , now , it will toggle like "TOSSING A COIN", 'i think so'
Then, what u need is, u need to introduce a delay if u detected a switch ON . U can give this aprox 50ms so that i think it will work . But still, if u press the switch continuously then it will toggle continuously with delay 50ms.
More over, since it is a mechanical switch, it will 'bounce' for a small interval of time after switching ON. At these interval, the status of switch can be 1 or 0. (random). So u must be bothered about these things....