Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 10156|Respuesta: 0

pic16f877a controla el sensor de temperatura y humedad DHT11

[Copiar enlace]
Publicado en 25/11/2014 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // Usar oscilador de cristal de 12M
#include"12864.h"
#define uint unsigned int
#define uchar personaje sin firmar
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, comprobado;
uint delay_time;
void timer0_init()
{
   TMR0=0;  Primer valor
   T0CS=0;  Seleccione la fuente de reloj, que es 1/4 del oscilador de cristal;
   T0SE=1;   Bits de selección de bordes de la fuente de reloj
   PSA=0;    Bits de asignación del predivisor
   PS0=0; PS1=0; PS2=0;  Bits de selección previos a la división
   TMR0IF=0;    La bandera del temporizador está limpia 0
   GIE=1;       Abre la interrupción global
   TMR0IE=0;    Temporizador 0 activado
   TMR0=236;    El primer valor del poema
}
interrupción void timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
Void timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    mientras que (delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
uchar i, temp, hum;
   para (i=0; i<8; i++)   
    {
       ¡Mientras tanto(! RC1);   
       timer0_delay(2); Retraso 20us  
       temp=0;
       if(RC1){temp=1; mientras que (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   return (hum);
}
void Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); El autobús es arrastrado por al menos 18 MS
RC1=1;
timer0_delay(2); El bus es tirado hacia arriba por la resistencia de pull-up y el retardo del host es de 20us
TRISC1=1;     El host está configurado para entrar y juzgar la señal de respuesta del esclavo
RC1=1;
  ¡si(! RC1)
  {
   mientras que ((! RC1)) // Determinar si el esclavo emite una señal de respuesta baja de 80 US o no
   {
    NOP();
   }
   while(RC1) // Determinar si el esclavo emite un nivel alto de 80us y, en caso afirmativo, entra en el estado receptor de datos
   {
    NOP();
   }
   temp_valueH=Read_byte();
   temp_valueL=Read_byte();
   hum_valueH=Read_byte();
   hum_valueL=Read_byte();
   jaque=Read_byte();
   ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH;
  if(check==ckeck_value)
   {
      Proce_num(0x84,temp_valueH);
      Proce_num(0x94,hum_valueH);
   }
  }
  TRISC1=0;
  RC1=1;
}
void main()
{
  TRISB=0X00;
  lcdinit();
  timer0_init();
  mientras que (1)
  {
   Read_data();
  }
}[/mw_shl_code]




Anterior:Pensamiento y programación desnuda [Serializado]
Próximo:Prestaciones sociales, normas de denominación en lengua C, cosas muy prácticas
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com