Red de conocimiento informático - Conocimiento informático - Empecé a aprender sobre microcontroladores. Escribí un programa, pero el resultado no era consistente con mi diseño. El código fuente está aquí, ayúdenme a resolver el problema. Muchas gracias.

Empecé a aprender sobre microcontroladores. Escribí un programa, pero el resultado no era consistente con mi diseño. El código fuente está aquí, ayúdenme a resolver el problema. Muchas gracias.

mientras(K4=1)

{

P2=liang;

yanshi(600);

si(P2 == 0x00 )

liang=0xfe;

}

Mira lo que dijiste arriba. Si no presionas la tecla, el programa ejecutará el siguiente programa. repetidamente:

P2=liang;

yanshi(600);

if(P2 == 0x00)

liang=0xfe

Pero si presiona el botón, K4 se convertirá en 0

En este momento, la función principal saltará directamente y su microcontrolador también se agotará;

Esta es la primera vez que se ejecuta el programa.

No hablemos de si su programa es correcto o incorrecto. Debe comprender que el programa del microcontrolador debe ingresar en un bucle infinito, como se muestra a continuación:

mientras(1)

{

mientras(K4=1)

{

P2=liang;

yanshi(600);

si(K4=1)

si(K4=1)

si(P2=liang;

P2=liang;

yanshi(600);

if(P2=liang;

yanshi(600)).

if(P2 == 0x00 )

p>

liang=0xfe;

}

}

Por supuesto, su programa no se puede implementar, lo ayudaré modifíquelo:

liang = 0;

mientras(1)

{

mientras(K4 == 0)

{

P2=~(1<

yanshi(600). ); //-- -- retraso

liang++; //---- cambiar a la siguiente lámpara

liang &= 0x07; no puede ser mayor que 7 y el bit es 7, luego limite el valor liang a 0--7

}

}

Además, espero desarrollas un buen hábito:

No escribas x sin firmar de esta manera

Sé más específico y escribe un carácter x sin firmar, o una x corta sin firmar

Mira tu latencia:

void yanshi (unsigned x)

{

unsigned y = 600;

while(x--)

{

for(y; y>0; y--);

}

}

Porque estás usando unsigned y = 600, pero es un microcontrolador 51, por lo que probablemente esté optimizado para unsigned char

El resultado es unsigned char y = 600

De hecho, y no llegar a 600, porque el valor máximo es 255

Por lo tanto, asegúrese de especificar de qué tipo es,