Control de Matriz LED 8x8 con Joystick Analógico

Tengo problemas con un código para controlar una matriz LED 8x8 con un joystick analógico.
Resulta que el código que hice está correcto pero un chistoso en mi clase copió el código y ahora lo tengo que cambiar todo.
No soy muy bueno programando, así que no tengo ideas de qué hacer. (Utilizo un PIC18F4550)
C:
unsigned int x, y;      //se declara a x y como enteros
#define sw1 PORTC.RC0
char i;
char h;
char m;

void main()
{
ADCON1=0x0D;   //configura los pines A0 Y A1 como entradas analogicas
TRISA=0XFF;   //puerto A como entradas analogicas
TRISB=0;  //puerto B como salida digital
TRISD=0;  //puerto D como salida digital

do{
                 if (sw1==1)
                 {
                        for (h=1;h<=10;h++)
                          {
                             PORTB=0B00000011;
                             PORTD=0B11100001;
                             Delay_ms(5);
                             PORTB=0B00000010;
                             PORTD=0B10101010;

                             Delay_ms(5);

                             PORTB=0B00000100;
                             PORTD=0B10101010;

                             Delay_ms(5);

                             PORTB=0B00001000;
                             PORTD=0B10000000;

                             Delay_ms(5);

                             PORTB=0B00010000;
                             PORTD=0B00001110;

                             Delay_ms(5);

                             PORTB=0B00100000;
                             PORTD=0B01000001;

                             Delay_ms(5);

                             PORTB=0B01000000;
                             PORTD=0B10101001;

                             Delay_ms(5);

                             PORTB=0B10000000;
                             PORTD=0B10001000;

                             Delay_ms(5);
                          }
                   }
                  else
                  {

x=ADC_Read(0)/128;  //lee el puerto analogico 0 y su valor lo divide entre 128, guardandolo como entero en x, ya que con esta división su minimo resultado es de 0 y su maximo resultado es 7
y=ADC_Read(1)/128;  //lee el puerto analogico 1 y su valor lo divide entre 128, guardandolo como entero en y......

PORTB= 0x01<<x;   //el valor en binario 00000001 hace un desplazamiento de x bits a la izquierda, ejemplo si x es 2, el resultado queda como 00000100 y lo imprime en el puerto B
PORTD= ~(0x01<<y); //el valor en binario 00000001 hace un desplazamiento de y bits a la izquierda, ejemplo si y es 7, el resultado queda como 10000000 y lo imprime en el puerto D
}     //aparte, complementa el valor resultante, ya que para la parte de las columnas necesitamos arrastrar un 0 logico, contrario a las filas que requiere un 1 logico
}
while(1)         ; //se repite de forma infinita
 
Arriba