Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 10156|Válasz: 0

pic16f877a vezeti a hőmérséklet- és páratartalom érzékelőt, DHT11-et

[Linket másol]
Közzétéve 2014. 11. 25. 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // 12M kristályoscillátort használj
#include"12864.h"
#define unsigned int
#define Uchar aláíratlan char
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
uchar temp_valueH,hum_valueH,hum_valueL,temp_valueL,ellenőrzés;
uint delay_time;
Void timer0_init()
{
   TMR0=0;  Első érték
   T0CS=0;  Válaszd ki az órajel forrást, amely a kristályoszcillátor 1/4-e;
   T0SE=1;   Órajel forrás élválasztó bitek
   PSA=0;    Előosztó allokációs bitek
   PS0=0; PS1=0; PS2=0;  Osztály előtti válogatói részek
   TMR0IF=0;    Az időzítő zászló tiszta, 0
   GIE=1;       Nyisd meg a globális megszakítást
   TMR0IE=0;    Időzítő 0 engedélyezve
   TMR0=236;    A vers első értéke
}
void interrupt timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
Void timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    miközben (delay_time);
    TMR0IE=0;
}
uchar Read_byte()
{
uchar i, temp, hum;
   for(i=0; i<8; i++)   
    {
       miközben (! RC1);   
       timer0_delay(2); Késlelés 20us  
       temp=0;
       if(RC1){temp=1; míg (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=hőmérséklet;                           
  }
   return (zúgás);
}
Void Read_data()
{
uchar ckeck_value;
RC1=0;
timer0_delay(2500); A buszt legalább 18 MS húzza le
RC1=1;
timer0_delay(2); A buszt a húzóellenállás húzza fel, és a host késleltetés 20us
TRISC1=1;     A gazda bemenetre van állítva, hogy megítélje a slave válaszjelet
RC1=1;
  ha(! RC1)
  {
   miközben ((! RC1)) // Határozd meg, hogy a slave 80us alacsony válaszú jelet bocsát-e ki vagy sem
   {
    NOP();
   }
   while(RC1) // Határozd meg, hogy a slave magas, 80us szintet bocsát-e ki, és ha igen, akkor belép az adatvevő állapotba
   {
    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();
  while(1)
  {
   Read_data();
  }
}[/mw_shl_code]




Előző:Gondolat és meztelen programozás [sorozatos]
Következő:Jóléti juttatások, C nyelvi elnevezési szabályok, nagyon gyakorlati dolgok
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com