Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 10156|Odpověď: 0

Pic16F877a řídí teplotní a vlhkostní senzor DHT11

[Kopírovat odkaz]
Zveřejněno 25.11.2014 22:12:09 | | |
[mw_shl_code=c,true]#include<obraz.h> // Použijte 12M krystalový oscilátor
#include"12864.h"
#define unsigned int
#define Uchar nepodepsaný char
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
Uchar temp_valueH, hum_valueH, hum_valueL, temp_valueL, zaškrtnuto;
uint delay_time;
void timer0_init()
{
   TMR0=0;  První hodnota
   T0CS=0;  Vyberte zdroj hodin, což je 1/4 krystalového oscilátoru;
   T0SE=1;   Bity výběru hran hodinového zdroje
   PSA=0;    Bity alokace predividéru
   PS0=0; PS1=0; PS2=0;  Předdělovací výběrové bity
   TMR0IF=0;    Vlajka časovače je jasná 0
   GIE=1;       Otevřete globální přerušení
   TMR0IE=0;    Časovač 0 aktivován
   TMR0=236;    První hodnota básně
}
void interrupt timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
prázdnota 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++)   
    {
       while(! RC1);   
       timer0_delay(2); Zpoždění 20 nás  
       temp=0;
       if(RC1){temp=1; while(RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   return(hum);
}
prázdnota Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); Autobus je stažen dolů minimálně o 18 MS
RC1=1;
timer0_delay(2); Sběrnice je vytažena pull-up rezistorem a host delay je 20us
TRISC1=1;     Hostitel je nastaven na vstup, aby posuzoval signál odezvy slave
RC1=1;
  if(! RC1)
  {
   zatímco ((! RC1)) // Určit, zda slave vysílá signál s nízkou odezvou 80us nebo ne
   {
    NOP();
   }
   while(RC1) // Určete, zda slave vysílá vysokou úroveň 80us, a pokud ano, vstupuje do stavu přijímání dat
   {
    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();
  zatímco (1)
  {
   Read_data();
  }
}[/mw_shl_code]




Předchozí:Myšlení a nahé programování [seriálové]
Další:Sociální dávky, pravidla pro pojmenování jazyka C, velmi praktické věci
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com