Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar los botones del microcontrolador para controlar la marquesina ciclista

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()

//Retraso de subrutina

{int i;

for(i=0;ilt;30000;i);

}

//************************ ********************** **************************************************** *******************

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();

}}