欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3367|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stc12c5a60s2單片機(jī)簡單實(shí)現(xiàn)DHT11源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
網(wǎng)絡(luò)上有很多實(shí)現(xiàn)DHT11的程序,單大多都是89c52的。而有關(guān)stc12c5a60s2的很少。
本人是新手一枚,在寫關(guān)于stc12串口接收dht11數(shù)據(jù)時(shí),發(fā)現(xiàn)接收到的都是0。
這是為什么呢?在網(wǎng)上查了一堆資料后,明白是時(shí)序的原因。
stc12系列的處理速度比89c52的速度快,且我們寫的延時(shí)函數(shù)所延時(shí)的時(shí)間與參數(shù)不成正比。需要示波器。

硬件:芯片:stc12c5a60s2
          晶振:110592mhz

部分代碼:
main.c中:
    DHT11數(shù)據(jù)讀取  串口發(fā)送 波特率9600  STC12C5A60S2
/**************************************************/
#include <reg51.h>
#include "UART.H"
#include  "DELAY.H"
#include  "stdio.h"
#include  <INTRINS.H>  
//-------相關(guān)參數(shù)定義區(qū)-----------

sbit TRH = P2^0;//溫濕度傳感器DHT11數(shù)據(jù)接入
//char str1[]={"   "};
//char str2[]={"   "};
int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;


//-------聲明函數(shù)區(qū)--------------
void delay(unsigned int i);
void delay_ms(unsigned int i);
void Delay10u();
void Delay18ms();                //@11.0592MHz
char DHT11_rec_byte();
void DHT11_receive();


//-------主函數(shù)區(qū)----------
void main(void)
{
        Uart1Init();    //初始化串口9600
        DHT11_receive();   //溫濕度讀取
        delay(100);   

        while(1)
        {               
//                     DHT11_receive();   //溫濕度讀取        
//                                delay_ms(120);
//                                delay_ms(120);
                                 DHT11_receive();
//                                delay_ms(1000);
//                                delay_ms(120);

                printf("wendu:%d\n",(int)TH_temp);
                printf("shidu:%d\n",(int)RH_temp);
                        
                 delay(800);   
        }
}
//-------dht11函數(shù)區(qū)---------
char DHT11_rec_byte()
{   
          char i;
          com_data=0;
          for(i=0;i<=7;i++)   
         {
                    respond=2;
                    while((!TRH)&&respond++);
            Delay10u();
                                                     Delay10u();
                                                     Delay10u();
                    if(TRH)
                    {
                              temp=1;
                              respond=2;
                              while((TRH)&&respond++);
                    }
                    else
                              temp=0;
                    com_data<<=1;
                    com_data|=temp;   
          }
          return(com_data);  
}

/****************************************************************************/
//濕度讀取子程序
//溫度高8位== TH_data
//溫度低8位== TL_data
//濕度高8位== RH_data
//濕度低8位== RL_data
//校驗(yàn) 8位 == CK_data
//調(diào)用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void DHT11_receive()
{
          //主機(jī)拉低18ms
          TRH=0;
Delay18ms();
         TRH=1;
          //DATA總線由上拉電阻拉高 主機(jī)延時(shí)50us
                                                     Delay10u();
                                                             Delay10u();
          //delay_us();delay_us();delay_us();delay_us();
          //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
            TRH=1;
          //判斷DHT11是否有低電平響應(yīng)信號(hào) 如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行   
         if(!TRH)   
         {
                  respond=2;
                  //判斷DHT11發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
               while((!TRH)&& respond++);
                 respond=2;
                 //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
                while(TRH && respond++);
               //數(shù)據(jù)接收狀態(tài)   
                RH_temp = DHT11_rec_byte();
                RL_temp = DHT11_rec_byte();
                TH_temp = DHT11_rec_byte();
                TL_temp = DHT11_rec_byte();
                CK_temp = DHT11_rec_byte();
                TRH=1;

        }                                                                        
}


delay.c中:
#include  <INTRINS.H>  
//---------延時(shí)函數(shù)區(qū)----------
void delay(unsigned int i)
{
        while(i--);
}
void delay_ms(unsigned int i)
{
        while(i--)
                delay(90);
}

//---------DHT11函數(shù)區(qū)----------
void Delay10u()
{
        unsigned char i;
        _nop_();
        _nop_();
        _nop_();               
        i = 24;
        while (--i);
}

void Delay18ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 194;
        k = 159;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



//實(shí)測可以運(yùn)行,并接收到溫濕度整數(shù)部分。
//本人新手,寫的不好請輕噴

OP~C7}6R[)$(TDZTDA`BNRE.png (80.78 KB, 下載次數(shù): 26)

OP~C7}6R[)$(TDZTDA`BNRE.png

DHT11模塊化.zip

36.26 KB, 下載次數(shù): 144, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:315244 發(fā)表于 2020-8-8 20:14 | 只看該作者
太感謝了,我搞了一天怎么搞也沒有數(shù)據(jù)。用了此程序數(shù)據(jù)來了
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表