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.
{
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)
{ p>
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,