Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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;
Порожнеча timer0_init()
{
   TMR0=0;  Перше значення
   T0CS=0;  Виберіть джерело тактового сигналу, яке становить 1/4 кристалічного генератора;
   T0SE=1;   Біти вибору ребер джерела тактового сигналу
   PSA=0;    Біти передподілника
   PS0=0; PS1=0; PS2=0;  Переддивізійні відбіркові моменти
   TMR0IF=0;    Прапорець таймера чистий 0
   GIE=1;       Відкрити глобальне переривання
   TMR0IE=0;    Таймер 0 увімкнено
   TMR0=236;    Перша цінність вірша
}
Таймер переривання порожнечі 0()
{
     if(TMR0IF)
     {
       TMR0IF=0; TMR0=235;
       delay_time--;
     }   
}
Порожнеча timer0_delay(Uint delay_value)
{
    delay_time=delay_value;
    TMR0IE=1;
    while(delay_time);
    TMR0IE=0;
}
Uchar Read_byte()
{
Учар I, темп, гум;
   for(i=0; i<8; i++)   
    {
       поки(! RC1);   
       timer0_delay(2); Затримка 20us  
       temp=0;
       if(RC1){temp=1; поки (RC1); }
       інакше{temp=0; }   
       гул<<=1;
       hum|=temp;                           
  }
   return(гул);
}
Порожнеча Read_data()
{
Учар ckeck_value;
RC1=0;
timer0_delay(2500); Автобус тягне вниз щонайменше на 18 МС
RC1=1;
timer0_delay(2); Шина підтягується підтягувальним резистором, а затримка хоста становить 20us
TRISC1=1;     Хост налаштований на вхід для оцінки сигналу відповіді підлеглого
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