I have a tip to avoid key-repeat: The way you're doing it, you can press down and it will move down once, but then you can press another button while down is still pressed and it'll move down again because the SceCtrlData has changed.
I suggest doing this:
unsigned long keysPressed = (pad.Buttons ^ oldpad.Buttons) & pad.Buttons ;
keysPressed will then be a bunch of bit-flags, like pad.Buttons, only it contains the buttons that have just been pressed. Therefore, you can do this:
if (keysPressed & PSP_CTRL_CROSS) {...}
to check if X has been pressed (it will only be true once for each button press).