¿Cómo mostrar la señal de pulso de lengüeta al 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> 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);
}
}
}