Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 10156|Отговор: 0

pic16F877A управлява сензора за температура и влажност DHT11

[Копирай линк]
Публикувано в 25.11.2014 г. 22:12:09 ч. | | |
[mw_shl_code=c,true]#include<pic.h> // Използвайте 12M кристален осцилатор
#include"12864.h"
#define uint unsigned int
#define uchar unsigned char
__CONFIG(FOSC_HS WDTE_OFF&LVP_OFF);
Учар temp_valueH,hum_valueH,hum_valueL,temp_valueL,проверено;
uint delay_time;
Void timer0_init()
{
   TMR0=0;  Първа стойност
   T0CS=0;  Изберете източника на часовника, който е 1/4 от кристалния осцилатор;
   T0SE=1;   Битове за избор на ръбове на източника на часовника
   PSA=0;    Битове за предварително разпределение на делители
   PS0=0; PS1=0; PS2=0;  Предварителни селекции
   TMR0IF=0;    Флагът на таймера е clear 0
   GIE=1;       Отворете глобалното прекъсване
   TMR0IE=0;    Таймер 0 активиран
   TMR0=236;    Първата стойност на стихотворението
}
Таймер за прекъсване на празнотата 0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
Void timer0_delay(uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    докато (delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
Учар I, временно, хъм;
   for(i=0; I<8; i++)   
    {
       докато(! RC1);   
       timer0_delay(2); Delay 20us  
       температура=0;
       if(RC1){temp=1; докато (RC1); }
       else{temp=0; }   
       hum<<=1;
       hum|=temp;                           
  }
   return(hum);
}
Void Read_data()
{
uchar ckeck_value;
RC1=0;
timer0_delay(2500); Автобусът е свален поне от 18 MS
RC1=1;
timer0_delay(2); Шината се дърпа нагоре от резистора за издърпване и забавянето на хоста е 20us
TRISC1=1;     Хостът е настроен на вход, за да прецени сигнала за отговор на slave
RC1=1;
  ако(! RC1)
  {
   докато((! RC1)) // Определете дали подчинението излъчва сигнал с нисък отговор от 80us или не
   {
    NOP();
   }
   while(RC1) // Определете дали подчинението излъчва високо ниво 80us, и ако да, влиза в състояние на приемане на данни
   {
    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();
  докато(1)
  {
   Read_data();
  }
}[/mw_shl_code]




Предишен:Мисъл и голо програмиране [Сериализирано]
Следващ:Социални помощи, правила за именуване на C език, много практични неща
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com