Microcontrolador 51 (STC89C52RC) lee la temperatura del módulo y la humedad DHT11 adquisición de la señal de visualización digital

Microcontrolador 51 (STC89C52RC) lee la temperatura del módulo y la humedad DHT11 adquisición de la señal de visualización digital

Último fin de semana esposa me preguntó cuántos temperatura hogar. . . TM lo que sé, para alquilar un infierno tal, nada, supongo fuera de él, por supuesto, "TM" es que ahora añade ahora. . . ^ _ ^, Luego quería Antes de comprar un Frambuesa Pi 4B también compró una tarjeta de pan, una vez más recordar los conocimientos adquiridos en la universidad, en busca de la cuenta, le gustaría ser tal cosa, entonces, lo es. . . . . Una búsqueda en línea, más de 20 dólares puede comprar uno. . . . Pero como programador, es tan aficionado a tormento. . . También me gustaría alabar un poco de su propio dinero. . Y luego un poco más al fondo. . O (∩_∩) haha O ~

Sólo soy un desarrollador de software simple. . Para el hardware que poco conocimiento limita a la universidad y se graduó cuatro o cinco años, se había olvidado de, y usted está confiando en Baidu compartir el poder de Dios para ir y venir de conducción. . .

1. Productos Terminados

La temperatura del circuito de la izquierda, la derecha y la humedad de emulación de acabado son diferentes, el proceso de hacer cambiado, las simulaciones no se irán, los dos aumentos de los indicadores de alarma

2. preguntó a su esposa para su financiación (O (∩_∩) O)

3. Las órdenes de compra, el dispositivo

(Aquí no esperaba, para comprar el producto terminado puede ser $ 20, pero hay que hacer una cosa cada uno tenía para comprar tres veces en una sola .. entradas y salidas, publicó una foto de ella aquí sólo .., también compraron dos meses multímetro, alambre de hierro eléctrica .... todo tipo de dispositivos ... lo que un montón de todos modos .....)

 

4. Dibuje una versión diagrama de circuito de simulación Proteus8.6

(Baidu sustancialmente en el extremo, hay varios, esto es relativamente simple) Temperatura de izquierda, la humedad derecha

Proteus lenguaje de simulación de circuitos y C - Códigos de la Fuente

 programa

#include <reg51.h> 
#include <intrins.h>
 #define UCHAR unsigned char
 #define uint unsigned int 
la sbit los Datos = P3 ^ 6. ;        // definición líneas de datos 
UCHAR rec_dat [ 9. ];    // recepción de datos para la visualización array
 // LED Digital 0--9 
uint LED [ 10 ] = { 0xC0 , 0xF9 , 0xa4 , 0xB0 , 0x99 , 0x92 , 0x82 , 0xF8 , 0x80 , 0x90 };   



void Delay (uint n) 
{   
    uint x, y; 
   para (x = n; x> 0 ; x-- ) 
        para (y = 110 ; y> 0 ; Y- ); 
} 



Void write_com (uchar com) 
{ 
                           // rs = 0时输入指令 
        P2 = com; 
        retardo ( 5 ); 

} 



Void DHT11_delay_us (UCHAR n) 
{ 
    mientras que (- n); 
} 

Void DHT11_delay_ms ( uint z) 
{ 
   uint i, j;
   para (i = z; i> 0 ; i--)
       Para (J = 110 ; J> 0 ; J, ); 
} 

void DHT11_start () 
{ 
   el Data = 1. ; 
   DHT11_delay_us ( 2 ); 
   los datos = 0 ; 
   DHT11_delay_ms ( 30 );    // 18 ms de retardo por encima de 
   la de datos = 1. ; 
   DHT11_delay_us ( 30 ); 
} 

UCHAR DHT11_rec_byte ()       // recibir un byte 
{ 
   UCHAR I, DAT = 0 ;
   para (i = 0 ; I < . 8; I ++)     // Low recibe secuencialmente datos de 8 bits 
   {          
       el tiempo (los datos) ;!    /// / 50us bajo espera pasado 
      DHT11_delay_us ( 8. );      // retardo 60US, si es alta, los datos 1 de lo contrario 0 
      dat << = 1 ;            // cambio para hacer correctamente recibe datos de 8 bits, cuando cambio directo 0 
      IF (los datos == 1 )     // datos 1, de manera que la adición de 1 a los datos de recepción dat 1 
         = + DAT . 1 ;
       el tiempo (los datos);   // espera para el bajo de línea de datos     
    }  
     volver DAT; 
} 


// MS unidad de rutina de retardo 
void delay222 (unsigned intX) 
{ 
    unsigned int I, J; 

    para (I = X; I> 0 ; i-- )
         para (J = 110 ; J> 0 ; J, ); 
} 


// temperatura conjunto 
vacío SetTemperature (valor UCHAR) 
{ 

    // bits de desinstalados, el dígito de las decenas 
   int unitPlace = valor / 1. % 10 ;
    int tenPlace = valor / 10 % 10 ; 
    
    
    P0 = LED [tenPlace]; 
    P2 = 0x80 ; 
    delay222 ( . 3  );
    P2= 0x00 ; 
          
    P0 = LED [unitPlace]; 
    P2 = 0x40 ; 
    delay222 ( . 3 ); 
    P2 = 0x00 ; 
} 

// set humedad 
void SetHumidity (valor UCHAR) 
{ 

    // quitar la broca, el dígito de las decenas 
   int unitPlace = valor / . 1 % 10 ;
    int tenPlace = valor / 10 % 10 ; 
    
    
    P0 = LED [tenPlace]; 
    P2 = 0x20 ; 
    delay222 ( );. 3
    P2 = 0x00 ; 
          
    P0 = LED [unitPlace]; 
    P2 = 0x10 ; 
    delay222 ( 3. ); 
    P2 = 0x00 ; 
} 
void DHT11_receive ()       // recibido datos de 40 bits 
{ 
    UCHAR R_H, R_L, T_H, T_L, Rh, RL, TH, TL, el Revisar; 
    int Número; // frecuencia de parpadeo 
    int Cont2; 
    UCHAR tempValue; 
    UCHAR humidityValue; 


    Número = 20 es ; 
    Cont2 = 0 ; 

    DHT11_start ();



    Cont2 = 0 ;
     IF (los datos == 0 ) 
    { 
        el tiempo (los datos == 0 );    // wait sacó      
        DHT11_delay_us ( 40 );   // afirmar la demora 80US 
        R_H DHT11_rec_byte = ();     // recibir ocho alta humedad mordió   
        R_L DHT11_rec_byte = ();     // recibir ocho baja humedad   
        T_H DHT11_rec_byte = ();     // recibir altas temperaturas ocho   
        T_L DHT11_rec_byte = ();     // recibir ocho baja temperatura 
        el Revisar DHT11_rec_byte = (); // recibe el corregido bits 

        DHT11_delay_us (25  );    // End 

        IF ((R_L R_H + + + T_H T_L) == la Revisar)       // corrigió 
        { 
            RH = R_H; 
            RL = R_L; 
            TH = T_H; 
            TL = T_L; 
        } 

        / * procesamiento de datos, conveniente pantalla * / 
/ /         rec_dat [0] = '0' + (RH / 10);
 //         [. 1] rec_dat = '0' + (10% RH);
 //         rec_dat [2] = 'R & lt';
 //         [. 3] rec_dat = 'H';
 //         [. 4] rec_dat = '';
 //         rec_dat = [5]. '';
 //         rec_dat = '0' + (TH / 10) [6].;
//        rec_dat = '0' + (TH 10%) [7].;
 //         rec_dat = 'C' [8.]; 




        // leer la temperatura y la humedad 
             tempValue = RH; 
             humidityValue = TH; 
            
            el tiempo (Cont2 < Number) 
            { 
                // set temperatura 
                SetTemperature (tempValue);
                 // set humedad 
                SetHumidity (humidityValue); 

                Cont2 ++ ; 
            } 
    
            Cont2 = 0 ; 

    } 
} 



/ * se utiliza aquí LCD1602 para visualizar los datos recogidos, el controlador 51 LCD1602 familia de microcontroladores Bowen en bloggers no se explican en detalle * / 
void main () 
{ 
   uchar i;   

   mientras que ( 1 ) 
   {    

       DHT11_receive (); 
           
   } 
}

 

El programa y depurar circuitos tablero  

Comprado ambos un rojo dos ánodo común LED de 10 pies, el resultado no es limitante resistencia, un quemado, obligado a una vez más órdenes de compra, los resultados son malos, comprado dos cátodo común verde 18 pie, repugnantes, moscas de las estimaciones de soldadura puede comprender

6. despliegue del dispositivo de soldadura y la placa de circuitos

Durante la soldadura, se encontró a aumentar también un indicador de advertencia. Y luego soldar el indicador de dos alarma conectado a la P1.0 (temperatura) y P1.1 (humedad)

Porque no sería dibujar el cableado PCB, probablemente lo pone un poco, luego comenzó a soldar. . .

 

Realmente no Xiangman, repugnante, porque la compra equivocada, compró un total de 18 pies de tubo digital de 2 cátodo. . Se suelda en el caso, el dios del nivel limitado de derecho deriva directa. . . .

7. Muestra de productos

La temperatura se deja, la visualización correcta humedad se cambia entonces como digital, el programa también ha cambiado, y los nuevos indicadores de alarma

 

Circuito probablemente introducida

 

Supongo que te gusta

Origin www.cnblogs.com/JiYF/p/12555161.html
Recomendado
Clasificación