Disculpa jamasari, por mi gran demora, la verdad que el mes de julio no fue tan bueno y me mantuvo muy ocupado fuera de la computadora casi.
voy a tratar de explicar lo que hace xcol, espero que pueda hacerme entender.
es una variable que representa la fila que debemos encender en el cartel y para comprobar si el bit de una fila se debe encender o no.
para eso te voy a hacer la pequeña descripcion de esa parte del codigo
for(xcol=0x01;xcol<0x08;xcol++) //con este bucle estamos viendo que fila vamos a encender.
{
for (i=37;i>0;i--) //con este otro veremos que columna estamos analizando.
{
col=columnas[i-1]; //aqui cargamos en esta variable el valor de la columna que querramos usar
delay_us(2);
bt=bit_test (col, xcol); //aqui testeamos el estado de un bit de la variable col que se cargo con los datos de la variable columna, y de ahi decimos que bit de los 8 queremos ver su estado, si es la primera vez testearemos el primer bit y lo almacenamos en la variable bt
delay_us(2);
portb=0x00; //aqui apagamos el puerto b
switch(bt) //luego dependiendo de ese estado en bt entramos a este switch y lo unico que hara es cargar en el registro de desplazamiento el correspondiente uno o cero
{
case 0x00 :output_low(PIN_D1);delay_us(1);output_low(PIN_C3);delay_us(1);output_high(PIN_C3);delay_us(1);output_low(PIN_C3);delay_us(1); break;
case 0x01 :output_high(PIN_D1);delay_us(1);output_low(PIN_C3);delay_us(1);output_high(PIN_C3);delay_us(1);output_low(PIN_C3);delay_us(1); break;
}
}
portb=0x00;
switch(xcol) //por ultimo entramos en este otro switch y consultamos que fila debe encenderse (lo se lo se, tuviera que decir xfil y no xcol es confuso)
{
case 0x01: portb=0x02;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x02: portb=0x04;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x03: portb=0x08;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x04: portb=0x10;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x05: portb=0x20;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x06: portb=0x40;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
case 0x07: portb=0x80;delay_ms(2);portb=0x00;delay_us(100);output_low(PIN_D0);delay_us(1);output_high(PIN_D0);delay_us(1);break;
}
portb=0x00;
}
y la verdad que con_Caracter ya me olvide que era lo que hacia, porque hace mucho que no leo el código, pero si uno lo empieza a simular paso a paso en proteus, te puedo asegurar que enseguida lo podes entender.
pero servia para indicar al programa que debe proseguir a buscar el siguiente caracter para cargar en el cartel. pero intenta lo que digo, que no es muy dificil entender ese pedazo de codigo.
Saludos. Y espero que pueda haberte ayudado un poco.