在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī) 溫濕度傳感器DHT11

            51單片機(jī) 溫濕度傳感器DHT11

            作者: 時(shí)間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
            //硬件連接: P2.0口為通訊口連接DHT1
            #include
            #include

            typedef unsigned char U8;
            typedef signed char S8;
            typedef unsigned int U16;

            #define uchar unsigned char
            #define uint unsigned int

            sbit P2_0 = P2^0 ;
            sbit P2_1 = P2^1 ;
            //----------------------------------------------//
            //----------------定義區(qū)--------------------//
            //----------------------------------------------//
            U8 U8FLAG;
            U8 U8count,U8temp;
            U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
            U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
            U8 U8comdata;
            U8 indata[5];
            U8 count, count_r=0;
            U16 U16temp1,U16temp2;

            sbit d1=P2^4;
            sbit d2=P2^5;
            sbit d3=P2^6;
            sbit d4=P2^7;
            uchar code LEDData[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
            0x80,0x90,0xff};
            uchar data display[5] = {0x00,0x00,0x00,0x00,0x00};

            void Delay(U16 j)
            {
            U8 i;
            for(;j>0;j--)
            {
            for(i=0;i<27;i++);
            }
            }
            void delay(unsigned int num)//延時(shí)函數(shù)
            {
            while( --num );
            }
            void Delay_10us(void)
            {
            U8 i;
            i--;
            i--;
            i--;
            i--;
            i--;
            i--;
            }
            //串行總線
            void COM(void)
            {

            U8 i;
            for(i=0;i<8;i++)
            {

            U8FLAG=2;
            //----------------------
            P2_1=0 ; //T
            P2_1=1 ; //T
            //----------------------

            while((!P2_0)&&U8FLAG++);
            Delay_10us();
            Delay_10us();
            // Delay_10us();
            U8temp=0;
            if(P2_0)U8temp=1;
            U8FLAG=2;
            while((P2_0)&&U8FLAG++);

            //----------------------
            P2_1=0 ; //T
            P2_1=1 ; //T
            //----------------------
            //超時(shí)則跳出for循環(huán)
            if(U8FLAG==1)break;
            //判斷數(shù)據(jù)位是0還是1

            // 如果高電平高過預(yù)定0高電平值則數(shù)據(jù)位為 1

            U8comdata<<=1;
            U8comdata|=U8temp; //0
            }//rof

            }

            //--------------------------------
            //-----濕度讀取子程序 ------------
            //--------------------------------
            //----以下變量均為全局變量--------
            //----溫度高8位== U8T_data_H------
            //----溫度低8位== U8T_data_L------
            //----濕度高8位== U8RH_data_H-----
            //----濕度低8位== U8RH_data_L-----
            //----校驗(yàn) 8位 == U8checkdata-----
            //----調(diào)用相關(guān)子程序如下----------
            //---- Delay();, Delay_10us();,COM();
            //--------------------------------

            void RH(void)
            {
            //主機(jī)拉低18ms
            P2_0=0;
            Delay(180);
            P2_0=1;
            //總線由上拉電阻拉高 主機(jī)延時(shí)20us
            Delay_10us();
            Delay_10us();
            Delay_10us();
            Delay_10us();
            //主機(jī)設(shè)為輸入 判斷從機(jī)響應(yīng)信號(hào)
            P2_0=1;
            //判斷從機(jī)是否有低電平響應(yīng)信號(hào)如不響應(yīng)則跳出,響應(yīng)則向下運(yùn)行
            if(!P2_0) //T !
            {
            U8FLAG=2;////////////////////////////////////////////////////
            //判斷從機(jī)是否發(fā)出 80us 的低電平響應(yīng)信號(hào)是否結(jié)束
            while((!P2_0)&&U8FLAG++);
            U8FLAG=2;
            //判斷從機(jī)是否發(fā)出 80us 的高電平,如發(fā)出則進(jìn)入數(shù)據(jù)接收狀態(tài)
            while((P2_0)&&U8FLAG++);
            //數(shù)據(jù)接收狀態(tài)
            COM();
            U8RH_data_H_temp=U8comdata;
            COM();
            U8RH_data_L_temp=U8comdata;
            COM();
            U8T_data_H_temp=U8comdata;
            COM();
            U8T_data_L_temp=U8comdata;
            COM();
            U8checkdata_temp=U8comdata;
            P2_0=1;
            //數(shù)據(jù)校驗(yàn)

            U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
            if(U8temp==U8checkdata_temp)
            {
            U8RH_data_H=U8RH_data_H_temp;
            U8RH_data_L=U8RH_data_L_temp;
            U8T_data_H=U8T_data_H_temp;
            U8T_data_L=U8T_data_L_temp;
            U8checkdata=U8checkdata_temp;
            }//fi
            }//fi

            }

            Disp_Temperature()//顯示溫度
            {
            unsigned char n=0;

            // display[4]=temp_data[0]&0x0f;
            // display[0]=ditab[display[4]]; //查表得小數(shù)位的值

            // display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);

            display[4]=U8RH_data_H;
            display[4]=display[4]%100;
            display[3]=display[4]/10;
            display[2]=display[1]%10;

            display[4]=U8T_data_H;
            display[4]=display[4]%100;
            display[1]=display[4]/10;
            display[0]=display[4]%10;

            if(!display[3]) //高位為0,不顯示
            {
            display[3]=0x0a;
            if(!display[1]) //次次高位為0,不顯示
            display[1]=0x0a;
            }

            d1=1;
            P0=LEDData[display[0]];
            delay(5);d1=0;

            d2=1;
            P0=LEDData[display[1]];
            delay(5);d2=0;

            d3=1;
            P0=LEDData[display[2]];
            delay(5);d3=0;

            d4=1;
            P0=LEDData[display[3]];
            delay(5);d4=0;
            }

            void main(void)
            {
            while(1)
            {
            RH();
            Disp_Temperature();
            //讀取模塊數(shù)據(jù)周期不易小于 2S
            Delay(20000);
            }
            }


            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉