7 segment count jump from 00 to 05
Your decrement control code above essentially debounces the input via the wait for release of the switch and blocking looped delays.

You should fix the while line-- the formatting makes it unclear .. Either 

while(SW3==1) LED1=1; 


.. or use curly braces if it's on another line..

A decent guess might be that your missing increment code does not work this way and switch bounce is causing multiple increments for each switch operation.

If you don't know about switch bounce- when contacts close (and to some extent when they open) the resistance does not suddenly drop from extremely high to extremely low like a clean square wave edge. The contacts are chunks of metal and they bang into each other and literally bounce open and closed a few times on the scale of milliseconds or so.



When they open there can be mechanical vibration modes in the kHz range that cause a similar 'dirty' edge.  While you won't notice that at a human scale of perception, it's quite possible for a microcontroller to interpret the edges as many switch operations. The solutions have been covered well-- both here and elsewhere-- firmware is my preferred method but it can also be solved in hardware. One crude way is to simply ignore the switch for some tens of milliseconds after a change is detected.