The difference here is that "dije" is something that you did and it finished. Example: yo dije no cuando él me invitó a bailar" i said no when he invited to me....
When you say "he dicho" is something that you did but it continue for a period. Example: he dicho que no cada vez que él me invita a bailar pero él continúa invitándome... I've said no every time that he invited to me...but he continue inviting to me...
Something like that :)
Yo dije = I said
Yo he dicho = I've said
What did you say?
I said to you practice more Spanish.
What have you said?
I have said you were doing it good.
Was it clear?
we don't use to speak in Preterito imperfecto. but when we do. that means to me that even once (or more) you witnessed or lived that moment.
"dije" is a finished event and you will hear it more often
"yo escuché la canción" (finished action)
"yo he escuchado la canción" ( you have done it once or more times)
*for example if you have a complaint you could use preterito imperfecto:
"le he dicho que deje de gritar, pero no para de hacerlo"
But, as I told you above, if you just want to speak in past, the most common is to speak in simple past or past progressive.