Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 10156|Atsakyti: 0

pic16f877a valdo temperatūros ir drėgmės jutiklį DHT11

[Kopijuoti nuorodą]
Paskelbta 2014-11-25 22:12:09 | | |
[mw_shl_code=c,true]#include<pic.h> // Naudokite 12M kristalinį osciliatorių
#include"12864.h"
#define uint unsigned int
#define uchar nepasirašytas char
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF);
uchar temp_valueH,hum_valueH,hum_valueL,temp_valueL,check;
uint delay_time;
Void timer0_init()
{
   TMR0=0;  Pirmoji vertė
   T0CS=0;  Pasirinkite laikrodžio šaltinį, kuris yra 1/4 kristalinio osciliatoriaus;
   T0SE=1;   Laikrodžio šaltinio krašto pasirinkimo bitai
   PSA = 0;    Išankstinio skirstytuvo paskirstymo bitai
   PS0=0; PS1=0; PS2=0;  Išankstinio padalijimo atrankos antgaliai
   TMR0IF=0;    Laikmačio vėliavėlė aiški 0
   GIE = 1;       Atidarykite visuotinį pertraukimą
   TMR0IE = 0;    Laikmatis 0 įjungtas
   TMR0=236;    Pirmoji eilėraščio vertė
}
Void Interrupt Timer0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
void 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++)   
    {
       Nors (! RC1);   
       timer0_delay straipsnio 2 dalis; Vėlavimas 20us  
       temp=0;
       if(RC1){temp=1; while (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   grįžimas (dūzgimas);
}
negaliojantis Read_data()
{
uchar ckeck_value;
RC1 = 0;
timer0_delay(2500); Autobusas traukiamas mažiausiai 18 MS
RC1 = 1;
timer0_delay straipsnio 2 dalis; Autobusas traukiamas iki traukimo rezistorius ir šeimininko vėlavimas yra 20us
TRISC1=1;     Pagrindinis kompiuteris nustatytas įvesties, kad būtų galima įvertinti vergų atsako signalą
RC1 = 1;
  jei(! RC1)
  {
   Nors ((! RC1)) // Nustatykite, ar vergas skleidžia 80us mažo atsako signalą, ar ne
   {
    NOP ();
   }
   while (RC1) // Nustatykite, ar vergas skleidžia aukštą 80us lygį, ir jei taip, jis patenka į duomenų priėmimo būseną
   {
    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 ();
  nors (1)
  {
   Read_data();
  }
}[/mw_shl_code]




Ankstesnis:Mintis ir nuogas programavimas [Serializuota]
Kitą:Socialinės išmokos, C kalbos pavadinimų taisyklės, labai praktiški dalykai
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com