Red de conocimiento informático - Material del sitio web - ¿Cómo mostrar la señal de pulso de lengüeta al tubo digital a través del microcontrolador?

¿Cómo mostrar la señal de pulso de lengüeta al tubo digital a través del microcontrolador?

La señal de pulso del interruptor de láminas se muestra en el tubo digital a través del microcontrolador;

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

*?Nombre del archivo :? TLC549.c

*? Descripción: Este programa realiza el control de TLC549. El voltaje se convierte en señal digital mediante TLC549 y se muestra mediante un tubo digital. En el trabajo real, cuando se muestrea AD, la señal AD generalmente se procesa antes de su uso. Recopile 30 veces aquí, elimine las 5 veces más grandes y más pequeñas y tome el promedio de las 20 veces del medio para garantizar la mayor precisión de los anuncios que se recopilarán.

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

#include

#include

¿#Definición? ¿Uchar? ¿No firmado? Té

#Definición? ¿sin firmar? int?

¿un poquito? AD_¿Fuera? =?p3^2; //terminal de salida TLC549

sbit? CS? =?p1^0;? //señal de selección de chip TLC549

sbit? ¿AD_In? =?p1^1;//Terminal de entrada TLC549

Uchar? ¿Código? ¿Tabla [10]? =?{0x03,? 0x9f,? 0x25,? 0x0d,? 0x99,? 0x49,? 0x41,? 0x1f? 0x01,? 0x 09 };

¿Uchar? ¿Código? tabla_d[10]? =?{0x02,? 0x9e,? 0x24,? 0x0c,? 0x98,? 0x48,? 0x40,? 0x1e,? 0x00,? 0x08};? //Usa una pantalla digital

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

*?Nombre? :?AD_Change(no válido)

*?Función? :?Controlador TLC549, explicado en "Videos y Tutoriales".

*?Entrar? :?No

*?¿Salida? :?Trabajadores temporales? (Valor de voltaje)

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

Uchar? AD_Change(no válido)

{

¿Uchar? ¿Yo, un trabajador temporal? =?0;

CS? =?0;

_ nop _();

_ nop _();

_ nop _();

_ nop _();

for(I = 0;?ilt8;?i)

{

AD_In? =?1;

_ nop _();

_ nop _();

¿Trabajadores temporales? =?Trabajador temporal? ¿Eh? 1;

¿Si (AD_Out?==?1)?¿Trabajador temporal? =?1;

AD_In? =?0;

_ nop _();

_ nop _();

}

CS? =?1;

¿Volver? temperatura;?

}

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

*?Nombre? :?retraso()

*?función? :?Procrastinación, ¿el tiempo de demora es? ¿1 ms? *?Triángulo invertido

*?Entrada? :?Triángulo invertido

*?¿Salida? :?No

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

¿Anulado? retraso(uint?del)

{

Uchar? I,? j;

for(I = 0;?i

for(j = 0;?j lt=148;?j )

;? p>

}

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

*?¿Nombre? dijo:? Valor()

*? ¿Funciona? Puede: método de filtrado promedio, tomar un * * * 30 datos, no promediar los cinco datos más grandes y más pequeños

. los dos del medio.

Entrada: 30 valores para procesar

Salida: Obtener un promedio >*************. ***************************************** ********** ***************/

uint?average(uint?buffer[30])

{

Uchar ?I,j;

uint?temperature;

for(I = 1;?ilt30;?i)///Primero Organice los treinta valores en toda la matriz de pequeño a grande.

for(j = 29;?j gt= I;?-j)

{

if(búfer[j-1]?gt?búfer Distrito[j])

{

¿Trabajadores temporales? =?Búfer[j-1];

Búfer[j-1]? =?búfer[j];

búfer[j]? =?Temperatura;

}

}

////Procesa la matriz, elimina un valor máximo y un valor mínimo, y toma los veinte valores del medio. valor promedio.

¿Trabajadores temporales? =?0;

for(I = 5;?i lt25;?i )

{

¿Trabajadores temporales? =?Buffer[I];

}?

¿Trabajadores temporales? =? (punto flotante) temperatura? /?20?0.5);

Devolución (temporal);

}

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

*?Nombre? explicar:? AD_Filter()

*?¿Trabajar? Chan: Los anuncios se recopilaron 30 veces y se filtraron.

*? ingresar:? ¿Treinta valores de colección de AD

*? Salida: valor del anuncio procesado.

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

uint? AD_Filter()

{

uint? ¿Búfer de fecha [30]? =?{0},?temperatura;?

¿Uchar? i;

for(I = 0;?i lt30;?i)

{

Búfer de fecha[i]? =?AD _ Cambio();

Retraso(1);? //Recopila una vez con un retraso de 1 ms. Puedes ajustar el horario aquí según tus necesidades laborales.

}

¿Trabajadores temporales? =?average(Fecha _ Buffer);

Retorno (temporal);

}

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

*?Nombre? :?Principal()

*?Función? :?Funciones principales

*?Entrada? :?No

*?¿Salida? :?No

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

¿Anulado? main()

{

uint? ¿I? =?0,temperatura?

¿uint? j;

P2? =?0x00

P1? =?0xff

mientras(1)

{

¿Trabajador temporal? =?AD _ Filtro();

j? =?Trabajador temporal? *?2;

for(I = 0;?i lt40;?i)?

{

¿P0? =?table_d[j? /?100];

P2? =?0x04

Retraso (10);

P0? =?Tabla[j/? 10??10];

P2? =?0x02

Retraso (10);

P0? =?Tabla[j? ?10];

P2? =?0x 01;

Retraso (10);

}

}

}