Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 10156|Răspunde: 0

pic16f877a controlează senzorul de temperatură și umiditate DHT11

[Copiază linkul]
Postat pe 25.11.2014 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // Folosește oscilatorul cu cristal de 12M
#include"12864.h"
#define uint unsigned int
#define uchar personaj nesemnat
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, verificat;
uint delay_time;
void timer0_init()
{
   TMR0=0;  Prima valoare
   T0CS=0;  Selectează sursa de ceas, care reprezintă 1/4 din oscilatorul de cristal;
   T0SE=1;   Biți de selecție a marginii sursei de ceas
   PSA=0;    Biți de alocare a predivizorului
   PS0=0; PS1=0; PS2=0;  Biți de selecție înainte de diviziune
   TMR0IF=0;    Steagul cronometrului este clar 0
   GIE=1;       Deschide întreruperea globală
   TMR0IE=0;    Timer 0 activat
   TMR0=236;    Prima valoare a poeziei
}
Întrerupere Void Timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
void timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    în timp ce (delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
uchar i, temp, hum;
   for(i=0; i<8; i++)   
    {
       în timp ce (! RC1);   
       timer0_delay(2); Întârziere 20us  
       temp=0;
       if(RC1){temp=1; while (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   revenire (hum);
}
void Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); Autobuzul este tras în jos de cel puțin 18 MS
RC1=1;
timer0_delay(2); Magistrala este trasă în sus de rezistența de pull-up, iar întârzierea gazdei este de 20us
TRISC1=1;     Gazda este setată să intre pentru a judeca semnalul de răspuns al sclavului
RC1=1;
  dacă(! RC1)
  {
   în timp ce (! RC1)) // Determină dacă sclavul emite un semnal de răspuns scăzut de 80us sau nu
   {
    NOP();
   }
   while(RC1) // Determină dacă sclavul emite un nivel ridicat de 80us și, dacă da, intră în starea de recepție a datelor
   {
    NOP();
   }
   temp_valueH=Read_byte();
   temp_valueL=Read_byte();
   hum_valueH=Read_byte();
   hum_valueL=Read_byte();
   verifică=Read_byte();
   ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH;
  if(bifat==ckeck_value)
   {
      Proce_num(0x84,temp_valueH);
      Proce_num(0x94,hum_valueH);
   }
  }
  TRISC1=0;
  RC1=1;
}
void main()
{
  TRISB=0X00;
  lcdinit();
  timer0_init();
  în timp ce (1)
  {
   Read_data();
  }
}[/mw_shl_code]




Precedent:Gândire și programare goală [Serializat]
Următor:Beneficii sociale, reguli de denumire în limba C, lucruri foarte practice
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com