Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 10156|Odgovoriti: 0

Pic16F877a poganja temperaturni in vlažni senzor DHT11

[Kopiraj povezavo]
Objavljeno na 25. 11. 2014 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // Uporabite 12M kristalni oscilator
#include"12864.h"
#define unsigned int
#define uchar nepodpisani char
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, preverjeno;
uint delay_time;
praznina timer0_init()
{
   TMR0=0;  Prva vrednost
   T0CS=0;  Izberite vir ure, ki je 1/4 kristalnega oscilatorja;
   T0SE=1;   Biti izbire robov vira ure
   PSA=0;    Predivider alokacijske bite
   PS0=0; PS1=0; PS2=0;  Izbirni biti pred delitvijo
   TMR0IF=0;    Zastavica časovnika je jasna 0
   GIE=1;       Odpri globalno prekinitev
   TMR0IE=0;    Omogočen časovnik 0
   TMR0=236;    Prva vrednost pesmi
}
void interrupt timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
praznina timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    while(delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
uchar i, temp, hum;
   for(i=0; i<8; i++)   
    {
       medtem ko (! RC1);   
       timer0_delay(2); Zamuda 20us  
       temp=0;
       if(RC1){temp=1; medtem ko (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   return(hum);
}
void Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); Avtobus potegne navzdol vsaj 18 MS
RC1=1;
timer0_delay(2); Vodilo potegne upor navzgor, zakasnitev gostitelja pa je 20us
TRISC1=1;     Gostitelj je nastavljen na vhod, da oceni signal odziva podrejenega
RC1=1;
  if(! RC1)
  {
   medtem ko ((! RC1)) // Določite, ali podrejeni signal oddaja 80us signal z nizkim odzivom ali ne
   {
    NOP();
   }
   while(RC1) // Določite, ali podrejeni oddaja visoko raven 80us, in če da, vstopi v stanje prejemanja podatkov
   {
    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;
}
void main()
{
  TRISB=0X00;
  lcdinit();
  timer0_init();
  medtem ko (1)
  {
   Read_data();
  }
}[/mw_shl_code]




Prejšnji:Misel in golo programiranje [serijsko]
Naslednji:Socialne ugodnosti, pravila poimenovanja v jeziku C, zelo praktične stvari
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com