Cómo utilizar los botones del microcontrolador para controlar la marquesina ciclista
Se me ocurrió escribir un programa de este tipo, consúltelo, espero que le resulte útil
/*Conexión del circuito de hardware: la lámpara de agua corriente está conectada al Puerto P0 y el ánodo está conectado a nivel alto.
El cátodo está conectado al puerto P0 y los cuatro botones están conectados a P3.4, P3.5, P3.6, P3. 7 respectivamente cuando se presiona, es de nivel bajo*/
#include lt;
sbit key1=P3^4
sbit key2; =P3^5;
clave de bit3=P3^6;
clave de bit4=P3^7
int a[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // Conjunto de luces de agua corriente izquierda
int b[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe}; //Matriz de lámparas de agua que fluye hacia la derecha
int c[]={0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff}; //Enciende uno por uno, apaga la matriz uno por uno
//************************ ************************* **************************** ************************ *************
retraso nulo() p>
//Retraso de subrutina
{int i;
for(i=0;ilt;30000;i);
} p>
//************************ ********************** **************************************************** *******************
void aa() //Subrutina para implementar el requisito (1) (la luz del agua fluirá cuando se presione la tecla 1, y todas las luces se apagarán cuando aparezca)
{ int i=0;
while(!key1) //Determina si se presiona una tecla
{P0=a[i]; retraso(); i; if(i==8)i=0;}//Lámpara de agua que fluye
}
// **************************************** ********** ***************************************** ********** *************
void bb() // Implementa la subrutina del requisito (2) (la función de conteo se realiza cuando se presiona la tecla 2, deja de contar cuando aparece; )
{
while(!key2){P0--;delay();if(P0==0)P0=0xff;} // Determina si se presiona una tecla Cuando se presiona, el contador aumenta en 1
}
//*********************** **. ************************************************* * **************************************
void cc() // Implementa la subrutina del requisito (3) (cuando se presiona la tecla 3, las luces se encenderán y apagarán una por una).
{ int i=0;
P0=0xff; // Todos los LED están apagados
while(!key3) // Determina si se presiona una tecla
{P0=c[i] ; delay( ); i ; if (i==16)i=0; }//Enciende uno por uno, apaga uno por uno
}
//* ***** ********************************************** ****** ********************************************** ******* ***
void dd() // Implementar la subrutina del requisito (4) (presione la tecla 4 por primera vez, el agua fluye hacia la izquierda, presione por segunda vez , el agua fluye hacia la derecha y presiona por tercera vez, se apaga)
{ int i=0, j=0, k=0, h=0;
bucle: P0=0xff;
if( key4==0)
//Juzga si se presiona una tecla por primera vez
{for(i=0 ;ilt;30000;i); //Mover anti-vibración retrasado
if(key4==1)
//Determina si la tecla rebota
while(1){P0=a[j]; retraso( ); j ; if(j==8)j=0; //Lámpara de agua corriente izquierda
if(key4==0)
//La segunda vez para determinar si hay una tecla Presione
{for(i=0;ilt;30000;i);
// Antivibración retardada
if(key4==1 )
//Juzga si el botón rebota
while(1){P0=b[k] ; delay();k; if(k==8)k=0 ; //Lámpara de agua corriente derecha
if(key4==0)
//La tercera vez para determinar si hay una tecla presionada
{for(i= 0;ilt;30000;i);
//Antivibración retardada
si (key4==1)
//Determinar si la tecla rebota Inicio
goto loop;
//Saltar a LOOP, es decir, P3=0xff , en este momento todas las luces están apagadas
}}}}}}
//********************* ********************** **************************** *********************** **********************
principal()
{mientras(1){P0=0xff;
mientras(!key1)aa();
mientras(!key2)bb( );
mientras(!key3)cc();
mientras(!key4)dd();
}}