Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 10156|Répondre: 0

pic16f877a pilote le capteur de température et d’humidité DHT11

[Copié le lien]
Publié sur 25/11/2014 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // Utiliser un oscillateur à cristal 12M
#include"12864.h »
#define uint unsigned int
#define uchar non signé
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF) ;
uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, vérifié ;
uint delay_time ;
void timer0_init()
{
   TMR0=0 ;  Première valeur
   T0CS=0 ;  Sélectionnez la source d’horloge, qui correspond à un quart de l’oscillateur à cristal ;
   T0SE=1 ;   Bits de sélection des bords de la source d’horloge
   PSA=0 ;    Bits d’allocation du prédiviseur
   PS0=0 ; PS1=0 ; PS2=0 ;  Bits de sélection avant division
   TMR0IF=0 ;    Le drapeau du minuteur est clair 0
   GIE=1 ;       Ouvrir l’interruption globale
   TMR0IE=0 ;    Minuterie 0 activée
   TMR0=236 ;    La première valeur du poème
}
Minuteur d’interruption du vide 0()
{
     if (TMR0IF)
     {
       TMR0IF=0 ; TMR0=235 ;
       delay_time-- ;
     }   
}
Void timer0_delay(uint delay_value)
{
    delay_time=delay_value ;
    TMR0IE=1 ;
    tandis que (delay_time) ;
    TMR0IE=0 ;
}
Uchar Read_byte()
{
uchar i, temp, hum ;
   pour(i=0 ; i<8 ; i++)   
    {
       pendant que ( ! RC1) ;   
       timer0_delay(2) ; Delay 20us  
       temp=0 ;
       if(RC1){temp=1 ; tandis que (RC1) ; }
       else{temp=0 ; }   
       hum<<=1 ;
       hum|=temp ;                           
  }
   retour (hum) ;
}
void Read_data()
{
Uchar ckeck_value ;
RC1=0 ;
timer0_delay(2500) ; Le bus est tiré vers le bas par au moins 18 MS
RC1=1 ;
timer0_delay(2) ; Le bus est tiré vers le haut par la résistance de tirage et le délai de l’hôte est de 20us
TRISC1=1 ;     L’hôte est configuré pour entrer afin de juger le signal de réponse de l’esclave
RC1=1 ;
  if( ! RC1)
  {
   pendant que ( ! RC1)) // Déterminer si l’esclave émet un signal de faible réponse de 80 US ou non
   {
    NOP() ;
   }
   while(RC1) // Déterminer si l’esclave émet un niveau élevé de 80us, et si oui, il entre dans l’état de réception des données
   {
    NOP() ;
   }
   temp_valueH=Read_byte() ;
   temp_valueL=Read_byte() ;
   hum_valueH=Read_byte() ;
   hum_valueL=Read_byte() ;
   check=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 ;
}
Main() du vide
{
  TRISB=0X00 ;
  lcdinit() ;
  timer0_init() ;
  tandis que (1)
  {
   Read_data() ;
  }
}[/mw_shl_code]




Précédent:Pensée et programmation nue [Sérialisé]
Prochain:Aides sociales, règles de dénomination en langue C, des choses très pratiques
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com