Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 10156|Vastaus: 0

pic16f877a ohjaa lämpötila- ja kosteusanturia DHT11

[Kopioi linkki]
Julkaistu 25.11.2014 22.12.09 | | |
[mw_shl_code=c,true]#include<pic.h> // Käytä 12M-kideoskillaattoria
#include"12864.h"
#define unsigneerattu int
#define uchar, allekirjoittamaton 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;  Ensimmäinen arvo
   T0CS=0;  Valitse kellolähde, joka on 1/4 kideoskillaattorista;
   T0SE=1;   Kellon lähteen reunavalintabitit
   PSA=0;    Esijakajan allokointibitit
   PS0=0; PS1=0; PS2=0;  Ennen divisioonan valintajaksoja
   TMR0IF=0;    Ajastinlippu on tyhjä 0
   GIE=1;       Avaa globaali keskeytys
   TMR0IE=0;    Ajastin 0 käytössä
   TMR0=236;    Runon ensimmäinen arvo
}
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++)   
    {
       while(! RC1);   
       timer0_delay(2); Delay 20us  
       temp=0;
       if(RC1){temp=1; while(RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=lämpötila;                           
  }
   return (hum);
}
void Read_data()
{
Uchar ckeck_value;
RC1=0;
timer0_delay(2500); Bussia vedetään alaspäin vähintään 18 mailia
RC1=1;
timer0_delay(2); Väylä vedetään ylös vetovastuksen avulla, ja isäntäviive on 20us
TRISC1=1;     Isäntä on asetettu syötteeseen arvioimaan orjavastesignaalia
RC1=1;
  if(! RC1)
  {
   kun ((! RC1)) // Määritä, lähettääkö orja 80us matalavastesignaalia vai ei
   {
    NOP();
   }
   while(RC1) // Määritä, lähettääkö orja korkean tason 80us, ja jos on, se siirtyy datan vastaanottotilaan
   {
    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]




Edellinen:Ajattelua ja alastonta ohjelmointia [Sarjamuotoinen]
Seuraava:Sosiaalietuudet, C-kielen nimeämissäännöt, hyvin käytännöllisiä asioita
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com