Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 10156|Απάντηση: 0

Το pic16f877a οδηγεί τον αισθητήρα θερμοκρασίας και υγρασίας DHT11

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 25/11/2014 10:12:09 μ.μ. | | |
[mw_shl_code=c,true]#include<pic.h> // Χρησιμοποιήστε κρυσταλλικό ταλαντωτή 12M
#include"12864.h"
#define uint ανυπόγραφο int
#define uchar ανυπόγραφο char
__CONFIG(FOSC_HS&WDTE_OFF&LVP_OFF)·
uchar temp_valueH,hum_valueH,hum_valueL,temp_valueL,έλεγχος;
uint delay_time;
άκυρο timer0_init()
{
   TMR0=0;  Πρώτη τιμή
   T0CS=0;  Επιλέξτε την πηγή ρολογιού, η οποία είναι το 1/4 του ταλαντωτή κρυστάλλου.
   T0SE=1;   Bit επιλογής άκρων πηγής ρολογιού
   PSA=0;    Bit κατανομής προδιαιρέτη
   ΥΓ0=0; ΥΓ1=0; ΥΓ2=0;  Κομμάτια επιλογής πριν από τη διαίρεση
   TMR0IF=0;    Η σημαία του χρονοδιακόπτη είναι σαφής 0
   GIE=1;       Άνοιγμα της καθολικής διακοπής
   TMR0IE=0;    Ενεργοποιημένος χρονοδιακόπτης 0
   TMR0=236;    Η πρώτη αξία του ποιήματος
}
Void Interrupt Timer0()
{
     αν(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
άκυρο timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    ενώ(delay_time);
    TMR0IE=0;
}
Ουχάρ Read_byte()
{
uchar i,temp,hum;
   for(i=0; i<8; i++)   
    {
       ενώ(! RC1)·   
       timer0_delay παράγραφος 2· Καθυστέρηση 20us  
       θερμοκρασία=0;
       if(RC1){temp=1; ενώ(RC1); }
       else{temp=0; }   
       βουητό<<=1;
       hum|=temp;                           
  }
   επιστροφή(βουητό);
}
άκυρο Read_data()
{
Ουχάρ ckeck_value;
RC1=0;
timer0_delay(2500); Το λεωφορείο έχει τραβηχτεί από τουλάχιστον 18 MS
RC1=1;
timer0_delay παράγραφος 2· Ο δίαυλος τραβιέται προς τα πάνω από την αντίσταση έλξης και η καθυστέρηση του κεντρικού υπολογιστή είναι 20us
ΤΡΙΣΚ1=1;     Ο κεντρικός υπολογιστής έχει ρυθμιστεί σε είσοδο για να κρίνει το σήμα απόκρισης slave
RC1=1;
  Αν(! RC1)
  {
   ενώ((! RC1)) // Προσδιορίστε εάν το slave εκπέμπει σήμα χαμηλής απόκρισης 80us ή όχι
   {
    ΝΟΠ();
   }
   while(RC1) // Προσδιορίστε εάν το slave εκπέμπει υψηλό επίπεδο 80us και, εάν ναι, εισέρχεται στην κατάσταση λήψης δεδομένων
   {
    ΝΟΠ();
   }
   temp_valueH=Read_byte();
   temp_valueL=Read_byte();
   hum_valueH=Read_byte();
   hum_valueL=Read_byte();
   έλεγχος=Read_byte();
   ckeck_value=hum_valueL+hum_valueH+temp_valueL+temp_valueH;
  if(έλεγχος==ckeck_value)
   {
      Proce_num(0x84,temp_valueH)·
      Proce_num(0x94,hum_valueH)·
   }
  }
  ΤΡΙΣΚ1=0;
  RC1=1;
}
κενό κύριο()
{
  TRISB=0X00;
  lcdinit();
  timer0_init();
  ενώ(1)
  {
   Read_data();
  }
}[/mw_shl_code]




Προηγούμενος:Σκέψη και γυμνός προγραμματισμός [σειριακό]
Επόμενος:Επιδόματα πρόνοιας, κανόνες ονομασίας στη γλώσσα C, πολύ πρακτικά πράγματα
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com