在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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)用 > DS18B20溫度檢測調(diào)節(jié)程序(C代碼)

            DS18B20溫度檢測調(diào)節(jié)程序(C代碼)

            作者: 時(shí)間:2016-11-17 來源:網(wǎng)絡(luò) 收藏
            #include"reg52.h"

            #include"intrins.h"
            #include"absacc.h"
            #define uint unsigned int
            #define uchar unsigned char
            uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽管0~9
            uchar code tab_motor_1[]={0x03,0x06,0x0c,0x09}; //電機(jī)正轉(zhuǎn) 向上
            uchar code tab_motor_2[]={0x09,0x0c,0x06,0x03}; //電機(jī)反轉(zhuǎn) 向下

            本文引用地址:http://www.biyoush.com/article/201611/315460.htm

            sbit ds18b20_in=P2^4; //溫度傳感器數(shù)據(jù)線位定義
            sbit dht11=P2^2; //溫濕度傳感器 數(shù)據(jù)線位定義
            sbit SPEAKER=P2^3; //報(bào)警器
            //sbit FAN=P2^5; //電風(fēng)扇
            sbit HEATERS=P3^1;
            sbit FAN=P3^0;
            //******************全局變量定義**********************************
            uchar tempL=0,tempH=0; //ds18b20讀取值
            uchar Set_Temp_H=30,Set_Temp_L=24;//溫度邊界值設(shè)定值
            uchar Set_Humi_H,Set_Humi_L;
            uchar Set_Illu_H,Set_Illu_L;
            uchar flag_judge_temp,flag_judge_humi,flag_judge_illu; //標(biāo)志位定義
            float temperature,illumination,humidity; //溫度值、光照值、濕度值?
            //**********************延時(shí)子程序************************
            void delay(uint time)
            {
            uint n=0;
            while(n {n++;}
            return;
            }
            void delay1()
            {
            int k;
            for(k=0;k<600;k++);
            }
            void delay20ms(void) //誤差 0us
            {
            unsigned char a,b;
            for(b=215;b>0;b--)
            for(a=45;a>0;a--);
            _nop_; //if Keil,require use intrins.h
            _nop_; //if Keil,require use intrins.h
            }
            //*******************顯示子程序**************************
            void display(float k)
            {
            int t;
            t=k*100;
            P1=0xfe;
            P0=tab[t/1000];//十位
            delay1();
            P1=0xfd;
            P0=tab[t%1000/100]-0x80;//個位+小數(shù)點(diǎn)
            delay1();
            P1=0xfb;
            P0=tab[t%100/10];//十分位
            delay1();
            P1=0xf7;
            P0=tab[t%10];//百分位
            delay1();
            P1=0xff;
            }
            //*****************ds18b20的初始化程序*********************
            init_ds18b20()
            {
            uchar x=0;
            ds18b20_in=1; //ds18b20_in先置高
            delay(8);
            ds18b20_in=0; //發(fā)送復(fù)位脈沖
            delay(85); //延時(shí)>480ms
            ds18b20_in=1; //拉高數(shù)據(jù)線
            delay(14); //等待15~60ms
            x=ds18b20_in; //用x的值來判斷初始化是否成功
            //ds18b20存在的話x=0,否則x=1
            delay(20);
            }
            /**************************讀取字符子程序******************/
            ReadOneChar()
            {
            uchar i=0; //主機(jī)數(shù)據(jù)線先從高電平拉低1ms以上,在拉高,從而產(chǎn)生讀信號

            uchar dat=0; //每個讀取周期最短持續(xù)時(shí)間為60ms,各個讀取周期之間必須有1ms以上的高電平恢復(fù)??

            for(i=8;i>0;i--) //一個字節(jié)8位
            {
            ds18b20_in=1;delay(1);
            ds18b20_in=0;dat>>=1;ds18b20_in=1;
            if(ds18b20_in)
            dat|=0x80;
            delay(4);
            }
            return(dat);
            }
            //****************向?qū)懸粋€字節(jié)子程序*********************/
            WriteOneChar(uchar dat)
            {
            uchar i; //數(shù)據(jù)從高電平拉至低電平,產(chǎn)生寫起始信號
            for(i=8;i>0;i--)
            {
            ds18b20_in=0;
            ds18b20_in=dat&0x01;
            delay(5);
            ds18b20_in=1;
            dat>>=1;
            }
            delay(4);
            }
            /*********************************************************
            向ds18b20度溫度值
            出口參數(shù)temprature
            *********************************************************/
            ReadTemperature()
            {
            init_ds18b20(); //初始化
            WriteOneChar(0xcc); //跳過讀序列號的操作
            WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換
            delay(125); //轉(zhuǎn)換延時(shí)
            init_ds18b20(); //初始化
            WriteOneChar(0xcc); //跳過讀序列號的操作
            WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別是溫度的低位和高位)
            tempL=ReadOneChar(); //讀出溫度的低位LSB
            tempH=ReadOneChar(); //讀出高位的高位MSB
            //tempL=0X91;tempH=0X01;
            if(tempH&0x80)
            temperature=(~((tempH*256)+tempL)+1)*0.0625; //零度以下
            //溫度轉(zhuǎn)換,把高位低位做相應(yīng)的運(yùn)算轉(zhuǎn)換為實(shí)際的溫度
            else
            temperature=((tempH*256)+tempL)*0.0625; //零度以上
            delay(200);
            return(temperature);
            }
            //*************************************************************************************************************************************
            //**************報(bào)警子程序****************
            sounder_H()
            {

            SPEAKER=1;
            delay1();delay1();delay1();
            SPEAKER=0;
            }
            sounder_L() //蜂鳴器 低電平響
            {

            SPEAKER=1;
            delay1();delay1();delay1();
            delay1();delay1();delay1();
            delay1();delay1();delay1();
            delay1();delay1();delay1();
            SPEAKER=0;
            }
            //*************步進(jìn)電機(jī)子程序**************
            void motor_up()
            {
            int m,n;
            for(m=0;m<24;m++)
            for(n=0;n<4;n++)
            { P3=tab_motor_1[n];delay20ms();}
            }
            void motor_down()
            {
            int m,n;
            for(m=0;m<288;m++)
            for(n=0;n<4;n++)
            { P3=tab_motor_2[n];delay20ms();}
            }
            /*************電風(fēng)扇開啟子程序 **************
            **************由直流電機(jī) 控制 *************/
            void fan()
            {
            FAN=0; //開啟繼電器 打開電動機(jī)
            }
            //**************加熱器*********************
            void heaters()
            {
            HEATERS=0;
            }

            /*************溫度判斷***************
            正常返回“1 否則返回0?
            *************************************/
            judge_temp(float i)
            {
            int k;
            k=(int)(i*100);
            if( k<=Set_Temp_H*100 && k>=Set_Temp_L*100 ) //正常范圍內(nèi)
            { return 1;}
            if(k {
            flag_judge_temp=0; return 0;}
            else
            {
            flag_judge_temp=1; return 0;} //高于最大值
            }
            /*************濕度判斷***************
            正常返回“1 否則返回0
            *************************************/
            judge_humi(float ii)
            {}
            /*************光照判斷***************
            正常返回“1 否則返回0
            *************************************/
            judge_illu(float iii)
            {}


            //********************主程序****************
            void main()
            {
            float i;
            while(1)
            {
            i=ReadTemperature();
            display(i);

            /**********判斷******/
            {
            if(!judge_temp(i))
            {
            if(flag_judge_temp) //溫度高
            {sounder_H(); fan();HEATERS=1;//motor_up();
            }
            else
            {sounder_L(); heaters();FAN=1;//motor_down();
            } //溫度低
            }
            else {SPEAKER=1;FAN=1;HEATERS=1;}//關(guān)閉相應(yīng)調(diào)節(jié)功能
            }

            /*********處理**********/
            }
            }



            關(guān)鍵詞: DS18B20溫度檢測調(diào)

            評論


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

            關(guān)閉