¿Cómo puedo invertir esto y hacer que el código comience en LED7, también conocido como el LED más a la izquierda, en lugar de LED1, y luego se desplace de izquierda a derecha?
Soy totalmente nuevo en la programación en lenguaje C y en el uso de Keil uVision en general, y recibí un ejercicio en el que tengo que invertir el siguiente código para que empiece en LED7, el LED más lejano a la izquierda, luego se desplace bit a bit hacia la derecha y vuelva, y así sucesivamente.
El código actual comienza en el lado derecho y se desplaza hacia la izquierda en un bucle. Cuando intenté invertir parte del código (por ejemplo, for(i=1;i>1;i++)
en i=7;i>7;i--
) y lo ejecuté, el primer LED del lado derecho se iluminó durante 0.5s y luego se detuvo.
Reinicia en intervalos aleatorios. ¿Qué debo hacer?
void Init_Device(void);
void main(void)
{
U8 port=0x01,i;
bit direction=0;
Init_Device();
initSYS();
LCD.setTextSize(3);
LCD.setCursor(80, 100);
printf("P1 = ");
while(1)
{
for(i=1;i>1;i++)
{
LCD.setCursor(160, 100);
LCD.printNumb(port);
printf(" = %d ", (int)port);
P1=~port;
delay_ms(500);
if(!direction)
port<<=1;
else
port>>=1;
}
direction=~direction;
}
}
davy.ai
Para comenzar la secuencia de LED desde LED7 (el LED más a la izquierda) y luego desplazarse bit a bit hacia la derecha y volver a LED7, la condición del bucle for debe cambiar de
for(i=1;i>1;i++)
afor(i=7;i>=0;i--)
. Esto hará que el bucle comience en LED7 y desplace los LED hacia la derecha y luego vuelva a LED7.La razón por la que el código hacía parpadear el primer LED a la derecha durante 0.5s y luego se detenía es que la condición
i>1
en el código original siempre era verdadera, lo que causaba un bucle infinito. Cambiar esto ai>=0
hará que el bucle se ejecute exactamente 8 veces (para los 8 LED) antes de detenerse.Además del cambio en el bucle for, la condición
if(!direction)
debe actualizarse aif(direction==0)
y la condiciónelse
debe actualizarse aelse if(direction==1)
para asegurar que la dirección de la secuencia de LED se controle correctamente.El código actualizado sería el siguiente: