Codificación de fuente musical con microcontrolador 51
La función realiza la recopilación de señales de audio a través del chip ADC0832, las convierte en señales digitales para el microcontrolador y luego utiliza la modulación de ancho de pulso PWM para controlar la altura del par de columnas de agua de la bomba de agua
//Comprenda primero el protocolo serial de conversión digital del módulo ADC0832, lea esta función nuevamente, principalmente para comprenderla de acuerdo con el diagrama de tiempos. Esta función simula el protocolo serial de 0832
/. / 1 1 0 canal
// 1 1 1 canal
carácter sin firmar ad0832read(bit SGL, bit ODD)
{undefinido
carácter sin firmar i=0, valor=0, valor1 =0;
SCL=0
DO=1
CS=0; Inicio
SCL=1; //El primer flanco ascendente
SCL=0
DO=SGL
SCL=1; ; //El segundo flanco ascendente
SCL=0;
DO=ODD;
SCL=1;
SCL=0; // El tercer flanco descendente
DO=1;
for(i=0; ilt; 8; i )
{undefinido
SCL=1;
SCL=0; //Comienza a recibir datos desde el cuarto flanco descendente
valuelt;lt;=1; p>
if( DO)
valor;
}
for(i=0; ilt; 8; i)
{//recibiendo datos de la prueba escolar
valor1gt;gt;=1;
if(DO)
valor1 =0x80;
SCL=1;
SCL=0;
}
CS=1; >
SCL=1 ;
if(value==value1)//Comparar con los datos de verificación, devolver los datos si son correctos, de lo contrario devolver 0
valor de retorno ;
devuelve 0 ;
}
void penquan() //Regulación de voltaje PWM
{undefinido
date=ad0832read(1, 0); //Leer valor del anuncio
h1=(255-date); //Convertir
out=0;
delay(h1 );
if(h1gt;70) led1=1; else led1=0; //la comparación del valor del anuncio enciende la lámpara correspondiente
if(h1gt;80) led2=1 ; else led2=0; //la comparación del valor del anuncio enciende la luz correspondiente
if(h1gt;90) led3=1; la comparación del valor del anuncio enciende la luz correspondiente
p>if(h1gt;100) led4=1; else led4=0; //La comparación del valor del anuncio enciende la lámpara correspondiente
if (h1gt;110) led5=1; else led5= 0; //la comparación del valor del anuncio enciende la luz correspondiente
if(h1gt;115) led6=1; comparación enciende la luz correspondiente
if(h1gt; 120) led7=1; else led7=0;
La comparación de valores enciende la luz correspondiente
if(h1gt; 130) led8=1; else led8=0; //la comparación de valores de anuncios enciende la luz correspondiente
out=1; //Apagar la bomba de agua
delay(date); //Tiempo de retraso
}
void main()//Función principal
{undefinido
mientras(1)
{undefinido
penquan(); //número dado de retrasos
}
}
(Reimpreso en CSDN)